1. 程式人生 > >異數OS TCP協議棧測試(四)--網絡卡適配篇

異數OS TCP協議棧測試(四)--網絡卡適配篇

異數OS TCP協議棧測試(四)–網絡卡適配篇

本文來自異數OS社群

github: https://github.com/yds086/HereticOS
異數OS社群QQ群: 652455784
異數OS-織夢師(訊息中介軟體)群: 476260389

為了實際走向應用,異數OS目前適配了netmap平臺,DPDK平臺,暫時每埠單核單佇列的模式,後面各項問題解決後,開始適配RSS FDIR方案,下面是目前適配各個網絡卡驅動平臺的測試結果。

測試說明

測試硬體平臺

CPU : E5 2670 V1 2.3G
記憶體:64G
網絡卡: intel 82599 雙口,5GT PCI E限制(損失30%滿載收發包效能)

測試用例

1.雙口雙核,將網絡卡兩個口用光纖迴環連結,CPU3 建立TCP server,CPU 5建立 指定連線數量的TCP Client執行緒(每連結4執行緒),測試方案使用 異數OS TCP協議棧測試(三)–長連線篇的的測試方法,成績是ECHO的iops成績。

1.單口單核,將網絡卡1個口的TX RX光纖迴環連結,CPU3 建立TCP server,同時建立 指定連線數量的TCP Client執行緒,測試方案使用 異數OS TCP協議棧測試(三)–長連線篇的的測試方法,成績是ECHO的iops成績。

3.UDP NIC迴環,分別在雙口雙核 單口單核模式下,建立兩個執行緒,兩個執行緒繫結對應的網絡卡介面卡,對發UDP包記錄下收發包的速度,成績是收包發包迴圈的次數,一次收一個發把一個包。

測試結果

網絡卡介面平臺 測試用例 NIC UDP 迴環 1連結 8TCP連結 32TCP連結 64TCP連結 128TCP連結 256TCP連結 600WTCP連結
dpdk 雙口雙核 10M 136K 1.037M 3.47M 4.06M 4.2M 4.4M 3.1M 會丟包丟連結
dpdk 單口單核 9M 136K 1.018M 2.35M 2.5M 1.95M 1.9M 950k
netmap 雙口雙核 8M 131K 940k 3.6M 4.2M 4.5M 4.7M 2.3M
netmap 單口單核 6M 131K 940k 2.2M 2.8M 2.7M 2.4M 1.5M
異數OS軟體交換機 雙口雙核 13M 1.8M 4.6M 4.6M 4.6M 4.7M 4.8M 3.3M
異數OS軟體交換機 單口單核 14M 5.3M 5.0M 5.0M 4.95M 4.95M 5.03M 4.3M

適配總結

netmap,dpdk,異數OS軟體交換機測試對比

通過適配netmap和DPDK平臺,總結一些問題,netmap適配下來,效能比DPDK要強大概10%到100%,尤其是在連結多,app業務佔用記憶體多的環境,dpdk在3W連結以上會出現Server端RX丟包(Dropped),導致連結大量的丟失,600W丟失500w,並造成不穩定,而這一現象目前在netmap環境下沒有出現,netmap以及異數OS軟體交換機可以做到600W 0丟包,另外netmap由於採用ring與上層協議棧交換資料,不需要分配釋放包快取,因此降低了適配複雜度,並提高了包交換效能,這使得netmap的效能可以達到異數OS軟體交換機效能的90%,而DPDK只能交換包陣列,需要大量的工作做包快取管理,效率較低,這可能是DPDK實際上比netmap以及異數OS軟體交換機慢的原因。

TCP協議棧適配網絡卡的問題

由於TCP需要類似ECHO的傳輸流程控制機制,因此單個連結並不能批量收發包,這導致使用批量收發包技術的網絡卡出現效能損失,效能被網絡卡約束所影響,出現了一個性能牆,由測試資料來看,必須在32或者64路以上併發TCP連結,才有希望利用10G網絡卡的IO能力,由於異數OS軟體交換機使用記憶體交換技術(多核採用CPU cache跨核交換),因此延遲比較低,一般在70ns左右,因此不存在單鏈接效能牆的問題。

DPDK丟包問題分析

DPDK經過反覆分析調參,任然無法解決丟包的問題,在3W連結以下以及UDP收發包測試中,DPDK可以0丟包,推斷可能是需要設定網絡卡流控,但實際上設定後並沒有任何效果,排除流控的問題,無奈用異數OS做了軟體流控,將TCP客戶端發包能力控制在5000以內,發現丟包問題任然無法解決,而異數OS此時對rte_eth_rx_burst的polling速度是30M,所以排除是協議棧延遲高的問題,經過慢速持續增長的連結執行緒觀察(每秒建立1000個TCPClient,netmap平臺可每秒建立200W連結無問題),在Client連結執行緒數建立超過3W時,丟包現象開始發生,此時軟體層佔用巨頁記憶體20M,正好達到E52670 L3 Cache的尺寸,所以暫時推斷DPDK的ddio的ring polling技術可能存在問題,當l3 cache不足,需要在記憶體交換包時可能出現丟包。