Linux 操作系統原理 — 網絡硬件卸載

目錄

網絡 Offload

網絡 Offload,主要是指將原本在內核網絡協議棧中進行的 IP 分片、TCP 分段、重組、checksum 校驗等操作,轉移到網卡硬件中進行,使得 CPU 的發包路徑更短,消耗更低,從而提高處理性能。

一開始這些 Offload 功能都是在網卡上針對特定功能設計一個專門的電路並且帶有很小的緩存,去做專門的事情。後來直接在網卡上部署一個可編程的通用的小型 CPU,一般稱爲網絡協處理器,就是現在的智能網卡。智能網卡的協處理器可以先對該數據包進行一些預處理,根據處理結果考慮是不是要把數據包發送給主機 CPU,智能網卡中的 Offload 功能一般是使用 eBPF 編程來實現的。

交換 Offload

Linux 4.0 引入了 switchdev 框架,它代表對一類擁有 “交換” 能力芯片的多網口設備的抽象。其中每一個網口就是一個 Port,在 switchdev 框架中被註冊成爲一個 net_device。

switchdev 起源於 Open vSwitch 項目,由 Jiři Pirko 在 2014 年 9 月首次提出。在 2015 年 2 月的 Netdev 0.1 會議上,網絡開發人員決定擴展並採用 switchdev 作爲硬件交換機芯片的通用解決方案。switchdev 驅動模型出現之前,Linux 需要交換機廠商的專門工具套件操作交換機,而在 switchdev 驅動模型之後,通用接口被實現。交換機正式納入 Linux 網絡設備體系,Linux 可以用標準接口實現交換機的控制面和管理面

在 switchdev 驅動框架下,硬件交換機設備上的每個物理端口都在內核中註冊爲一個 net_device,就像對現有的網卡設備所做的那樣。可以使用現有的指令工具(e.g. brctl、ip 和 iproute2)將端口綁定或橋接、隧道化或劃分 VLAN。

switchdev 驅動程序的優點是這樣的交換結構可以被卸載到交換機硬件上。因此,驅動程序將轉發數據庫(FDB)中的每個條目鏡像到硬件,並監視其更改情況。

在這裏插入圖片描述
最初,switchdev 支持的唯一設備是 QEMU 的 Rocker 軟件交換機。後來 Mellanox 和 Broadcom 等公司均提供了支持 switchdev 的交換機器。OpenStack Pike 版本中引入了對 switchdev 的支持,實現了 Open vSwitch 硬件卸載(offloading)功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章