2021-05-12 14:32:11
Linux 4.0+核心對硬體交換模組的支援(HW Switch Offload)
Linux核心最近躍進到了4.x時代,初看沒啥大的動作,但是對於我而言,最令人興奮的還是它對硬交換模組的支援。這也是為全面迎合SDN做好準備的第一步。
Linux上的路由與交換
Linux誕生於網路,天生對網路擁有全面且強大的支援,即便再複雜的協定,再封閉的技術,幾乎都可以找到對應的Linux實現。然而這並不是說Linux網路就天下無敵了,它存在很多不合理的地方。
Linux擁有對路由的強大支援,在資料平面,你可以很輕鬆地實現一種路由查詢演算法,在控制平面,你也可以在使用者態實現任何已有的或者你自己設計的路由協定,然而,這一切都是軟的,也就是說,都是CPU來完成的。
當我們知道路由和交換的區別之後,就會發現,Linux一直以來都沒有實現真正的交換,起碼在通用介面層面上沒有一個合理的解決方案。Linux的bridge模組?算了吧,它只是實現了一個軟網橋,和真正交換機不沾邊的。
Linux對硬體交換的支援
記得去年的時候,我曾經拿到過一塊交換板,可以直接插在主機板的PCI-E上,當時必須使用廠商特定的驅動程式以及配合VLAN技術才能將其用起來。其實很多的交換機可能都採用了Linux作為管理平面和控制平面,然後設定自己的客製化硬體和客製化驅動來使用。
我曾經想過一種辦法用Netfilter技術實現對硬體交換模組的支援,但是,CPU還是要被中斷的,整個流程是CPU將封包拉到bridge或者IP層,然後再交回硬體...正確的方式是根本不用中斷CPU,完全通過硬體來轉發封包,只有資料和本地協定棧相關的時候,才中斷CPU。而這個思路,意味著你必須重寫驅動。
總之,沒有一個統一的介面,這就意味著如果你自己想設計一塊交換板,沒有比較好的標準可循,即便有,可能你也要自己編寫或者複製貼上大量的驅動程式碼,這將嚴重影響研發效率。
Linux 4.0的switchdev
一切壞訊息在Linux 4.0核心中終結。
Linux 4.0引入了一個switchdev框架,它代表一類擁有“交換”能力晶片的多網口裝置的抽象。其中每一個網口就是一個port,在switchdev框架中被註冊成一個net_device。除此之外,核心中自帶了一個rocker driver,演示了一個實際的裝置驅動的實現。整個switchdev的示意圖如下所示:
注意,理想化的實現中,OpenFlow控制器可以直接將流表注入到裝置中,從而指導裝置直接進行封包交換。流表的內容超級複雜,不是本文的目標,但是相信在後一個核心版本中會出現相關的Document。
採用了硬體交換模組的Linux BOX和原來的截然不同了,它更像是一個高階的專業網路裝置,類似Cisco那樣的。它看起來就是下面的樣子:
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-05/117638.htm
相關文章