千兆以太網卡吞吐量和丟包率優化總結

現在有很多硬件平臺理論上支持千兆以太網接口,但實際傳輸速率遠遠低於千兆,並且丟包率很高。最近我做了一些以太網吞吐量和丟包率方面的優化工作,有一些心得和大家分享一下。

一、測試模型

 

二、影響吞吐量和丟包率的因素

1. 網卡DMA緩衝區大小

    這個緩衝區決定tx ring buffer和rx ring buffer的大小,如果ring buffer太小,那麼網卡緩存數據包的能力有限,當接收數據能力超過cpu處理能力時就會產生丟包現象。ring buffer越大,吞吐能力就越強,丟包的概率就越小。

 

2. CPU處理能力

    CPU處理速度越快,網卡接收到的數據包在網卡DMA緩衝區中的存留時間就越短,因此就可以騰出更多的空間來暫存新接收到的數據包。因此,CPU的處理能力直接決定了系統的吞吐量,運算速度越快,吞吐量越高。

 

3. 內存總容量

    當網卡DMA緩衝區太小時,ring buffer不夠用,會造成網絡數據丟包。此時,需要將數據包及時從ring buffer裏面取出來,暫存到接收隊列裏面(發送數據時同理)。然後在合適的時機再把數據包上傳給協議棧。這種處理方式會瞬時大量消耗系統內存,當吞吐量很大時,會引起內存剩餘容量抖動,甚至導致內存不足的異常出現。

 

三、調試注意事項

1. 當前ring buffer是否設置爲網卡最大ring buffer;

2. 高負載時注意CPU佔用率,重點關注軟中斷和網絡數據包處理線程的佔用率總和;

3. 關注low memory剩餘容量,長時間測試時,剩餘容量是否有下降趨勢;

4. 長時間測試後,查看log,系統是否有出現異常報警;

 

四、推薦優化方法

1. 提高CPU處理能力,例如提升CPU頻率或者運行模式;

2. 提高內存總容量,增加系統內存或者更換更大的內存;

3. 優化軟中斷收發包的處理方法,將軟中斷處理數據包的過程分爲兩步處理。例如把收包放到軟中斷裏面處理,把數據包上報協議棧放到內核線程處理,類似於上半部和下半部。這樣做可以減少中斷屏蔽時間,儘可能多的接收外部數據到網卡緩衝區,從而增加吞吐量。同時,用內核線程去上報數據包到協議棧可以避免丟包。

 

上面介紹了千兆網卡提升吞吐量和減小丟包率的方法,我實際測試有很大的改善,分享出來供大家參考。

當然,實際優化過程中可能會遇到更種問題,本文僅僅提供優化思路。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章