亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

減少包頭處理開(kāi)銷最直接的方法:減少數(shù)據(jù)包數(shù)量

Linux閱碼場(chǎng) ? 來(lái)源:Linuxer ? 2020-08-03 16:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

目前,有大量的網(wǎng)絡(luò)應(yīng)用在處理數(shù)據(jù)包的時(shí)候只需要處理數(shù)據(jù)包頭,而不會(huì)操作數(shù)據(jù)負(fù)載部分,例如防火墻、TCP/IP協(xié)議棧和軟件交換機(jī)。對(duì)這類網(wǎng)絡(luò)應(yīng)用而言, 包頭處理產(chǎn)生的開(kāi)銷(稱為“per-packet overhead”)占了整體開(kāi)銷的大部分。因此,如何減少包頭處理開(kāi)銷是優(yōu)化這類應(yīng)用性能的關(guān)鍵。

減少包頭處理開(kāi)銷最直接的方法:減少數(shù)據(jù)包數(shù)量

如何減少包數(shù)量?

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

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

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

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

為了幫助基于DPDK的應(yīng)用程序(如Open vSwitch)減少包頭處理開(kāi)銷,DPDK分別于17.08和17.11支持了GRO和GSO。如圖2所示, GRO和GSO是DPDK中的兩個(gè)用戶庫(kù),應(yīng)用程序直接調(diào)用它們進(jìn)行包合并和分片。

圖2. DPDK GRO和DPDK GSO

1

GRO庫(kù)和GSO庫(kù)結(jié)構(gòu)

圖3描繪了GRO庫(kù)和GSO庫(kù)的結(jié)構(gòu)。根據(jù)數(shù)據(jù)包類型,GRO庫(kù)定義了不同的GRO類型。每一種GRO類型負(fù)責(zé)合并一種類型的數(shù)據(jù)包,如TCP/IPv4 GRO處理TCP/IPv4數(shù)據(jù)包。同樣的,GSO庫(kù)也定義了不同的GSO類型。GRO庫(kù)和GSO庫(kù)分別根據(jù)MBUF的packet_type域和ol_flags域?qū)⑤斎氲臄?shù)據(jù)包交給對(duì)應(yīng)的GRO和GSO類型處理。

圖3. GRO庫(kù)和GSO庫(kù)的框架

2

如何使用GRO庫(kù)和GSO庫(kù)?

使用GRO和GSO庫(kù)十分簡(jiǎn)單。如圖4所示,只需要調(diào)用一個(gè)函數(shù)便可以對(duì)包進(jìn)行合并和分片。

圖4. 代碼示例

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

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

3

DPDK GRO的合包算法

算法挑戰(zhàn)

在高速的網(wǎng)絡(luò)環(huán)境下,高開(kāi)銷的合包算法很可能會(huì)導(dǎo)致網(wǎng)卡丟包。

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

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

足夠輕量以適應(yīng)高速的網(wǎng)絡(luò)環(huán)境

能夠合并亂序包

基于Key的合包算法

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

基于Key的合包算法有兩個(gè)特點(diǎn)。首先,通過(guò)流分類來(lái)加速數(shù)據(jù)包的合并是十分輕量的一種做法;其次,保存無(wú)法合并的數(shù)據(jù)包(如亂序包)使得之后對(duì)其進(jìn)行合并成為可能,故減輕了包亂序?qū)习鼛?lái)的影響。

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

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

4

DPDK GSO的分片策略

分片流程

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

圖7. GSO分片流程

GSO Segment的結(jié)構(gòu)

生成一個(gè)GSO Segment的最簡(jiǎn)單方法就是拷貝包頭和數(shù)據(jù)負(fù)載部分。但頻繁的數(shù)據(jù)拷貝會(huì)降低GSO性能,因此,DPDK GSO采用了一種基于零拷貝的數(shù)據(jù)結(jié)構(gòu)——Two-part MBUF——來(lái)組織GSO Segment。如圖8所示,一個(gè)Two-part MBUF由一個(gè)Direct MBUF和多個(gè)Indirect MBUF組成。Direct MBUF用來(lái)存儲(chǔ)包頭,Indirect MBUF則類似于指針,指向數(shù)據(jù)負(fù)載部分。利用Two-part MBUF,生成一個(gè)GSO Segment僅需拷貝長(zhǎng)度較短的包頭,而不需要拷貝較長(zhǎng)的數(shù)據(jù)負(fù)載部分。

圖8. Two-part MBUF的結(jié)構(gòu)

GRO庫(kù)和GSO庫(kù)的狀態(tài)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11201

    瀏覽量

    222175
  • 網(wǎng)卡
    +關(guān)注

    關(guān)注

    4

    文章

    333

    瀏覽量

    28654
  • 交換機(jī)
    +關(guān)注

    關(guān)注

    23

    文章

    2858

    瀏覽量

    103658

