国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    11279

    瀏覽量

    225017
  • 網卡
    +關注

    關注

    4

    文章

    339

    瀏覽量

    28913
  • 交換機
    +關注

    關注

    23

    文章

    2904

    瀏覽量

    104472

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    U-Boot 引導加載程序中 TFTP 超時的奇怪解決方法

    服務器以降低數據包的發送速度。(這讓事情變得更糟) (2) 接下來,我們減少了服務器中的 TFTP 超時持續時間。(不行) (3) 但是當我們發送每個 TFTP 數據包兩次時,問題就會神秘消失! (4
    發表于 02-24 07:01

    CW32R030可以兼容BLE及XN297L數據包,請問這個XN297L數據包是什么?

    CW32R030可以兼容BLE及XN297L數據包,請問這個XN297L數據包是什么?
    發表于 01-20 06:37

    bk3633 usb 設備如何讀取主機向端點0 發送數據包

    bk3633 usb 設備如何讀取主機向端點0 發送數據包
    發表于 12-30 13:03

    內存與數據處理優化藝術

    事務數量,更好地利用CPU緩存。測試表明,在處理大量數據(如20MB)時,這種優化可能帶來數倍的性能提升。
    發表于 11-14 07:46

    SNN加速器內部神經元數據連接方式

    神經元之間的信息傳遞。 在脈沖神經網絡中,每個神經元都有其自身的地址,用于在AER協議中進行通信。如圖,時間從右往左依次增加,當某一個神經元產生一個脈沖時,這個脈沖信息將會被編碼成AER脈沖數據包,一般
    發表于 10-24 07:34

    串口DMA接收數據包丟失怎么解決?

    RTT串口DMA接收數據,超過緩沖區后為什么會吞掉一個數據包呢,不能每次處理完后清除緩沖區數據嗎,感覺接收的數據是累計的,累計滿之后會重新覆
    發表于 09-29 07:50

    有哪些具體的方法可以減少電能質量監測裝置的數據偏差?

    )針對性施策。具體方法如下: 一、優化硬件選型與設計,從源頭降低固有偏差 硬件是數據測量的基礎,其性能直接決定偏差上限,需重點關注以下幾點: 高精度核心元器件選型 傳感器:選用寬頻帶、低非線性的電壓 / 電流傳感器(如霍爾傳感器
    的頭像 發表于 08-21 09:33 ?659次閱讀
    有哪些具體的<b class='flag-5'>方法</b>可以<b class='flag-5'>減少</b>電能質量監測裝置的<b class='flag-5'>數據</b>偏差?

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

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

    超聲波清洗機如何在清洗過程中減少廢液和對環境的影響?

    將探討超聲波清洗機在環保方面的特點以及如何減少廢液排放。目錄1.超聲波清洗機的工作原理2.減少廢液生成3.廢液處理方法4.對環境的影響5.總結1.超聲波清洗機的工
    的頭像 發表于 06-16 17:01 ?668次閱讀
    超聲波清洗機如何在清洗過程中<b class='flag-5'>減少</b>廢液和對環境的影響?

    RDMA簡介7之可靠傳輸

    可靠傳輸技術旨在通過多種方法確保數據包在傳輸過程中不會丟失或損壞,同時保證數據包按發送順序到達接收端,其要求在鏈路發生丟或網絡發生擁塞等情況下能夠完全保證
    發表于 06-13 10:01

    藍牙數據通道空口數據包

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

    FX3 GPIF CyU3PGpifWriteDataWords的傳輸時間延遲的原因?

    之間存在明顯的延遲(7~9us)。 我有幾個問題: 1.如何才能減少數據包之間的時間? 我希望它們能夠持續下去。 2.CyU3PGpifWriteDataWords 是否僅適用于寄存器使用? 有沒有我
    發表于 05-15 06:18

    如何減少步進電機的發熱?

    步進電機的發熱問題是一個需要關注的重要方面,發熱不僅影響電機的效率,還可能對電機的壽命和性能產生負面影響。為了減少步進電機的發熱,可以從以下幾個方面著手。 1. 選擇合適的電機: ● 在選型時,盡量
    的頭像 發表于 05-11 17:51 ?1024次閱讀

    如何減少電磁干擾對智能電位采集儀的影響

    減少外界電磁干擾對智能電位采集儀的影響,可從屏蔽技術、濾波措施、接地處理等方面著手,具體方法如下: 屏蔽技術 使用屏蔽線:連接智能電位采集儀與參比電極、被測量物體的導線應選用屏蔽線。屏蔽線的外層金屬
    的頭像 發表于 05-10 11:31 ?654次閱讀
    如何<b class='flag-5'>減少</b>電磁干擾對智能電位采集儀的影響

    為UART、MCXA142實現ISP通信的主機端,發送Ping數據包并收到預期的響應,發送和接收數據包的典型順序是什么?

    我想為 UART、MCXA142 實現 ISP 通信的主機端。我發送 Ping 數據包并收到預期的響應。發送和接收數據包的典型順序是什么? 此刻,我的照片是這樣的: 1. 發送 Ping 2. 接收 Ping 響應 3. 在成幀
    發表于 04-03 08:05