在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

減少包頭處理開銷最直接的方法:減少數據包數量

Linux閱碼場 ? 來源:Linuxer ? 2020-08-03 16:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

目前,有大量的網絡應用在處理數據包的時候只需要處理數據包頭,而不會操作數據負載部分,例如防火墻、TCP/IP協議棧和軟件交換機。對這類網絡應用而言, 包頭處理產生的開銷(稱為“per-packet overhead”)占了整體開銷的大部分。因此,如何減少包頭處理開銷是優化這類應用性能的關鍵。

減少包頭處理開銷最直接的方法:減少數據包數量

如何減少包數量?

增大Maximum Transmission Unit (MTU)。在數據量一定的情況下,使用大MTU的數據包可攜帶更多數據,從而減少了包的總量。但MTU值依賴于物理鏈路,我們無法保證數據包經過的所有鏈路均使用大MTU。

利用網卡特性:Large Receive Offload (LRO),UDP Fragmentation Offload (UFO)和TCP Segmentation Offload (TSO)。如圖1所示,LRO將從物理鏈路收到的TCP包(如1500B)合并為長度更長的TCP包(如64KB);UFO和TSO將上層應用發送的長數據負載的UDP和TCP包(如64KB)拆分成長度更短的數據包(如1500B),以滿足物理鏈路的MTU限制。通過在網卡上進行包合并和拆分,在不需要任何CPU開銷的情況下,上層應用就可以處理數量大大減少的大包。然而,LRO、TSO和UFO通常只能處理TCP和UDP包,而且并非所有的網卡都支持這些特性。

軟件包合并 (Generic Receive Offload,GRO)和包拆分 (Generic Segmentation Offload,GSO)。與前兩種方法相比,GRO和GSO有兩個優點:第一,不依賴于物理鏈路和網卡;第二,能夠支持更多的協議類型,如VxLAN和GRE。

圖1. LRO、UFO和TSO工作原理

為了幫助基于DPDK的應用程序(如Open vSwitch)減少包頭處理開銷,DPDK分別于17.08和17.11支持了GRO和GSO。如圖2所示, GRO和GSO是DPDK中的兩個用戶庫,應用程序直接調用它們進行包合并和分片。

圖2. DPDK GRO和DPDK GSO

1

GRO庫和GSO庫結構

圖3描繪了GRO庫和GSO庫的結構。根據數據包類型,GRO庫定義了不同的GRO類型。每一種GRO類型負責合并一種類型的數據包,如TCP/IPv4 GRO處理TCP/IPv4數據包。同樣的,GSO庫也定義了不同的GSO類型。GRO庫和GSO庫分別根據MBUF的packet_type域和ol_flags域將輸入的數據包交給對應的GRO和GSO類型處理。

圖3. GRO庫和GSO庫的框架

2

如何使用GRO庫和GSO庫?

使用GRO和GSO庫十分簡單。如圖4所示,只需要調用一個函數便可以對包進行合并和分片。

圖4. 代碼示例

為了支持不同的用戶場景,GRO庫提供了兩組API:輕量模式API和重量模式API,如圖5所示。輕量模式API應用于需要快速合并少量數據包的場景,而重量模式API則用于需要細粒度地控制合包并需要合并大量數據包的場景。

圖5. 輕量模式API和重量模式API

3

DPDK GRO的合包算法

算法挑戰

在高速的網絡環境下,高開銷的合包算法很可能會導致網卡丟包。

包亂序(“Packet Reordering”)增加了合包難度。例如Linux GRO無法合并亂序的數據包。

這就要求DPDK GRO的合包算法:

足夠輕量以適應高速的網絡環境

能夠合并亂序包

基于Key的合包算法

為解決上述兩點挑戰,DPDK GRO采用基于Key的合包算法,其流程如圖6所示。對新到的數據包,首先按照流(“flow”)對其進行分類,再在其所在的流中尋找相鄰的數據包(“neighbor”)進行合并。若無法找到匹配的流,就插入一條新流并將數據包存儲到新流中。若無法找到鄰居,則將數據包存儲到對應的流中。

基于Key的合包算法有兩個特點。首先,通過流分類來加速數據包的合并是十分輕量的一種做法;其次,保存無法合并的數據包(如亂序包)使得之后對其進行合并成為可能,故減輕了包亂序對合包帶來的影響。

圖6. 基于Key的合包算法流程

