[論文] [影片]
UDPDK是基於DPDK的最小UDP堆疊,用於伺服器之間的快速點對點通訊。
它完全在用戶空間中運行,因此您可以快速移動資料包,而無需通過繁瑣的核心堆疊。
此外,由於其類似 POSIX 的 API,將現有應用程式移植到 UDPDK 非常容易! 1
什麼是UDPDK:
UDPDK 不是什麼:
1某些功能可能尚不支援。
為了使用UDPDK,您的機器必須配備支援DPDK的網路卡;這些通常存在於伺服器中,而不是筆記型電腦和桌上型電腦。 DPDK 官方支援的硬體清單可在此處取得。具體來說,UDPDK已經在Intel X710-DA2上使用igb_uio和vfio驅動程式進行了開發和測試;只要 DPDK 支持,其他設備就應該可以工作。
UDPDK 需要:
它們已經作為子模組包含在此存儲庫中,因此請拉取它們:
git submodule init
git submodule update
DPDK
DPDK是UDPDK的關鍵要素。它管理 NIC 並實作乙太網路。
cd dpdk/usertools
./dpdk-setup.sh
從選單中執行以下操作:
x86_64-native-linuxapp-gcc
vfio
模組
️ 如果您使用 VFIO 驅動程序,則必須在系統中啟用 IOMMU。
要啟用它,請開啟/etc/default/grub
,在GRUB_CMDLINE_LINUX_DEFAULT
中新增標誌intel_iommu=on
,然後sudo update-grub
最後重新啟動。
伊尼赫
inih 用於方便解析.ini
設定檔。
cd inih
meson build
cd build
ninja
UDPDK建構成靜態函式庫,最終需要與最終應用程式連結。
cd udpdk
make
sudo make install
UDPDK 的 API 與老式 BSD 套接字的 API 非常相似:
int udpdk_socket(int domain, int type, int protocol);
int udpdk_bind(int s, const struct sockaddr *addr, socklen_t addrlen);
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t *optlen);
ssize_t udpdk_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t udpdk_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
int udpdk_close(int s);
此外,正確設定和拆卸 DPDK 內部結構(結構和流程)需要以下方法:
int udpdk_init(int argc, char *argv[]);
void udpdk_interrupt(int signum);
void udpdk_cleanup(void);
注意: select() 尚未實現
apps/
資料夾包含兩個簡單的範例:一個 ping-pong 和一個 pkt-gen 應用程式。
UDPDK 在兩個獨立的進程中運作:主進程包含應用程式邏輯(即呼叫系統呼叫的進程),而輔助進程(輪詢器)持續輪詢 NIC 以傳送和接收資料。使用無鎖環形佇列,透過共用內存在應用程式和輪詢器之間交換資料包。
我們將 UDPDK 與標準 UDP 套接字在吞吐量和延遲方面進行比較。
環境
兩台相同的伺服器在 10G 介面上點對點連接。他們的規格是:
CPU:英特爾至強 E5-2640 @2.4GHz
記憶體: 64GB
作業系統: Ubuntu 18.04
核心: 4.15.0
網路卡: Intel X710 DA2 10GbE
網路卡驅動: VFIO(DPDK)或i40e(普通插座)
吞吐量
我們測量不同資料包大小所實現的最大吞吐量。
後者包括 UDP、IP 和 MAC 標頭。
如圖所示,UDPDK 比傳統套接字效能提高了 18 倍。
應該指出的是,UDPDK 使 10G 連接飽和,不幸的是,這就是我們所擁有的一切:40G 介面將使它絕對閃耀!
延遲
我們測量延遲及其抖動。
UDPDK 再次被證明比標準套接字好一個數量級。
UDP開發工具包 | 標準 | |
---|---|---|
平均值(μs) | 13.92 | 116.57 |
標準(μs) | 0.74 | 18.49 |
UDPDK的程式碼是在BSD 3-Clause許可證下發布的。
這項工作已在 IEEE NFV-SDN 2021(第七屆 IEEE 網路功能虛擬化和軟體定義網路會議)上進行了展示。作者是:L. Lai、G. Ara、T. Cucinotta、K. Kondepu、L. Valcarenghi。
賴,萊昂納多,等人。 「使用 DPDK 的超低延遲 NFV 服務」2021 年 IEEE 網路功能虛擬化和軟體定義網路 (NFV-SDN) 會議。 IEEE,2021。
我們非常歡迎每個人透過實作新功能、擴展現有功能或只是報告錯誤/問題來為 UDPDK 做出貢獻。