为什么内核态转发性能低?
生活随笔
收集整理的這篇文章主要介紹了
为什么内核态转发性能低?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
現在很多人都在詬病Linux內核協議棧收包效率低,不管他們是真的懂還是一點都不懂只是聽別人說的,反正就是在一味地懟Linux內核協議棧,他們的武器貌似只有DPDK。
但是,即便Linux內核協議棧收包效率真的很低,這是為什么?有沒有辦法去嘗試著優化?而不是動不動就DPDK。
我們從最開始說起。
Linux內核作為一個通用操作系統內核,脫胎于UNIX那一套現代操作系統理論。
但一開始不知道怎么回事將網絡協議棧的實現塞進了內核態,從此它就一直在內核態了。既然網絡協議棧的處理在內核態進行,那么網絡數據包必然是在內核態被處理的。無論如何,數據包要先進入內核態,這就涉及到了進入內核態的方式:
外部可以從兩個方向進入內核-從用戶態系統調用進入或者從硬件中斷進入。
也就是說,系統在任意時刻,必然處在兩個上下文中的一個:
進程上下文
中斷上下文 (在非中斷線程化的系統,也就是任意進程上下文)
收包邏輯的協議棧處理顯然是自網卡而上的,它顯然是在中斷上下文中,而數據包往用戶進程的數據接收處理,顯然是在應用程序的進程上下文中, 數據包通過socket在兩個上下文中被轉接。
在socket層的數據包轉接處,必然存在著一個隊列緩存,這是一個典型的 生產者-消費者 模型,中斷上下文的終點作為生產者將數據包入隊,而進程上下文作為消費者從隊列消費數據包
總結
以上是生活随笔為你收集整理的为什么内核态转发性能低?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈啰出行怎么删除历史订单(友哈巴赫是怎么
- 下一篇: androidos耗电快解决方法?