DPDK 的基本原理、學習路線總結

DPDK 是什麼

Intel® DPDK 全稱 Intel Data Plane Development Kit,是 intel 提供的數據平面開發工具集,爲 Intel architecture(IA)處理器架構下用戶空間高效的數據包處理提供庫函數和驅動的支持,它不同於 Linux 系統以通用性設計爲目的,而是專注於網絡應用中數據包的高性能處理。具體體現在 DPDK 應用程序是運行在用戶空間上利用自身提供的數據平面庫來收發數據包,繞過了 Linux 內核協議棧對數據包處理過程。

DPDK 技術介紹

一、主要特點
1、UIO(Linux Userspace I/O)
提供應用空間下驅動程序的支持,也就是說網卡驅動是運行在用戶空間的,減下了報文在用戶空間和應用空間的多次拷貝。如圖:DPDK 繞過了 Linux 內核的網絡驅動模塊,直接從網絡硬件到達用戶空間,不需要進行頻繁的內存拷貝和系統調用。根據官方給出的數據,DPDK 裸包反彈每個包需要 80 個時鐘週期,而傳統 Linux 內核協議棧每包需要 2k~4k 個時鐘週期。DPDK 能顯著提升虛擬化網絡設備的數據採集效率。

下圖爲 UIO 技術的工作原理圖

UIO 技術將設備驅動分爲用戶空間驅動和內核空間驅動兩部分,內核空間驅動主要負責設備資源分配、UIO 設備註冊以及小部分中斷響應函數,驅動的大部分工作在用戶空間的驅動程序下完成。通過 UIO 框架提供的 API 接口將 UIO 的驅動註冊到內核,註冊完成後將生成存有設備物理地址等信息的 map 文件,用戶態進程訪問該文件將設備對應的內存空間地址映射到用戶空間,即可直接操作設備的內存空間,UIO 技術使得應用程序可以通過用戶空間驅動直接操作設備的內存空間,避免了數據在內核緩衝區和應用程序緩衝區的多次拷貝,提供數據處理效率。

linux 內核處理包:

dpdk 處理包:

下圖爲 slow 路徑和 fast 路徑比較:

用戶空間輪詢模式(PMD)

傳統中斷模式: 傳統 Linux 系統中,當網絡設備檢測到數據幀過來的時候,會使用 DMA(直接內存訪問)將幀發送到預先分配好的內核緩衝區裏面,然後更新相應的接收描述符環,之後產生中斷通知有數據幀過來。Linux 系統會進行相應的響應,然後更新相應的描述符環,再將接收到的數據幀交給內核中的網絡堆棧進行處理,網絡堆棧處理完之後會將相應的數據拷貝到相應的套接字,從而數據就被複制到了用戶空間,應用程序就可以使用這些數據了,數據幀的接收過程如圖:

在發送的時候,一旦用戶程序處理完了數據,會通過一個系統調用將數據寫入到套接字,將數據從用戶空間拷貝到內核空間的緩衝區,交由網絡堆棧進行處理,網絡堆棧根據需要對數據進行封裝並調用網卡設備的驅動程序,網卡設備驅動程序會更新傳輸描述符環,然後向網卡設備告知有數據幀需要傳輸。網卡設備會將數據幀從內核中的緩衝區拷貝到自己的緩衝區中併發送到網絡鏈路上,傳送到鏈路上之後,網卡設備會通過一箇中斷告知成功發送,然後內核會釋放相應的緩衝區。數據的發送如圖:

由於 linux 系統是通過中斷的方式告知 CPU 有數據包過來的,當網絡的流量越來越大,linux 系統會浪費越來越多的時間去處理中斷,當流量速率達到 10G 的時候,linux 系統可能會被中斷淹沒,浪費很多 CPU 資源。

DPDK 用戶空間的輪詢模式驅動:用戶空間驅動使得應用程序不需要經過 linux 內核就可以訪問網絡設備卡。網卡設備可以通過 DMA 方式將數據包傳輸到事先分配好的緩衝區,這個緩衝區位於用戶空間,應用程序通過不斷輪詢的方式可以讀取數據包並在原地址上直接處理,不需要中斷,而且也省去了內核到應用層的數據包拷貝過程。

DPDK 核心組件

總結

DPDK 核心思想

用戶態模式下的 PMD Driver, 去除了中斷影響,減少了操作系統內核的開銷,消除了 IO 吞吐瓶頸;避免了內核態和用戶態的報文拷貝;用戶態下軟件崩潰,不會影響系統的穩定性。

來源:

https://www.toutiao.com/article/7092588176971137573/?log_from=54448ce932936_1652770551926

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/9ngKXTWj6llijS2pAVYH4w