例如,TCP/IPv4 GRO使用源和目的Ethernet地址、IP地址、TCP端口號以及TCP Acknowledge Number定義流,使用TCP Sequence Number和IP ID決定TCP/IPv4包是否為鄰居。若兩個TCP/IPv4的數據包能夠合并,則它們必須屬于同一個流,并且TCP序號和IP ID必須連續。

4

DPDK GSO的分片策略

分片流程

如圖7所示,將一個數據包分片有3個步驟。首先,將包的數據負載分成許多長度更小的部分;其次,為每一個數據負載部分添加包頭(新形成的數據包稱為GSO Segment);最后,為每個GSO segment更新包頭(如TCP Sequence Number)。

圖7. GSO分片流程

GSO Segment的結構

生成一個GSO Segment的最簡單方法就是拷貝包頭和數據負載部分。但頻繁的數據拷貝會降低GSO性能,因此,DPDK GSO采用了一種基于零拷貝的數據結構——Two-part MBUF——來組織GSO Segment。如圖8所示,一個Two-part MBUF由一個Direct MBUF和多個Indirect MBUF組成。Direct MBUF用來存儲包頭,Indirect MBUF則類似于指針,指向數據負載部分。利用Two-part MBUF,生成一個GSO Segment僅需拷貝長度較短的包頭,而不需要拷貝較長的數據負載部分。

圖8. Two-part MBUF的結構

GRO庫和GSO庫的狀態

目前,GRO庫還處于一個初期階段,僅對使用最廣泛的TCP/IPv4數據包提供了合包支持。GSO庫則支持更豐富的包類型,包括TCP/IPv4、VxLAN和GRE。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11062

    瀏覽量

    216451
  • 網卡
    +關注

    關注

    4

    文章

    325

    瀏覽量

    27949
  • 交換機
    +關注

    關注

    22

    文章

    2731

    瀏覽量

    101632

