Intel光網絡卡調優

2021-07-26 05:52:53 字數 1901 閱讀 7141

場景:

隨著電信行業步入4g時代,業務資料海量增長,為了提公升處理能力,專案最近準備採購一批光網絡卡以取代普通網絡卡進行流動網路語音資料採集處理。

專案上的probe程式在使用普通千兆網絡卡時理想處理速率在300mbps~400mbps,效能瓶頸為網絡卡本身採集速率無法提公升。本次採購的是intel核心的萬兆光網絡卡,前期開發測試環境如下:

產品名稱:intel® ethernet server adapter x520-2;

網絡卡驅動版本:20.0;

伺服器:dell 730rd(建議將光網絡卡插在第4、5全高插槽,全高為pci-e 16x,半高為pci-e 8x

作業系統:windows server 2012 r2;

資料來源:利用發包機通過光纖連線進行發包;

windows server 2012 r2環境下測試場景:

開發環境測試完畢之後為確保可靠性,到移動現場進行生產環境測試。本以為會一切順利,結果不出所料,各種意外。

現場裝置使用的是windows server 2008 r2作業系統,伺服器跟開發環境一樣。問題就出在作業系統上,剛開始測試時tap分流器傳送流量在300mbps時,光網絡卡就開始丟包,這樣的話它比普通網絡卡處理效能還低。老辦法,在度娘上一通找依舊沒有解決問題,跟廠家溝通,他們反饋說是只負責硬體,光網絡卡核心是intel的,無法提供技術支援(沒有核心功能的廠家,悲哀了他們,也悲哀了我們呀!!)。苦逼的我只能在度娘中繼續查詢,先是進行網絡卡引數優化(開啟網路和共享中心—更改介面卡設定—右鍵屬性—配置—高階),問題沒有解決。重新審查**,仍然沒反應,後來意外發現一篇文章介紹說是可能跟網絡卡的socket buffer(網絡卡socket緩衝的自動調整功能)有關,主要是兩個引數so_sndbuff、so_revbuff,通過命令列netsh winsock show autotuning發現該功能已經開啟。坑爹就坑爹在這裡,由於2012版本以下的作業系統該功能雖然已經開啟,但對光網絡卡這種新裝置並不起作用,所以出現開發環境測試沒問題,但生產環境測試就出現故障,因為該功能等於無用。那麼問題就來了…

只能人為的在probe程式裡進行修改,我們的程式使用的是標準winpcap庫對網絡卡進行操作,通過該庫中的函式deviceiocontrol將so_revbuff快取調整為1024 * 1024 * 512(經測試設定為512m大小時是最佳狀態),重新編譯probe執行,光網絡卡接收速率提公升至3gbps,程式處理能力達到了1.5gbps。看結果似乎已經達到提公升的目的,但對於萬兆光網絡卡而言這點處理能力離它的最佳效能還是太遠。又是一通度娘查詢以及各種嘗試,最後通過配置網絡卡引數解決了問題,將光網絡卡接收速率提公升到9gbps,程式空跑處理能力達到5gbps左右。

引數調整說明如下:

1、flowcontrol 流控制

使用的是802.3x標準,這個標準的核心作用就是防止網路擁堵時導致的「丟包」問題,大致的工作原理就是當鏈路兩端的裝置有一端忙不過來了,他會給另外一端的裝置發乙個暫停發包的命令,通過這種方式來緩解壓力,解決丟包問題。建議關閉。

2、jumboframe 巨幀資料報

乙太網標準的最大幀長度為1518位元組,網絡卡處理的物件是包(幀),理論上單位時間內處理的包數相同時,幀越大,處理速率就越大。對於大流量網絡卡(如:千兆、萬兆網絡卡)建議開啟該功能,intel類的網絡卡建議設定4k的巨幀。

3、接收快取\傳輸快取

該功能可以根據實際情況進行調整,主要調整接收快取,當然也可預設為512m,本測試就為預設值。

最後總結:

軟體開發沒問題,後面硬體各種坑,要全能;

測試環境很理想,生產環境要一致,憋任性;

總之遇坑填坑吧…

特此感謝以下鏈結提供的幫助:

讀後有收穫可以支付寶請作者喝咖啡:

spark調優 shuffle調優

基於spark1.6 引數可以通過 new sparkcontext set 來設定,也可以通過命令的引數設定 conf spark.shuffle.file.buffer 預設值 32k 引數說明 該引數用於設定shuffle write task的bufferedoutputstream的buf...

Spark Spark調優 資源調優

spark在乙個executor的記憶體分為三塊,1.一塊是execution記憶體 2.一塊是storge 記憶體 3.一塊是其他記憶體 執行記憶體是執行記憶體,加入,聚合都是在這部分記憶體中執行.shuffle的資料也會先快取在這個記憶體中,滿了再寫入磁碟,能減少io,其實地圖過程也是在這個記憶...

spark調優 shuffle調優

每乙個shuffle的前半部分stage的task,每個task都會建立下乙個stage的task數量相同的檔案,比如下乙個stage會有100個task,那麼當前stage每個task都會建立100份檔案,會將同乙個key對應的values,一定是寫入同乙個檔案中的,也一定會將同乙個key對應的v...