原文標(biāo)題:怎么提高網(wǎng)絡(luò)應(yīng)用性能?讓DPDK GRO和GSO來(lái)幫你!

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SNN加速器內(nèi)部神經(jīng)元數(shù)據(jù)連接方式

    神經(jīng)元之間的信息傳遞。 在脈沖神經(jīng)網(wǎng)絡(luò)中,每個(gè)神經(jīng)元都有其自身的地址,用于在AER協(xié)議中進(jìn)行通信。如圖,時(shí)間從右往左依次增加,當(dāng)某一個(gè)神經(jīng)元產(chǎn)生一個(gè)脈沖時(shí),這個(gè)脈沖信息將會(huì)被編碼成AER脈沖數(shù)據(jù)包,一般
    發(fā)表于 10-24 07:34

    串口DMA接收數(shù)據(jù)包丟失怎么解決?

    RTT串口DMA接收數(shù)據(jù),超過(guò)緩沖區(qū)后為什么會(huì)吞掉一個(gè)數(shù)據(jù)包呢,不能每次處理完后清除緩沖區(qū)數(shù)據(jù)嗎,感覺(jué)接收的數(shù)據(jù)是累計(jì)的,累計(jì)滿之后會(huì)重新覆
    發(fā)表于 09-29 07:50

    有哪些具體的方法可以減少電能質(zhì)量監(jiān)測(cè)裝置的數(shù)據(jù)偏差?

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

    請(qǐng)問(wèn)DCTCP與DCUDP 的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務(wù)器端是如何交互的?

    DCTCP與DCUDP 的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務(wù)器端是如何交互的?
    發(fā)表于 08-06 06:29

    RDMA簡(jiǎn)介7之可靠傳輸

    可靠傳輸技術(shù)旨在通過(guò)多種方法確保數(shù)據(jù)包在傳輸過(guò)程中不會(huì)丟失或損壞,同時(shí)保證數(shù)據(jù)包按發(fā)送順序到達(dá)接收端,其要求在鏈路發(fā)生丟或網(wǎng)絡(luò)發(fā)生擁塞等情況下能夠完全保證
    發(fā)表于 06-13 10:01

    藍(lán)牙數(shù)據(jù)通道空口數(shù)據(jù)包

    channel packet的一種。在不引起上下文歧義的時(shí)候,我們把他們統(tǒng)一稱作“數(shù)據(jù)包”。 ? 編輯 LL Control PDU是在Link layer層直接進(jìn)行交互的,也就是說(shuō)他們不會(huì)
    發(fā)表于 06-03 10:51

    FX3 GPIF CyU3PGpifWriteDataWords的傳輸時(shí)間延遲的原因?

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

    為UART、MCXA142實(shí)現(xiàn)ISP通信的主機(jī)端,發(fā)送Ping數(shù)據(jù)包并收到預(yù)期的響應(yīng),發(fā)送和接收數(shù)據(jù)包的典型順序是什么?

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

    I2C總線數(shù)據(jù)包結(jié)構(gòu)詳解

    。以下是I2C總線數(shù)據(jù)包結(jié)構(gòu)的詳解: 一、I2C總線數(shù)據(jù)包的基本組成 I2C總線上的數(shù)據(jù)傳輸以數(shù)據(jù)包為單位進(jìn)行,每個(gè)數(shù)據(jù)包包含起始信號(hào)、設(shè)備
    的頭像 發(fā)表于 01-17 15:46 ?1287次閱讀

    使用tlk2711發(fā)現(xiàn)每次接受的數(shù)據(jù)包頭對(duì),但內(nèi)容錯(cuò)誤,為什么?

    我在使用tlk2711的時(shí)候。發(fā)現(xiàn)每次接受的數(shù)據(jù)包頭對(duì),但內(nèi)容錯(cuò)誤,后來(lái)發(fā)現(xiàn)PCB板上芯片底部中心的焊盤(pán)是懸空的,沒(méi)有接地,請(qǐng)問(wèn)這會(huì)影響工作嗎?
    發(fā)表于 01-10 07:43

    CAN通信節(jié)點(diǎn)多時(shí),如何減少寄生電容和保障節(jié)點(diǎn)數(shù)量?

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

    mtu配置步驟詳解 mtu與數(shù)據(jù)包丟失的關(guān)系

    最大的、無(wú)需拆即可通過(guò)的數(shù)據(jù)包長(zhǎng)度。這個(gè)長(zhǎng)度加上數(shù)據(jù)包頭(通常為28字節(jié))即為MTU值。 訪問(wèn)設(shè)備配置
    的頭像 發(fā)表于 12-16 14:33 ?3632次閱讀

    利用P4與Vivado工具簡(jiǎn)化數(shù)據(jù)包處理設(shè)計(jì)

    為設(shè)備就緒的 RTL 代碼,以實(shí)現(xiàn)最佳的硬件實(shí)現(xiàn)。使用 VNP4,您可以顯著減少開(kāi)發(fā)基于設(shè)備的數(shù)據(jù)包處理系統(tǒng)所需的工程工作量,同時(shí)仍能實(shí)現(xiàn)每 LUT 或每 RAM 的高性能。本白皮書(shū)概述了
    的頭像 發(fā)表于 12-04 09:55 ?983次閱讀
    利用P4與Vivado工具簡(jiǎn)化<b class='flag-5'>數(shù)據(jù)包</b><b class='flag-5'>處理</b>設(shè)計(jì)

    設(shè)計(jì)帶ADC電路時(shí),如何用模擬地與數(shù)字地進(jìn)行分割來(lái)減少數(shù)字地對(duì)模擬地的影響?

    我在設(shè)計(jì)帶ADC 電路時(shí),希望用模擬地與數(shù)字地進(jìn)行分割來(lái)減少數(shù)字地對(duì)模擬地的影響。但是,查詢一些資料得知推薦在ADC 的附近將數(shù)字地與模擬地進(jìn)行單點(diǎn)連接。 但是,數(shù)字地與模擬地難道不是應(yīng)該在總電源
    發(fā)表于 12-03 07:56

    EMI電磁干擾如何減少

    減少EMI(電磁干擾)是電子電路和系統(tǒng)設(shè)計(jì)中非常重要的一項(xiàng)任務(wù),以下是一些減少EMI的有效方法: 一、屏蔽 屏蔽是用來(lái)減少電磁場(chǎng)向外或向內(nèi)穿透的措施,可以分為靜電屏蔽、電磁屏蔽和磁屏蔽
    的頭像 發(fā)表于 11-20 14:40 ?2582次閱讀