1. 程式人生 > >網絡卡多佇列技術與RSS功能介紹

網絡卡多佇列技術與RSS功能介紹

多佇列網絡卡是一種技術,最初是用來解決網路IO QoS (quality of service)問題的,後來隨著網路IO的頻寬的不斷提升,單核CPU不能完全處滿足網絡卡的需求,通過多佇列網絡卡驅動的支援,將各個佇列通過中斷繫結到不同的核上,以滿足網絡卡的需求。

常見的有Intel的82575、82576,Boardcom的57711等,下面以公司的伺服器使用較多的Intel 82575網絡卡為例,分析一下多佇列網絡卡的硬體的實現以及linux核心軟體的支援。

1.多佇列網絡卡硬體實現

圖1.1是Intel 82575硬體邏輯圖,有四個硬體佇列。當收到報文時,通過hash包頭的SIP、Sport、DIP、Dport四元組,將一條流總是收到相同的佇列。同時觸發與該佇列繫結的中斷。

圖1.1 82575硬體邏輯圖

2.什麼是RSS

RSS(Receive Side Scaling)是一種能夠在多處理器系統下使接收報文在多個CPU之間高效分發的網絡卡驅動技術。

網絡卡對接收到的報文進行解析,獲取IP地址(SIP、DIP)、協議和埠(Sport、Dport))五元組資訊,網絡卡通過配置的HASH函式根據五元組資訊計算出HASH值,也可以根據二、三或四元組進行計算。取HASH值的低幾位(這個具體網絡卡可能不同)作為RETA(redirection table)的索引,根據RETA中儲存的值分發到對應的CPU。

基於RSS技術程式可以通過硬體在多個CPU之間來分發資料流,並且可以通過對RETA的修改來實現動態的負載均衡。

3.在DPDK中配置RSS

DPDK支援設定靜態hash值和配置RETA。 不過DPDK中RSS是基於埠的,並根據埠的接收佇列進行報文分發的。 例如我們在一個埠上配置了3個接收佇列(0,1,2)並開啟了RSS,那麼RETA(redirection table)中就是這樣的:{0,1,2,0,1,2,0.........}。執行在不同CPU的應用程式就從不同的接收佇列接收報文,這樣就達到了報文分發的效果。

在DPDK中通過設定rte_eth_conf中的mq_mode欄位來開啟RSS功能, rx_mode.mq_mode = ETH_MQ_RX_RSS。

當RSS功能開啟後,報文對應的rte_pktmbuf中就會存有RSS計算的hash值,可以通過pktmbuf.hash.rss來訪問。 這個值可以直接用在後續報文處理過程中而不需要重新計算hash值,如快速轉發,標識報文流等。

RETA是執行時可配置的,這樣應用程式就可以動態改變CPU對應的接收佇列,從而動態調節報文分發。 具體通過PMD模組的驅動進行配置,例如ixgbe_dev_rss_reta_update和ixgbe_dev_rss_reta_query。 ---------------------  原文:https://blog.csdn.net/baidu_24553027/article/details/54927724?utm_source=copy