1. 程式人生 > 其它 >DPDK與SR-IOV應用場景及效能對比

DPDK與SR-IOV應用場景及效能對比


DPDK與SR-IOV兩者目前主要用於提高IDC(資料中心)中的網路資料包的加速。但是在NFV(網路功能虛擬化)場景下DPDK與SR-IOV各自的使用場景是怎樣的?以及各自的優缺點?
本文主要通過從以下幾點來闡述這個問題:
1、什麼是DPDK?
2、什麼是SR-IOV?
3、DPDK與SR-IOV有何不同?
4、DPDK與SR-IOV各自適合的應用場景是怎樣的?

1、什麼是DPDK?
DPDK(Data Plane Development Kit)是6Wind、Intel開發的一款高效能的資料平面開發工具包。為了方便理解DPDK我們先了解下Linux核心是如何處理網路資料包的。

圖1 左:Linux kernel 右:DPDK
預設情況下,Linux 使用核心來處理網路資料包,隨著IDC(資料中心)NIC速率逐步從40G到目前主流的100G,未來將逐步替換為400G。Linux核心已經不再適合處理高速網路。

核心弊端:
1、中斷處理:當網路中大量資料包到來時,會頻繁產生中斷請求,頻繁的中斷會產生較高的效能開銷、並造成上下文的切換產生時延。
2、記憶體拷貝:網路資料包到來時,網絡卡通過 DMA 等拷貝到核心緩衝區,核心協議棧再從核心空間拷貝到使用者態空間,在 Linux 核心協議棧中,這個耗時操作甚至佔到了資料包整個處理流程的 57.1%。
3、區域性性失效:目前主流處理器都是多個CPU核心的,這意味著一個數據包的處理可能跨多個 CPU 核心。比如:一個數據包可能中斷在 cpu0,核心態處理在 cpu1,使用者態處理在 cpu2,這樣跨多個核心,容易造成 CPU 快取失效,造成區域性性失效。

從前面的分析得知目前網路IO的實現的方式中,核心是導致效能瓶頸的原因所在,要解決效能問題就需要繞過核心,直接在使用者態收發包。
1、核心bypass:通過UIO(Userspace I/O)旁路資料包,實現使用者態資料包收發,減少上下文切換以及記憶體拷貝。
2、使用多核程式設計代替多執行緒程式設計:設定 CPU 的親和性,將執行緒和 CPU 核進行一比一繫結,減少彼此之間排程切換。
3、使用大頁記憶體代替普通的記憶體:減少 cache-miss。
4、採用無鎖技術:解決資源競爭問題。

2、帶有OVS的DPDK
什麼是OVS?
OVS(Open vSwitch)是一款高質量的開源虛擬交換機,執行在hypervisor中併為虛擬機器提供虛擬網路。

圖2 NVF中OVS所處位置
OVS是實施VNF(Virtual Network Function)的一部分,位於hypervisor中,如圖2所示流量可以從一個VNF通過OVS傳遞到另一個VNF中。
OVS 的轉發平面是核心的一部分,無論OVS有多好,它都面臨著與前面討論的 Linux 網路協議棧相同的問題。

圖3 左:Kernel+OVS 右:DPDK+OVS
如圖3所示:基於 DPDK 的轉發路徑替換標準的 OVS 核心轉發路徑,在主機上建立一個使用者空間 vSwitch,它完全執行在使用者空間中從而提高了 OVS 交換機的效能。

3、SR-IOV

在講述SR-IOV之前我們先講述一下PCI直通技術。

什麼是PCI直通?

PCI直通:不使用hypervisor也可以向虛擬機器提供完整的網絡卡。虛擬機器認為自己與網絡卡直接相連。如圖4所示,有兩個NIC卡和兩個VNF,每個都獨佔訪問其中一個NIC卡。

圖4 網絡卡直通

PCI直通缺點:由於下面的兩個網絡卡被VNF1和VNF3獨佔。並且沒有第三個專用網絡卡分配給VNF2使用。
什麼是SR-IOV?
SR-IOV(Single Root I/O Virtualization)規範:定義了一種用於虛擬化PCIe裝置的機制。這種機制可以將單個PCIe乙太網控制器虛擬化為多個PCIe裝置


圖5 SR-IOV
通過建立PCIe裝置的VF,每個VF可以分配給單個VM/VNF,從而消除由於網絡卡不夠的問題。
4、DPDK vs SR-IOV
資料中心中存在東西向流量與南北向流量。

圖6

在同一個伺服器內的東西向流量,DPDK效能優於SR-IOV。這很容易理解:如果流量是在伺服器內部路由/交換的,而不是到NIC。SR-IOV沒有任何優勢。相反,SR-IOV會成為一個瓶頸(流量路徑會變長,網絡卡資源會被佔用)。

圖7為Intel官方給出東西向流量場景下DPDK與SR-IOV的效能測試資料。

在南北流量(也包括從一個伺服器到另一個伺服器的東西流量)的場景中,SR-IOV效能要優於DPDK。

圖8

圖9

圖9為Intel官方給出的南北向流量場景下DPDK與SR-IOV的效能測試資料。