5 virtio的半硬件卸載方案
????????Virtio作為一種半虛擬化的解決方案呜师,其性能一直不如設備的pass-through,即將物理設備(通常是網卡的VF)直接分配給虛擬機,其優(yōu)點在于數(shù)據(jù)平面是在虛擬機與硬件之間直通的抄囚,幾乎不需要主機的干預舌厨。而virtio的發(fā)展兜辞,雖然帶來了性能的提升曲梗,可終究無法達到pass-through的I/O性能肉迫,始終需要主機(主要是軟件交換機)的干預苟穆。vDPA(vhost Data Path Acceleration)即是讓virtio數(shù)據(jù)平面不需主機干預的解決方案抄课。該框架由Redhat提出唱星,實現(xiàn)了virtio數(shù)據(jù)平面的硬件卸載「ィ控制平面仍然采用原來的控制平面協(xié)議间聊,當控制信息被傳遞到硬件中,硬件完成數(shù)據(jù)平面的配置之后抵拘,數(shù)據(jù)通信過程由硬件設備(智能網卡)完成哎榴,虛擬機與網卡之間直通。中斷信息也由網卡直接發(fā)送至虛擬機不需要主機的干預僵蛛。這種方式尚蝌,控制面比較復雜,硬件難以實現(xiàn)充尉。
????????在硬件vDPA架構中飘言,通過OVS轉發(fā)的流量首包依然由主機上的OVS轉發(fā)平面處理,對應數(shù)據(jù)流的后續(xù)報文由硬件網卡直接轉發(fā)驼侠。
????????從下圖中可以看到virtio的控制平面仍需要vDPA driver進行傳遞姿鸿,也就是說QEMU,或者虛擬機仍然使用原先的控制平面協(xié)議作為接口倒源,而這些控制信息被傳遞到硬件中般妙,硬件會通過這些信息配置好數(shù)據(jù)平面。而數(shù)據(jù)平面上相速,經過配置后的數(shù)據(jù)平面可以在虛擬機和網卡之間直通碟渺。
????????鑒于現(xiàn)在后端的數(shù)據(jù)處理其實完全在硬件中,原先的前后端通知方式也可以幾乎完全規(guī)避主機的干預突诬,以中斷為例苫拍,原先中斷必須由主機處理,主機通過軟件交換機得知中斷的目的地之后旺隙,將虛擬中斷注入到虛擬機中绒极,而在vDPA中,網卡可以直接將中斷發(fā)送到虛擬機中蔬捷÷⑻幔總體來看,vDPA的數(shù)據(jù)平面與SR-IOV設備直通的數(shù)據(jù)平面非常接近周拐,并且在性能數(shù)據(jù)上也能達到后者的水準铡俐。更重要的是vDPA框架保有virtio這套標準的接口,使云服務提供商在不改變virtio接口的前提下妥粟,得到更高的性能审丘。
????????需要注意的是,vDPA框架中利用到的硬件必須至少支持virtio ring的標準勾给,否則可想而知滩报,硬件是無法與前端進行正確通信的锅知。另外,原先軟件交換機提供的交換功能脓钾,也轉而在硬件中實現(xiàn)售睹。
????????為了解決高性能SRIOV網絡的熱遷移問題,出現(xiàn)了很多做法和嘗試可训,尚未形成統(tǒng)一的標準昌妹。在Redhat提出硬件vDPA架構之前,Mellanox實現(xiàn)了軟件vDPA(即VF Relay)沉噩。理論上講捺宗,Mellanox的軟件vDPA并不能算是vDPA,其實就是將數(shù)據(jù)在用戶空間的virtio隊列和VF的接收隊列做了一次數(shù)據(jù)Relay川蒙。Redhat提出的硬件vDPA架構蚜厉,目前在DPDK和內核程序中均有實現(xiàn),基本是未來的標準架構畜眨。Qemu支持兩種方式的vDPA昼牛,一種是vhost-user,配合DPDK中的vDPA運行康聂,DPDK再調用廠商用戶態(tài)vDPA驅動贰健;另一種方式是vhost-vdpa,通過ioctl調用到內核通用vDPA模塊恬汁,通用vDPA模塊再調用廠商硬件專有的vDPA驅動伶椿。
????????1) 軟件vDPA: 軟件vDPA也叫VF relay,由于需要軟件把VF上接收的數(shù)據(jù)通過virtio轉發(fā)給虛擬機(VM)氓侧,如Mellanox在OVS-DPDK實現(xiàn)了這個relay脊另,OVS流表由硬件卸載加速,性能上與SR-IOV VF直通(passthrough)方式比略有降低约巷,不過實現(xiàn)了虛擬機(VM)的熱遷移特性偎痛。
????????2) 硬件vDPA: 硬件vDPA實際上是借助virtio硬件加速,以實現(xiàn)更高性能的通信独郎。由于控制面復雜踩麦,所以用硬件難以實現(xiàn)。廠商自己開發(fā)驅動氓癌,對接到用戶空間DPDK的vDPA和內核vDPA架構上谓谦,可以實現(xiàn)硬件vDPA。目前Mellanox mlx5和Intel IFC對應的vDPA適配程序都已經合入到DPDK和kernel社區(qū)源碼顽铸。
????????在硬件vDPA場景下茁计,通過OVS轉發(fā)的流量首包依然由主機上的OVS轉發(fā)平面處理,對應數(shù)據(jù)流的后續(xù)報文由硬件網卡直接轉發(fā)谓松。
????????后來在Bluefield-2上星压,由于集成了ARM核,所以NVIDIA在與UCloud的合作中鬼譬,將OVS的控制面也完全卸載到網卡到ARM核上娜膘,這樣主機上就可以將OVS完全卸載到網卡上。
?參考鏈接
dpdk對虛擬化的支持調研 - allcloud - 博客園
DPDK系列之十二:基于virtio优质、vhost和OVS-DPDK的容器數(shù)據(jù)通道_cloudvtech的博客-CSDN博客_dpdk容器化
DPDK系列之六:qemu-kvm網絡后端的加速技術_cloudvtech的博客-CSDN博客_kvm加速
DPDK系列之十五:Virtio技術分析之一竣贪,virtio基礎架構_cloudvtech的博客-CSDN博客_virtio
從dpdk1811看virtio1.1 的實現(xiàn)—packed ring-lvyilong316-ChinaUnix博客
Qemu模擬IO和半虛擬化Virtio的區(qū)別以及I/O半虛擬化驅動介紹_weixin_34051201的博客-CSDN博客
DPU和CPU互聯(lián)的接口之爭:Virtio還是SR-IOV? - 極術社區(qū) - 連接開發(fā)者與智能計算生態(tài)
virtio簡介(一)—— 框架分析 - Edver - 博客園
Linux Kernel Vhost 架構 - 于楊 - 博客園
virtio,vhost 和vhost-user - allcloud - 博客園
Virtio網絡的演化之路 - 云+社區(qū) - 騰訊云
詳解vhost-user協(xié)議及其在OVS DPDK巩螃、QEMU和virtio-net驅動中的實現(xiàn)_redwingz的博客-CSDN博客_vhost協(xié)議
??
?《重識云原生系列》專題索引:?
- 第一章——不謀全局不足以謀一域
- 第二章計算第1節(jié)——計算虛擬化技術總述
- 第三章云存儲第1節(jié)——分布式云存儲總述
- 第四章云網絡第一節(jié)——云網絡技術發(fā)展簡述
- 第四章云網絡4.2節(jié)——相關基礎知識準備
- 第四章云網絡4.3節(jié)——重要網絡協(xié)議
- 第四章云網絡4.3.1節(jié)——路由技術簡述
- 第四章云網絡4.3.2節(jié)——VLAN技術
- 第四章云網絡4.3.3節(jié)——RIP協(xié)議
- 第四章云網絡4.3.4節(jié)——OSPF協(xié)議
- 第四章云網絡4.3.5節(jié)——EIGRP協(xié)議
- 第四章云網絡4.3.6節(jié)——IS-IS協(xié)議
- 第四章云網絡4.3.7節(jié)——BGP協(xié)議
- 第四章云網絡4.3.7.2節(jié)——BGP協(xié)議概述
- 第四章云網絡4.3.7.3節(jié)——BGP協(xié)議實現(xiàn)原理
- 第四章云網絡4.3.7.4節(jié)——高級特性
- 第四章云網絡4.3.7.5節(jié)——實操
- 第四章云網絡4.3.7.6節(jié)——MP-BGP協(xié)議
- 第四章云網絡4.3.8節(jié)——策略路由
- 第四章云網絡4.3.9節(jié)——Graceful Restart(平滑重啟)技術
- 第四章云網絡4.3.10節(jié)——VXLAN技術
- 第四章云網絡4.3.10.2節(jié)——VXLAN Overlay網絡方案設計
- 第四章云網絡4.3.10.3節(jié)——VXLAN隧道機制
- 第四章云網絡4.3.10.4節(jié)——VXLAN報文轉發(fā)過程
- 第四章云網絡4.3.10.5節(jié)——VXlan組網架構
- 第四章云網絡4.3.10.6節(jié)——VXLAN應用部署方案
- 第四章云網絡4.4節(jié)——Spine-Leaf網絡架構
- 第四章云網絡4.5節(jié)——大二層網絡
- 第四章云網絡4.6節(jié)——Underlay 和 Overlay概念
- 第四章云網絡4.7.1節(jié)——網絡虛擬化與卸載加速技術的演進簡述
- 第四章云網絡4.7.2節(jié)——virtio網絡半虛擬化簡介
- 第四章云網絡4.7.3節(jié)——Vhost-net方案
- 第四章云網絡4.7.4節(jié)vhost-user方案——virtio的DPDK卸載方案
- 第四章云網絡4.7.5節(jié)vDPA方案——virtio的半硬件虛擬化實現(xiàn)
- 第四章云網絡4.7.6節(jié)——virtio-blk存儲虛擬化方案
- 第四章云網絡4.7.8節(jié)——SR-IOV方案
- 第四章云網絡4.7.9節(jié)——NFV
- 第四章云網絡4.8.1節(jié)——SDN總述
- 第四章云網絡4.8.2.1節(jié)——OpenFlow概述
- 第四章云網絡4.8.2.2節(jié)——OpenFlow協(xié)議詳解
- 第四章云網絡4.8.2.3節(jié)——OpenFlow運行機制
- 第四章云網絡4.8.3.1節(jié)——Open vSwitch簡介
- 第四章云網絡4.8.3.2節(jié)——Open vSwitch工作原理詳解
- 第四章云網絡4.8.4節(jié)——OpenStack與SDN的集成
- 第四章云網絡4.8.5節(jié)——OpenDayLight
- 第四章云網絡4.8.6節(jié)——Dragonflow