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