日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文列舉四個比較經典的 Linux 收包引擎,如果還有其他你覺得ok的可以留言。這四個分別是:

    libpcap/libpcap-mmap
    PF_RING
    DPDK
    xdp

    libpcap

    libpcap的包捕獲機制是在數據鏈路層增加一個旁路處理,不干擾系統自身的網路協議棧的處理,對發送和接收的數據包通過Linux內核做過濾和緩沖處理,最后直接傳遞給上層應用程序。

      數據包到達網卡設備。
      網卡設備依據配置進行DMA操作。(?「第1次拷貝」?:網卡寄存器->內核為網卡分配的緩沖區ring buffer)
      網卡發送中斷,喚醒處理器。
      驅動軟件從ring buffer中讀取,填充內核skbuff結構(?「第2次拷貝」?:內核網卡緩沖區ring buffer->內核專用數據結構skbuff)
      接著調用netif_receive_skb函數:
      5.1 如果有抓包程序,由網絡分接口進入BPF過濾器,將規則匹配的報文拷貝到系統內核緩存 (?「第3次拷貝」?)。BPF為每一個要求服務的抓包程序關聯一個filter和兩個buffer。BPF分配buffer 且通常情況下它的額度是4KB the store buffer 被使用來接收來自適配器的數據;the hold buffer被使用來拷貝包到應用程序。
      5.2 處理數據鏈路層的橋接功能;
      5.3 根據skb->protocol字段確定上層協議并提交給網絡層處理,進入網絡協議棧,進行高層處理。
      libpcap繞過了Linux內核收包流程中協議棧部分的處理,使得用戶空間API可以直接調用套接字PF_PACKET從鏈路層驅動程序中獲得數據報文的拷貝,將其從內核緩沖區拷貝至用戶空間緩沖區(?「第4次拷貝」?

      libpcap-mmap

      libpcap-mmap是對舊的libpcap實現的改進,新版本的libpcap基本都采用packet_mmap機制。PACKET_MMAP通過mmap,減少一次內存拷貝(?「第4次拷貝沒有了」?),減少了頻繁的系統調用,大大提高了報文捕獲的效率。

      PF_RING

      我們看到之前libpcap有4次內存拷貝。libpcap_mmap有3次內存拷貝。PF_RING提出的核心解決方案便是減少報文在傳輸過程中的拷貝次數。

      我們可以看到,相對與libpcap_mmap來說,pfring允許用戶空間內存直接和rx_buffer做mmap。這又減少了一次拷貝 (?「libpcap_mmap的第2次拷貝」:rx_buffer->skb)

      PF-RING ZC實現了DNA(Direct NIC Access 直接網卡訪問)技術,將用戶內存空間映射到驅動的內存空間,使用戶的應用可以直接訪問網卡的寄存器和數據。

      通過這樣的方式,避免了在內核對數據包緩存,減少了一次拷貝(?「libpcap的第1次拷貝」?,DMA到內核緩沖區的拷貝)。這就是完全的零拷貝。

      其缺點是,只有一個 應用可以在某個時間打開DMA ring(請注意,現在的網卡可以具有多個RX / TX隊列,從而就可以在每個隊列上同時一個應用程序),換而言之,用戶態的多個應用需要彼此溝通才能分發數據包。

      DPDK

      pf-ring zc和dpdk均可以實現數據包的零拷貝,兩者均旁路了內核,但是實現原理略有不同。pf-ring zc通過zc驅動(也在應用層)接管數據包,dpdk基于UIO實現。

      1 UIO+mmap 實現零拷貝(zero copy)

      UIO(Userspace I/O)是運行在用戶空間的I/O技術。Linux系統中一般的驅動設備都是運行在內核空間,而在用戶空間用應用程序調用即可,而UIO則是將驅動的很少一部分運行在內核空間,而在用戶空間實現驅動的絕大多數功能。采用Linux提供UIO機制,可以旁路Kernel,將所有報文處理的工作在用戶空間完成。

      2 UIO+PMD 減少中斷和CPU上下文切換

      DPDK的UIO驅動屏蔽了硬件發出中斷,然后在用戶態采用主動輪詢的方式,這種模式被稱為PMD(Poll Mode Driver)。

      與DPDK相比,pf-ring(no zc)使用的是NAPI polling和應用層polling,而pf-ring zc與DPDK類似,僅使用應用層polling。

      3 HugePages 減少TLB miss

      在操作系統引入MMU(Memory Management Unit)后,CPU讀取內存的數據需要兩次訪問內存。第一次要查詢頁表將邏輯地址轉換為物理地址,然后訪問該物理地址讀取數據或指令。

      為了減少頁數過多,頁表過大而導致的查詢時間過長的問題,便引入了TLB(Translation Lookaside Buffer),可翻譯為地址轉換緩沖器。TLB是一個內存管理單元,一般存儲在寄存器中,里面存儲了當前最可能被訪問到的一小部分頁表項。

      引入TLB后,CPU會首先去TLB中尋址,由于TLB存放在寄存器中,且其只包含一小部分頁表項,因此查詢速度非常快。若TLB中尋址成功(TLB hit),則無需再去RAM中查詢頁表;若TLB中尋址失敗(TLB miss),則需要去RAM中查詢頁表,查詢到后,會將該頁更新至TLB中。

      而DPDK采用HugePages ,在x86-64下支持2MB、1GB的頁大小,大大降低了總頁個數和頁表的大小,從而大大降低TLB miss的幾率,提升CPU尋址性能。

      4 其它優化

        SNA(Shared-nothing Architecture),軟件架構去中心化,盡量避免全局共享,帶來全局競爭,失去橫向擴展的能力。NUMA體系下不跨Node遠程使用內存。
        SIMD(Single Instruction Multiple Data),從最早的mmx/sse到最新的avx2,SIMD的能力一直在增強。DPDK采用批量同時處理多個包,再用向量編程,一個周期內對所有包進行處理。比如,memcpy就使用SIMD來提高速度。
        cpu affinity:即 CPU 親和性

        XDP

        xdp代表eXpress數據路徑,使用ebpf 做包過濾,相對于dpdk將數據包直接送到用戶態,用用戶態當做快速數據處理平面,xdp是在驅動層創建了一個數據快速平面。在數據被網卡硬件dma到內存,分配skb之前,對數據包進行處理。

        請注意,XDP并沒有對數據包做Kernel bypass,它只是提前做了一點預檢而已。

        相對于DPDK,XDP具有以下優點:

          無需第三方代碼庫和許可
          同時支持輪詢式和中斷式網絡
          無需分配大頁
          無需專用的CPU
          無需定義新的安全網絡模型

          XDP的使用場景包括:

            DDoS防御
            防火墻
            基于XDP_TX的負載均衡
            網絡統計
            復雜網絡采樣
            高速交易平臺

            OK,以上就是今天的分享,如果你覺得還有其他的收包引擎,可以留言分享。

            以上就是Linux經典的幾款收包引擎的詳細內容,更多請關注www.92cms.cn其它相關文章!

分享到:
標簽:Linux 幾款 引擎 經典
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定