網路的核心是報文的轉發過程,linux網路是通過內核協議棧進行轉發的,報文控制平面和數據轉發平面沒有分離,不適合處理大規模網絡數據包,因爲linux分爲內核區和用戶區,報文先進入內核區然後拷貝到用戶區,供給上層應用程序處理。並且爲了全面的支持用戶空間的各個功能,協議棧中嵌入了大量用於對接的接口。如果能讓應用程序直接接管網絡數據包處理、內存管理以及CPU調度,那麼性能可以得到一個質的提升。
如今的處理器都是多核,而且內存也越來越大,可以提高多核和大內存的擴展性,減少CPU多核之間任務的切換,內存cache miss,因爲內存的訪問速度永遠也趕不上cache和cpu的頻率,爲了能讓性能平行擴展,最好是少訪問。
要提高網路報文轉發,從如下幾個方面着手:
1.控制層留給Linux做,其它數據層全部由應用程序來處理。
2.減少系統調度、系統調用、系統中斷,上下文切換等
3.摒棄Linux內核協議棧,將數據包傳輸到用戶空間定製協議棧
4.使用多核編程技術替代多線程,將OS綁在指定核上運行
5.針對SMP系統,使CPU儘量使用所在NUMA系統節點的內存,減少內存刷寫
6.使用大頁面,減少訪問
7.採用無鎖技術解競爭