Ⅰ Dpdk與OpenvSwitch
1、DPDK
DPDK是X86平台報文快速處理的庫和驅動的集合,大多數情況下運行在linux的用戶態空間。
2、Open vSwitch
簡稱OVS是一個虛擬交換軟體,主要用於虛擬機VM環境,作為一個虛擬交換機,支持Xen/XenServer, KVM, and VirtualBox多種虛擬化技術。
在這種某一台機器的虛擬化的環境中,一個虛擬交換機(vswitch)主要有兩個作用:傳遞虛擬機VM之間的流量,以及實現VM和外界網路的通信。
在 OVS 中, 有幾個非常重要的概念:
Bridge: Bridge 代表一個乙太網交換機(Switch),一個主機中可以創建一個或者多個 Bridge 設備。
Port: 埠與物理交換機的埠概念類似,每個 Port 都隸屬於一個 Bridge。
Interface: 連接到 Port 的網路介面設備。在通常情況下,Port 和 Interface 是一對一的關系, 只有在配置 Port 為 bond 模式後,Port 和 Interface 是一對多的關系。
Controller: OpenFlow 控制器。OVS 可以同時接受一個或者多個 OpenFlow 控制器的管理。
Datapath: 在 OVS 中,datapath 負責執行數據交換,也就是把從接收埠收到的數據包在流表中進行匹配,並執行匹配到的動作。
Flow table: 每個 datapath 都和一個「flow table」關聯,當 datapath 接收到數據之後, OVS 會在 flow table 中查找可以匹配的 flow,執行對應的操作, 例如轉發數據到另外的埠。
3、OVDK
Ⅱ DPDK pf-ring pf-ring-zc
DPDK vs pf-ring vs pf-ring-zc https://blog.csdn.net/whatday/article/details/89242246
基於VPP+DPDK開源框架開發UPF https://workerwork.github.io/posts/vpp/
VPP vs OVS
淺析基於DPDK框架下OVS與VPP的差異點 https://www.secrss.com/articles/14352
論用戶態協議棧--DPDK與他的哪些小夥伴們(VPP, OVS, TREX,mTCP,f-Stack等)
InfiniBand RDMA/ROCE
Open Fast Path
《深入淺出DPDK》讀書筆記(十六):DPDK應用篇(基於DPDK的存儲軟體優化:SPDK) https://rtoax.blog.csdn.net/article/details/109371661
Ⅲ 如何藉助 OVN 來提高 OVS 在雲計算環境中的性能
雖然 OVN 是 OVS 社區在 2015 年 1 月份才宣布的一個子項目,但是到目前為止 OVN 已經支持了很多功能,
Logical switches:邏輯交換機,用來做二層轉發。
L2/L3/L4 ACLs:二到四層的 ACL,可以根據報文的 MAC 地址,IP 地址,埠號來做訪問控制。
Logical routers:邏輯路由器,分布式的,用來做三層轉發。
Multiple tunnel overlays:支持多種隧道封裝技術,有 Geneve,STT 和 VXLAN。
TOR switch or software logical switch gateways:支持使用硬體 TOR switch 或者軟體邏輯 switch 當作網關來連接物理網路和虛擬網路。
OVN 對於運行平台沒有額外的要求,只要能夠運行 OVS,就可以運行 OVN,所以 OVN 可以和 Linux,Docker,DPDK 還有 Hyper-V 兼容,從 OVS 升級到 OVN 是非常容易的。
另外 OVN 可以和很多 CMS(Cloud Management System)集成到一起,比如 Openstack neutron,這些 CMS 只需要添加一個 plugin 來配置 OVN 即可。
Ⅳ 編譯和運行DPDK示常式序
DPDK(Data Plane Development Kit)是數據平面開發工具包,由用於加速在各種CPU架構上運行的數據包處理的庫組成。
在Linux上部署DPDK的方法請參考:
在Linux(CentOS)上部署DPDK------命令行方式
該章節的內容參照自官網的 DPDK build sample apps
當DPDK的target環境創建好後(例如 x86_64-native-linuxapp-gcc ), x86_64-native-linuxapp-gcc 目錄中會包含編譯應用程序的庫和頭文件。
在編譯DPDK應用程序之前,首先需要指定兩個環境變數:
在DPDK的 examples 路徑下面有許多示例應用,這里以其中的 helloworld 為例進行編譯:
DPDK的 examples 路徑下面的應用均可以通過這種方式編譯,也可以直接在 examples 路徑下面運行 make ,將這些應用全都編譯好。
在運行應用程序之前,需要確保:
DPDK應用程序與DPDK target環境的環境抽象層EAL(Environmental Abstraction Layer )庫相關聯,該庫提供了一些通用於每個DPDK應用程序的選項。
EAL的詳細配置請參照: DPDK EAL參數
可按照下列參數運行 ./helloworld :
其中 -l 命令指定cpu cores list是EAL必須的配置;若沒有指定 --socket-mem ,則默認會按照預留的hugepages size來分配。
Ⅳ DPDK實驗環境搭建
事情是是是是是這樣的!
我要用DPDK,但是我覺得搞兩台伺服器連埠發包,太麻煩,雖然實際上,可能並不麻煩。。。。但我就是想在單台伺服器上做。
docker+DPDK+OVS 這種方式來做測試。
然後呢就在網上找了個教程,和我的需求真的是一模一樣。。但是按照那個教程做的過程中啊,出了一些問題。記錄一下~
教程鏈接: https://blog.csdn.net/me_blue/article/details/78589592
其中安裝部分按照教程里的做就可以了。
安裝完dpdk和ovs之後創建網橋以及下發流表用的腳本可以在我的github上獲取。 https://github.com/LinanJ/DPDK-OVS-
在這個實驗中,把pktgen和testpmd放在兩個容器中,然後進行測試。創建容器都沒問題,問題是在啟動pktgen的時候,總是報內存的錯誤,要麼是內存沒有,要麼是內存不足!!!
重點來了,朋友們,教程里的socket_mem部分是兩個1024對吧。那是因為人家有連個NUMA節點,你有么???
我是沒有的。。所以,就會報錯,說是socket1上沒有內存。。顯然沒有。所以啊,如果你只有一個numa節點,那麼你在pktgen上和testpmd上的命令應該是這樣的:
dpdk掛載的就是紅線框的這兩條
這樣就可以了。
Ⅵ ovs 基於dpdk性能優化的原理
得益於用戶態網路協議棧處理,用戶空間,巨頁,內存索引,數據預取, IPC等dpdk的設計,如下維度都有一定性能的提升
除了網路協議棧完全在用戶態處理,內存數據訪問的命中率也有50%+的提升,上下文切換大幅度減少。
性能提升機制主要包括: 提升IPC,內存索引,通過軟體預期降低cache未命中,通過巨頁內存降低TLB未命中,通過用戶空間驅動降低上下文切換次數。
參考: