目錄
libpcap" >libpcap
PF_RING" >PF_RING
DPDK" >DPDK
1 UIO mmap 實作零拷貝(zero copy)" >1 UIO mmap 實作零拷貝(zero copy)
2 UIO PMD 減少中斷和CPU上下文切換" >2 UIO PMD 減少中斷和CPU上下文切換
3 HugePages 減少TLB miss" >3 HugePages 減少TLB miss
4 其它優化" >4 其它優化
XDP" >XDP
首頁 運維 linux運維 Linux經典的幾款收包引擎

Linux經典的幾款收包引擎

Aug 04, 2023 pm 04:07 PM
linux

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

  • libpcap/libpcap-mmap
  • PF_RING
  • DPDK
  • xdp

libpcap

libpcap的套件擷取機制是在資料鏈結層增加一個旁路處理,不干擾系統本身的網路協定棧的處理,對發送和接收的資料包透過Linux核心做過濾和緩衝處理,最後直接傳遞給上層應用程式。

  1. 封包到達網卡設備。
  2. 網路卡設備依據配置進行DMA操作。 ( 「第1次拷貝」 :網路卡暫存器->核心為網路卡所指派的緩衝區ring buffer)
  3. #網卡發送中斷,喚醒處理器。
  4. 驅動軟體從ring buffer讀取,填滿核心skbuff結構( 「第2次拷貝」 # :核心網卡緩衝區ring buffer->核心專用資料結構skbuff)
  5. #接著呼叫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經典的幾款收包引擎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

centos和ubuntu的區別 centos和ubuntu的區別 Apr 14, 2025 pm 09:09 PM

CentOS 和 Ubuntu 的關鍵差異在於:起源(CentOS 源自 Red Hat,面向企業;Ubuntu 源自 Debian,面向個人)、包管理(CentOS 使用 yum,注重穩定;Ubuntu 使用 apt,更新頻率高)、支持週期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社區支持(CentOS 側重穩定,Ubuntu 提供廣泛教程和文檔)、用途(CentOS 偏向服務器,Ubuntu 適用於服務器和桌面),其他差異包括安裝精簡度(CentOS 精

centos如何安裝 centos如何安裝 Apr 14, 2025 pm 09:03 PM

CentOS 安裝步驟:下載 ISO 映像並刻錄可引導媒體;啟動並選擇安裝源;選擇語言和鍵盤佈局;配置網絡;分區硬盤;設置系統時鐘;創建 root 用戶;選擇軟件包;開始安裝;安裝完成後重啟並從硬盤啟動。

Centos停止維護2024 Centos停止維護2024 Apr 14, 2025 pm 08:39 PM

CentOS將於2024年停止維護,原因是其上游發行版RHEL 8已停止維護。該停更將影響CentOS 8系統,使其無法繼續接收更新。用戶應規劃遷移,建議選項包括CentOS Stream、AlmaLinux和Rocky Linux,以保持系統安全和穩定。

Centos停止維護後的選擇 Centos停止維護後的選擇 Apr 14, 2025 pm 08:51 PM

CentOS 已停止維護,替代選擇包括:1. Rocky Linux(兼容性最佳);2. AlmaLinux(與 CentOS 兼容);3. Ubuntu Server(需要配置);4. Red Hat Enterprise Linux(商業版,付費許可);5. Oracle Linux(與 CentOS 和 RHEL 兼容)。在遷移時,考慮因素有:兼容性、可用性、支持、成本和社區支持。

docker原理詳解 docker原理詳解 Apr 14, 2025 pm 11:57 PM

Docker利用Linux內核特性,提供高效、隔離的應用運行環境。其工作原理如下:1. 鏡像作為只讀模板,包含運行應用所需的一切;2. 聯合文件系統(UnionFS)層疊多個文件系統,只存儲差異部分,節省空間並加快速度;3. 守護進程管理鏡像和容器,客戶端用於交互;4. Namespaces和cgroups實現容器隔離和資源限制;5. 多種網絡模式支持容器互聯。理解這些核心概念,才能更好地利用Docker。

docker desktop怎麼用 docker desktop怎麼用 Apr 15, 2025 am 11:45 AM

如何使用 Docker Desktop? Docker Desktop 是一款工具,用於在本地機器上運行 Docker 容器。其使用步驟包括:1. 安裝 Docker Desktop;2. 啟動 Docker Desktop;3. 創建 Docker 鏡像(使用 Dockerfile);4. 構建 Docker 鏡像(使用 docker build);5. 運行 Docker 容器(使用 docker run)。

centos停止維護後怎麼辦 centos停止維護後怎麼辦 Apr 14, 2025 pm 08:48 PM

CentOS 停止維護後,用戶可以採取以下措施應對:選擇兼容髮行版:如 AlmaLinux、Rocky Linux、CentOS Stream。遷移到商業發行版:如 Red Hat Enterprise Linux、Oracle Linux。升級到 CentOS 9 Stream:滾動發行版,提供最新技術。選擇其他 Linux 發行版:如 Ubuntu、Debian。評估容器、虛擬機或云平台等其他選項。

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

See all articles