惠普的關於 QLogic (fka Broadcom) NetXtreme II 轉接器的白皮書,其中包括我正在測試的特定 NIC,指出(第 7 頁)它們對於高達 256 位元組/資料包的小資料包效能高於 5,000,000 個資料包/秒。
在我使用一個應用程式進行的測試中,除了 UDP 接收部分之外,我禁用了所有處理,因此每秒最多只能處理 120,000 個資料包。資料包均勻分佈在 12 個多播組上。
我注意到有一個核心(2 個插槽上各有 12 個核心)當我提高 UDP 發送速率時,其負載逐漸增加最大數量約 120,000。但我不知道那個核心在做什麼以及為什麼。這不是我的應用程式中的單執行緒瓶頸,因為無論我為所有多播群組運行該應用程式的單一實例,還是運行每個處理 1 個多播群組的 12 個實例,都沒有關係。所以瓶頸不是我的接收器應用程式。
MSI 已啟用(透過驗證裝置管理員中的「按類型劃分的資源」視圖)且 RSS 也在 NIC 設定中啟用,有 8 個佇列。那麼,是什麼附著在這個核心上呢?所有 NIC 卸載功能目前均已開啟,但關閉它們並沒有幫助。
那麼瓶頸可能在哪裡呢?
系統詳細資訊:
- ProLiant BL460c Gen9
- 英特爾至強 E5-2670 v3(2 x 12 核)
- HP FlexFabric 10Gb 2 連接埠 536FLB 網路卡
- Windows 2012 R2
答案1
NIC 設定中也啟用了 RSS,有 8 個佇列。
不幸的是,這並不意味著 RSS 正在被使用,因為
netsh int tcp show global
顯示:
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled
運行後(順便說一句,無需重新啟動)
netsh int tcp set global rss=enabled
RSS 開始工作,之前堆積在一個較差核心上的負載現在均勻分佈在 2 個 NUMA 節點之一的多個核心上。
我還沒有驗證這是否能讓我處理所宣傳的 Mpps 負載,但上限足以滿足我需要的基準測試。