原文標題:怎么提高網絡應用性能?讓DPDK GRO和GSO來幫你!

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    藍牙數據通道空口數據包

    channel packet的一種。在不引起上下文歧義的時候,我們把他們統一稱作“數據包”。 ? 編輯 LL Control PDU是在Link layer層直接進行交互的,也就是說他們不會
    發表于 06-03 10:51

    I2C總線數據包結構詳解

    。以下是I2C總線數據包結構的詳解: 一、I2C總線數據包的基本組成 I2C總線上的數據傳輸以數據包為單位進行,每個數據包包含起始信號、設備
    的頭像 發表于 01-17 15:46 ?751次閱讀

    使用tlk2711發現每次接受的數據包頭對,但內容錯誤,為什么?

    我在使用tlk2711的時候。發現每次接受的數據包頭對,但內容錯誤,后來發現PCB板上芯片底部中心的焊盤是懸空的,沒有接地,請問這會影響工作嗎?
    發表于 01-10 07:43

    CAN通信節點多時,如何減少寄生電容和保障節點數量

    導讀在汽車電子與工業控制等領域,CAN通信至關重要。本文圍繞CAN通信,闡述節點增多時如何減少寄生電容的策略,同時從發送、接收節點等方面,講解保障節點數量及通信可靠性的方法。如何減少
    的頭像 發表于 01-03 11:41 ?2958次閱讀
    CAN通信節點多時,如何<b class='flag-5'>減少</b>寄生電容和保障節點<b class='flag-5'>數量</b>?

    mtu配置步驟詳解 mtu與數據包丟失的關系

    最大的、無需拆即可通過的數據包長度。這個長度加上數據包頭(通常為28字節)即為MTU值。 訪問設備配置
    的頭像 發表于 12-16 14:33 ?2471次閱讀

    利用P4與Vivado工具簡化數據包處理設計

    為設備就緒的 RTL 代碼,以實現最佳的硬件實現。使用 VNP4,您可以顯著減少開發基于設備的數據包處理系統所需的工程工作量,同時仍能實現每 LUT 或每 RAM 的高性能。本白皮書概述了
    的頭像 發表于 12-04 09:55 ?644次閱讀
    利用P4與Vivado工具簡化<b class='flag-5'>數據包</b><b class='flag-5'>處理</b>設計

    設計帶ADC電路時,如何用模擬地與數字地進行分割來減少數字地對模擬地的影響?

    我在設計帶ADC 電路時,希望用模擬地與數字地進行分割來減少數字地對模擬地的影響。但是,查詢一些資料得知推薦在ADC 的附近將數字地與模擬地進行單點連接。 但是,數字地與模擬地難道不是應該在總電源
    發表于 12-03 07:56

    華納云:服務器平均響應時間和數據包大小之間的影響

    的時間在網絡上傳輸,因此會增加整體的響應時間。 解決方法: 對數據進行壓縮(如使用 Gzip 或 Brotli),減少傳輸的數據量。 2.網絡帶寬 影響: 帶寬決定了單位時間內可以傳輸
    的頭像 發表于 10-10 14:01 ?580次閱讀

    請問DCTCP與DCUDP 的登錄數據包和心跳數據包與服務器端是如何交互的?

    DCTCP與DCUDP的登錄數據包和心跳數據包與服務器端是如何交互的?
    發表于 07-25 06:37

    能否在ESP結束之前通過串行端口停止傳入的UDP數據包的傳輸以解析下一個UDP數據包?

    丟棄在ESP完成之前不需要的數據包,以便通過串行端口發送它以接收下一個數據包, 如果沒有,我必須按順序讀取所有傳入的數據包,需要的和不需要的, 而且波特率不足,主機處理
    發表于 07-16 06:18

    將UDP數據包發送到廣播IP地址時遇到的疑問求解

    保持不變,包括傳輸的數據。 此外,當 wroom 充當客戶端時,我們可以通過遠程主機(WIFI 路由器)廣播 UDP 數據包,方法是使用主機 IP 在 wroom 上創建到主機的 UDP 連接,并將
    發表于 07-16 06:07

    如何直接從phy mac層發送和接收802.11數據包?

    我閱讀了完整的文檔(espressif_iot_esp8266ex_development_kit_v0.9.4.zip),但我沒有找到答案: 是否可以訪問 802.11 數據包,并通過應用程序處理它們? 我希望能夠直接從 p
    發表于 07-15 08:03

    請問如何使用AT CIPSEND或AT CIPSENDBUF發送多個數據包?

    我可以使用 AT CIPSEND 發送單個數據包。但是我必須發送一系列二進制數據包。如何使用AT CISEND或AT CIPSENDBUF發送多個數據包,什么是正確的算法? 到目前為止,我嘗試
    發表于 07-15 07:37

    NONOS如何檢查是否實際發送了UDP數據包?

    我發現進入深度睡眠通常無法傳輸發送的最后一個 UDP 數據包。我現在將睡眠延遲 30 毫秒,這是一個黑客。 我寧愿有一種方法來檢查是否可以休眠,或者以其他方式能夠注冊指示數據包已發送的回調(無線電發送緩沖區為空)。 說清楚:
    發表于 07-12 06:14

    如何減少構建中的組件數量?

    large to enter in my module. 由于我的應用程序不需要某些組件,因此我想知道如何減少我的項目中鏈接的組件數量。
    發表于 07-09 07:46
    主站蜘蛛池模板: 免费观看黄a一级视频日本 免费观看黄色网页 | 国产黄色在线网站 | 最新版天堂资源8网 | 美国激情ap毛片 | 男人的天堂222eee | 色偷偷av男人的天堂 | 一女被多男玩很肉很黄文 | 欧美成人天天综合天天在线 | 人人看人人看人做人人模 | 精品影视网站入口 | 狼人 成人 综合 亚洲 | 九月丁香婷婷亚洲综合色 | 亚洲日韩色综合视频 | 午夜.dj高清在线观看免费8 | 色视频在线观看网站 | 2019天天射干 | 你懂的在线视频网站 | 成人亚洲电影 | 美女扒开内裤无遮挡禁18 | 五月天免费在线播放 | 天天干在线免费视频 | 一级片在线播放 | 特级全黄一级毛片免费 | 欧美人与zoxxxx视频 | 亚洲免费成人网 | 诱人的老师bd高清日本在线观看 | 一级黄色毛毛片 | 1024手机看片国产 | 欧美亚洲视频一区 | 伊人久久综合网亚洲 | 午夜片 飘香香影院 | videos另类重口tv | 天天操天天射天天舔 | aa黄色片| 夜夜春宵翁熄性放纵古代 | 免费人成a大片在线观看动漫 | 免费特黄一区二区三区视频一 | 免费大秀视频在线播放 | 黄色免费毛片 | 欧美xxxxxbbbb| 久操视频免费观看 |