99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

VirtIO Networking虛擬網(wǎng)絡(luò)設(shè)備實(shí)現(xiàn)架構(gòu)

SDNLAB ? 來(lái)源:SDNLAB ? 2023-05-08 10:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

VirtIO

VirtIO 由 Rusty Russell 開(kāi)發(fā),最初是為了支持自己開(kāi)發(fā)的 lguest Hypervisor,其設(shè)計(jì)目標(biāo)是在虛擬化環(huán)境下提供與物理設(shè)備相近的 I/O 功能和性能,并且避免在虛擬機(jī)中安裝額外的驅(qū)動(dòng)程序。基于這一目標(biāo),后來(lái)通過(guò)開(kāi)源的方式將 VirtIO 延伸為一種虛擬化設(shè)備接口標(biāo)準(zhǔn),并廣泛地支持 KVM、QEMU、Xen 和 VMware 等虛擬化解決方案。

為了追求更高的性能和更低的開(kāi)銷(xiāo)表現(xiàn),VirtIO 采用了 Para-virtualizaiton(半虛擬化/準(zhǔn)虛擬化)技術(shù)路線,本質(zhì)區(qū)別于性能低下的 Full-virtualizaiton(e.g. QEMU I/O Emulation)。這也意味著使用 VirtIO 的 GuestOS 需要經(jīng)過(guò)一定的代碼修改(安裝非原生的 Device Driver),這也是為什么需要將 VirtIO 定位于 “虛擬化設(shè)備接口標(biāo)準(zhǔn)“ 的原因,其整體的集成架構(gòu)需要由 Front-end(GuestOS Kernel Device Driver)和 Back-end(VMM Provider)共同遵守統(tǒng)一的傳輸協(xié)議。

6ececcc6-ec67-11ed-90ce-dac502259ad0.png

在應(yīng)用 VirtIO 的場(chǎng)景中,除了 GuestOS 需要安裝額外的 VirtIO Front-end Device Driver 這一點(diǎn)不足之外(通常在制作 QCOW2 鏡像時(shí)會(huì)安裝好),相對(duì)地帶來(lái)了下列諸多好處:

高性能:VirtIO 省去了 Full-virtualizaiton 模式下的 Traps(操作捕獲)環(huán)節(jié),GuestOS 通過(guò) VirtIO Interfaces 可以直接與 Hypervisor 中的 Device Emulation 進(jìn)行交互。

低開(kāi)銷(xiāo):VirtIO 優(yōu)化了 CPU 在內(nèi)核態(tài)和用戶態(tài)之間頻繁切換,以及 CPU 在 VM Exit 和 VM Entry 之間頻繁陷入陷出所帶來(lái)的性能開(kāi)銷(xiāo)。

標(biāo)準(zhǔn)化:VirtIO 實(shí)現(xiàn)了統(tǒng)一的虛擬設(shè)備接口標(biāo)準(zhǔn),可以應(yīng)用在多種虛擬化解決方案中。

6ee1eaf4-ec67-11ed-90ce-dac502259ad0.png

VirtIO 虛擬設(shè)備接口標(biāo)準(zhǔn)

為了抑制 Para-virtualizaiton 所具有的跨平臺(tái)兼容性缺點(diǎn),VirtIO 明智地走上了開(kāi)源之路,通過(guò)構(gòu)建標(biāo)準(zhǔn)而統(tǒng)一的生態(tài)來(lái)爭(zhēng)取最小化的兼容性排斥問(wèn)題,反而讓其逆轉(zhuǎn)成為了一種優(yōu)勢(shì)。

在 VirtIO 提出的虛擬化設(shè)備接口標(biāo)準(zhǔn)中,包括多個(gè)子系統(tǒng),每個(gè)子系統(tǒng)都定義了一組虛擬設(shè)備類(lèi)型和協(xié)議。例如:

VirtIO-Block(塊設(shè)備):提供虛擬磁盤(pán)設(shè)備的接口。

VirtIO-Net(網(wǎng)絡(luò)設(shè)備):提供虛擬網(wǎng)絡(luò)設(shè)備的接口。

VirtIO-Serial(串口設(shè)備):提供虛擬串口設(shè)備的接口。

VirtIO-Memory(內(nèi)存設(shè)備):提供虛擬內(nèi)存設(shè)備的接口。

VirtIO-Input(輸入設(shè)備):提供虛擬輸入設(shè)備的接口。

此外還有 VirtIO-SCSI、VirtIO-NVMe、VirtIO-GPU、VirtIO-FS、VirtIO-VSock 等等虛擬設(shè)備類(lèi)型和協(xié)議。

VirtIO 的前后端分層架構(gòu)

VirtIO 虛擬設(shè)備接口標(biāo)準(zhǔn)的分層軟件架構(gòu)如下圖所示:

Front-end:是一組通用的,安裝在 GuestOS Kernel 中的 VirtIO Device Driver,通過(guò) Hyper-call 的方式對(duì) Back-end 進(jìn)行調(diào)用。

Back-end:是一組 Hypervisor 專(zhuān)用的,運(yùn)行在 VMM 中的設(shè)備模擬程序,提供了 Hyper-call 調(diào)用接口。

Transport:是一組標(biāo)準(zhǔn)的傳輸層接口,基于環(huán)形隊(duì)列的方式來(lái)批量處理 I/O 請(qǐng)求。

6f04d564-ec67-11ed-90ce-dac502259ad0.png

VirtIO 的數(shù)控路徑分離架構(gòu)

VirtIO 還定義了 “控制路徑” 和 “數(shù)據(jù)路徑” 的分離架構(gòu),兩者的側(cè)重各有不同,控制平面追求盡可能的靈活以兼容不用的設(shè)備和廠商,而數(shù)據(jù)平面則追求更高的轉(zhuǎn)發(fā)效率以快速的交換數(shù)據(jù)包。

控制路徑:控制建立或刪除 Front-end 和 Back-end 之間的數(shù)據(jù)路徑,提供可管理的靈活性。

數(shù)據(jù)路徑:在 Front-end 和 Back-end 之間進(jìn)行數(shù)據(jù)傳輸,追求性能。

對(duì)應(yīng)地,VirtIO 標(biāo)準(zhǔn)也可以分為兩個(gè)部分:

VirtIO Spec:定義了如何在 Front-end 和 Back-end 之間構(gòu)建控制路徑和數(shù)據(jù)路徑的標(biāo)準(zhǔn),例如:數(shù)據(jù)路徑規(guī)定采用環(huán)形隊(duì)列緩沖區(qū)布局。

Vhost Protocol:定義了如何降數(shù)據(jù)路徑的高性能實(shí)現(xiàn)標(biāo)準(zhǔn),例如:基于 Kernel、DPDK、SmartNIC Offloading 的實(shí)現(xiàn)方式。

以 QEMU 為例,其根據(jù) VirtIO Spec 實(shí)現(xiàn)了控制路徑,而數(shù)據(jù)路徑則可以 Bypass QEMU,使用 vhost-net、vhost-user 等實(shí)現(xiàn)。

VirtIO Networking

VirtIO Networking 是一種高功能、高性能、可擴(kuò)展的虛擬化網(wǎng)絡(luò)設(shè)備,支持多種網(wǎng)絡(luò)功能和虛擬網(wǎng)絡(luò)技術(shù),并可以通過(guò)多種實(shí)現(xiàn)方式進(jìn)行部署。

網(wǎng)絡(luò)功能:MAC 地址、流量限制、流量過(guò)濾、多隊(duì)列收發(fā)等;

虛擬網(wǎng)絡(luò)技術(shù):VLAN、GRE、VXLAN 等;

多種實(shí)現(xiàn)方式:Kernel、DPDK、硬件網(wǎng)卡等。

virtio-net Driver 和 virtio-net Device(由 QEMU 模擬的后端)

virtio-net 是 VirtIO Networking 的默認(rèn)實(shí)現(xiàn)。其中,F(xiàn)ront-end 是 virtio-net Driver(虛擬網(wǎng)卡驅(qū)動(dòng)程序);Back-end 是由 QEMU 軟件模擬的 virtio-net Device。

QEMU 會(huì)在 VM 啟動(dòng)時(shí),為 VM 創(chuàng)建好相應(yīng)的 virtio-net Device(虛擬設(shè)備),并在 VM 啟動(dòng)后,通過(guò)在 GuestOS Kernel 中安裝的 virtio-net Driver 來(lái) Probe(探知)到該 virtio-net Device。

6f81faa8-ec67-11ed-90ce-dac502259ad0.png

virtio-net Driver 和 virtio-net Device 的軟件架構(gòu)如下圖所示,我們需要關(guān)注 3 個(gè)方面:

Control Plane:virtio-net Driver 和 virtio-net Device 之間使用了 PCI 傳輸協(xié)議,如下圖中藍(lán)線部分。

Data Plane:virtio-net Driver 和 virtio-net Device 之間使用了 Virtqueues 和 Vrings,如下圖中紅虛線部分。而 virtio-net Device 和 Kernel Network Stack 之間使用了 Tap 虛擬網(wǎng)卡設(shè)備,作為 User space(QEMU)和 Kernel space(Network Stack)之間的數(shù)據(jù)傳輸通道,如下圖中紅實(shí)線部分。

Notification:作為 virtio-net Driver、virtio-net Device 和 KVM 之間交互方式,用于實(shí)現(xiàn) “vCPU 硬中斷“ 的功能。

6fa6be74-ec67-11ed-90ce-dac502259ad0.png

其中值得細(xì)究的就是 virtio-net Driver 和 virtio-net Device 之間的 Transport(傳輸層)實(shí)現(xiàn)。virtio-net Transport 采用了非常類(lèi)似于物理網(wǎng)卡設(shè)備(NIC Rx/Tx Queues 和 Kernel Rx/Tx Rings)的設(shè)計(jì)思路。

Front-end 和 Back-end 之間存在 2 個(gè) Virtqueues,對(duì)應(yīng)到 NIC 的 Rx/Tx Queues。Virtqueues 的底層利用了 IPC 共享內(nèi)存技術(shù),在 HostOS 和 GuestOS 之間建立直接的傳輸通道,繞開(kāi)了 VMM 的低效處理。

Receive Queue:是一塊 Buffer 內(nèi)存空間,存放具體的由 Back-end 發(fā)送到 Front-end 數(shù)據(jù)。

Send Queue:是一塊 Buffer 內(nèi)存空間,存放具體的由 Front-end 發(fā)送到 Back-end 數(shù)據(jù)。

同時(shí),每個(gè) Virtqueue 都具有 2 個(gè) Vrings,對(duì)應(yīng)到 Kernel 的 Rx/Tx Rings:

Available Ring:存放 Front-end 向 Back-end 發(fā)送的 Queue 中可用的 Buffer 內(nèi)存地址。

Used Ring:存放 Back-end 向 Front-end 發(fā)送的 Queue 中已使用的 Buffer 內(nèi)存地址。

當(dāng)然,F(xiàn)ront-end 和 Back-end 之間還需要一種雙向通知機(jī)制,對(duì)應(yīng)到 NIC 和 CPU 之間的硬中斷信號(hào)

Available Buffer Notification:Front-end 使用此信號(hào)通知 Back-end 存在待處理的緩沖區(qū)。

Used Buffer Notification:Back-end 使用此信號(hào)標(biāo)志已完成處理某些緩沖區(qū)。

具體的,當(dāng) GuestOS 發(fā)送數(shù)據(jù)時(shí),F(xiàn)ront-end 將數(shù)據(jù)填充到 Send Queue 內(nèi)存空間,然后將地址記錄到 Available Ring,并在適當(dāng)?shù)臅r(shí)候向 Back-end 發(fā)送 Available Buffer Notification;QEMU 接收到通知后,從 Available Ring 中獲取到數(shù)據(jù)的數(shù)據(jù),完成數(shù)據(jù)接收,然后記錄 New Buffer Head Index 到 Used Ring,并在適當(dāng)?shù)臅r(shí)候向 Front-end 發(fā)送一個(gè) Used Buffer Notification。Front-end 接收到通知后釋放對(duì)應(yīng)的 Send Queue 內(nèi)存空間,Available Ring 指針指向下一位。

當(dāng) GuestOS 接收數(shù)據(jù)時(shí),F(xiàn)ront-end 首先分配好 NULL 的 Receive Queue 內(nèi)存空間,然后將地址記錄到 Available Ring,并在適當(dāng)?shù)臅r(shí)候向 Back-end 發(fā)送 Available Buffer Notification;QEMU 接收到通知后,從 Available Ring 中獲取到數(shù)據(jù)填充入口地址,完成數(shù)據(jù)填充,然后記錄 New Buffer Head Index 到 Used Ring,并在適當(dāng)?shù)臅r(shí)候向 Front-end 發(fā)送一個(gè) Used Buffer Notification。Front-end 接收到通知后從 Receive Queue 中讀取數(shù)據(jù),Available Ring 指針指向下一位。

值得注意的是,在 PCI Passthrough 場(chǎng)景中,可以使用 virtio-pci(更多的是使用 VFIO)。雖然此時(shí)依舊會(huì)沿用了 Available/Used buffer notification 這一控制面的雙向通知機(jī)制,但實(shí)際的數(shù)據(jù)面,則是由 DMA 和專(zhuān)用隊(duì)列來(lái)完成的,具有更高的性能。這體現(xiàn)了數(shù)控分離帶來(lái)的好處。

6fbaaede-ec67-11ed-90ce-dac502259ad0.png

綜上所述,下述流程圖總結(jié)了 2 個(gè)關(guān)鍵流程:

virtio-net Device 初始化流程:包括 Device discovery 和 Device configuration。對(duì)于 virtio-net Driver 而言,virtio-net Device 就是一個(gè) PCI 設(shè)備,遵守標(biāo)準(zhǔn)的 PCI 設(shè)備初始化流程,并且 Driver 和 Device 使用 PCI 協(xié)議進(jìn)行通信。

virtio-net Driver 發(fā)包流程:

當(dāng) virtio-net Driver 發(fā)送數(shù)據(jù)包時(shí),將數(shù)據(jù)包放入 Send Queue,將數(shù)據(jù)包的訪問(wèn)地址放入 Available Ring,觸發(fā)一次 Available Buffer Notification 到 KVM,然后 VM Exit,由 QEMU 接管 CPU,執(zhí)行 I/O 控制邏輯,將此數(shù)據(jù)包傳遞到 virtio-net Device,然后 virtio-net Device 降數(shù)據(jù)包通過(guò) Tap 設(shè)備傳入 Kernel Network Stack;

完成后,QEMU 將 New Buffer Head Index 放入到 Used Ring 中,同時(shí) virtio-net Device 發(fā)出一個(gè) vIRQ 中斷注入到 KVM,然后 KVM 發(fā)出一個(gè) Used Buffer Notification 到 virtio-net Driver,此時(shí) virtio-net Driver 就會(huì)從 Used Ring 中取出 Buffer Head Index;

至此一次發(fā)送操作就完成了。

另外,由于 Tap 設(shè)備支持 Tx/Rx 多隊(duì)列,所以實(shí)際上也會(huì)存在 N 個(gè) Virtqueues Peer 進(jìn)行一一映射。

6fda39e8-ec67-11ed-90ce-dac502259ad0.png

vhost-net(由 Kernel 提供的后端)

由 QEMU 模擬的 virtio-net Device 顯然性能不佳,具有頻繁的模式和上下文切換、低效的數(shù)據(jù)拷貝、線程間同步等性能問(wèn)題。于是,VirtIO 社區(qū)在 Kernel 中實(shí)現(xiàn)了一個(gè)新的 vhost-net 后端,以解決上述問(wèn)題。

更低的延遲(latency):比普通 virtio-net 低 10%。

更高的吞吐量(throughput):比普通 virtio-net 高 8 倍,達(dá)到 7~8 Gigabits/Sec。

vhost-net 的核心思想就是將 Data Path Bypass QEMU,定義了一種新的 Data Path 傳輸方式,使得 GuestOS virtio-net Driver 和 HostOS Kernel vhost-net 可以直接通信。如下圖所示:

Control Plane:virtio-net Driver 和 virtio-net Device 之間使用了 PCI 傳輸協(xié)議,virtio-net Device 和 vhost-net 之間使用 ioctl() 接口,如下圖中藍(lán)線部分。

Data Plane:virtio-net Driver 和 vhost-net 直通,如下圖中虛線部分。而 vhost-net 和 Kernel Network Stack 之間使用了 Tap 虛擬網(wǎng)卡設(shè)備連接,如下圖中紅實(shí)線部分。

Notification:作為 virtio-net Driver、vhost-net 和 KVM 之間交互方式,用于實(shí)現(xiàn) “vCPU 硬中斷“ 的功能。

70185a48-ec67-11ed-90ce-dac502259ad0.png

vhost-net 的本質(zhì)是一個(gè) HostOS Kernel Module,實(shí)現(xiàn)了 vhost-net Protocol 標(biāo)準(zhǔn),當(dāng) Kernel 加載 vhost-net 后,會(huì)暴露一個(gè)設(shè)備接口文件 /dev/vhost-net。

當(dāng) QEMU 在 vhost-net 模式下啟動(dòng)時(shí),QEMU(virtio-net Device)首先會(huì) open() 該文件,并通過(guò) ioctl() 與 vhost-net 進(jìn)行交互,繼而完成 vhost-net 實(shí)例的 Setup(初始化)。初始化的核心是建立 virtio-net Driver 和 vhost-net 之間的 Data Path 以及 Notification,包括:

Hypervisor Memory Layout(虛擬化內(nèi)存布局):用于 Data Path 傳輸,讓 vhost-net 可以在 KVM 的內(nèi)存空間中找到特定 VM 的 Virtqueues 和 Vrings 的地址空間。

ioeventfd 和 irqfd(文件描述符):用于 Notification 傳輸,讓 vhost-net 和 KVM 之間可以在 Kernel space 中完成 Notification 的直接交互,不再需要通過(guò) User space 中的 QEMU。

同時(shí),在 vhost-net 實(shí)例初始化的過(guò)程中,vhost-net 會(huì)創(chuàng)建一個(gè) Kernel Thread(vhost worker thread),名為 vhost-$pid(pid 是 QEMU 進(jìn)程 PID),QEMU 進(jìn)程就和 vhost-net 實(shí)例以此建立了聯(lián)系。vhost worker thread 用于處理 I/O Event(異步 I/O 模式),包括:

使用 ioeventfd 輪詢(xún) Tap 事件和 Notify 事件,并轉(zhuǎn)發(fā)數(shù)據(jù)。

使用 irqfd 允許 vhost-net/KVM 通過(guò)對(duì)其進(jìn)行寫(xiě)入來(lái)將 vCPU 的 vIRQ 注入到 virtio-net Driver。

綜上,在 vhost-net 實(shí)例初始化完成之后,virtio-net Device 將不再負(fù)責(zé)數(shù)據(jù)包的處理(對(duì) Virtqueues 和 Vrings 的讀/寫(xiě)操作),取而代之的是 vhost-net。vhost-net 可以直接訪問(wèn) VM 的 Virtqueues 和 Vrings 內(nèi)存空間,也可以通過(guò) KVM 與 virtio-net Driver 進(jìn)行 Notification 交互。

704841e0-ec67-11ed-90ce-dac502259ad0.png

最后需要注意的是,vhost-net 在某些應(yīng)用場(chǎng)景中的性能未必就會(huì)比 virtio-net Device 更好。例如:從 HostOS 傳輸?shù)?GuestOS 的 UDP 流量,如果 GuestOS 接受 UDP 數(shù)據(jù)包的速度比 HostOS 發(fā)送的速度要慢,在這種情況下使用 vhost-net 將會(huì)導(dǎo)致 GuestOS UDP Socket Receive Buffer 更容易溢出,導(dǎo)致丟包,繼而使得 GuestOS 的整體性能出現(xiàn)下降。此時(shí)使用慢速的 virtio-net,讓 HostOS 和 GuestOS 之間的傳輸速度稍微慢一點(diǎn),反而會(huì)提高整體的性能。

可見(jiàn),在虛擬機(jī)場(chǎng)景中,全鏈路的性能均衡需要給予更加全面的考慮。

vhost-user(由 DPDK 實(shí)現(xiàn)的用戶態(tài)后端)

vhost-user 是一個(gè)基于 DPDK vhost-user Library 開(kāi)發(fā)的后端,運(yùn)行在 User space,應(yīng)用了 DPDK 所提供的 CPU 親和性,大頁(yè)內(nèi)存,輪詢(xún)模式驅(qū)動(dòng)等數(shù)據(jù)面轉(zhuǎn)發(fā)加速技術(shù)。

區(qū)別于 vhost-net Protocol,vhost-user Library 實(shí)現(xiàn)了一種新的 vhost-user Protocol,兩者間最大的區(qū)別體現(xiàn)在通信信道的實(shí)現(xiàn)方式上。

vhost-net:使用 /dev/vhost-net 字符設(shè)備和 ioctl() 實(shí)現(xiàn)了 User Process(QEMU)和 Kernel(vhost-net)之間的 Control Plane 通信信道。

vhost-user:使用 Unix Socket 實(shí)現(xiàn)了 User Process(QEMU 和 DPDK App)之間的 Control Plane 通信信道。

QEMU 通過(guò) Unix Socket 來(lái)完成對(duì) vhost-user 的 Data Plane 配置,包括:

特性協(xié)商配置:QEMU(virtio-net Device)與 vhost-user 協(xié)商兩者間功能特性的交集,確認(rèn)哪些功能特性是有效的。

內(nèi)存區(qū)域配置:vhost-user 使用 mmap() 來(lái)映射分配給 QEMU 的內(nèi)存區(qū)域,建立兩者間的直接數(shù)據(jù)傳輸通道。

Virtqueues/Vrings 配置:QEMU 將 Virtqueues/Vrings 的數(shù)量和訪問(wèn)地址發(fā)送給 vhost-user,以便 vhost-user 訪問(wèn)。

Notification 配置:vhost-user 仍然使用 ioeventfd 和 irqfd 來(lái)完成和 KVM 之間的通知交互。

7064fac4-ec67-11ed-90ce-dac502259ad0.png

目前最常見(jiàn)的 vhost-user DPDK App 就是 OVS-DPDK,除了支持 vhost-user Back-end 之外,還支持 virtio-pmd Front-end。在追求極致性能的 vhost-user / virtio-pmd 架構(gòu)中,HostOS User space 和 GuestOS User space 都運(yùn)行著 DPDK。

用戶可以自由選擇創(chuàng)建 vhost-user 類(lèi)型的 vSwitch Port(對(duì)應(yīng)一個(gè) vhost-user 實(shí)例)。如下圖所示。

70c7bad8-ec67-11ed-90ce-dac502259ad0.png

HW vDPA(使用硬件加速的后端)

目前性能最好的 Data Plane 無(wú)疑是 SR-IOV VF Passthrough,但原生的 SR-IOV 缺少控制面邏輯,在實(shí)際使用中多有不便。

HW vDPA(Hardware vhost Data Path Acceleration,硬件 vhost 數(shù)據(jù)面加速)就是一種使用 SR-IOV VF 來(lái)充當(dāng) Data Plane、使用 vDPA Framework 來(lái)充當(dāng)控制面的軟硬件融合加速技術(shù),能夠同時(shí)兼具軟件的可管理性、靈活性以及硬件的高性能。同時(shí)也解決了 VF Passthrough 虛擬機(jī)不支持熱遷移的難題。

NOTE:SW vDPA(e.g. vDPA on OVS-DPDK)不在本文討論范圍中。

71330036-ec67-11ed-90ce-dac502259ad0.png

下圖中展示了 OVS-DPDK 和 HW vDPA 的性能對(duì)比。

718b057e-ec67-11ed-90ce-dac502259ad0.png

目前 vDPA Framework 的底層實(shí)現(xiàn)方式還尚未統(tǒng)一,從 QEMU 的角度來(lái)看,主要有 2 種方式:

適應(yīng)性更好的 vhost-user + vDPA Driver:在 DPDK vhost-user Library 的基礎(chǔ)之上,再實(shí)現(xiàn)一個(gè) vDPA Driver 適配層。由 vDPA Driver 完成與 HW Device(e.g. SmartNIC、DPU)之間的交互。從下圖中可以看到 QEMU 與 HW 的 Control Plane 通過(guò) vDPA driver 進(jìn)行傳遞,并配置好 HW 與 VM 之間的 Passthrough Data Plane。目前 Mellanox MLX5 和 Intel IFC 對(duì)應(yīng)的 vDPA Driver 都已經(jīng)合入到 DPDK 和 Kernel 社區(qū)。(注:IOMMU/VFIO 實(shí)現(xiàn)原理請(qǐng)瀏覽《虛擬化技術(shù) — 硬件輔助的虛擬化技術(shù)》。)

71a70bca-ec67-11ed-90ce-dac502259ad0.png

架構(gòu)更合理的 vhost-vdpa:實(shí)現(xiàn)一種新的 vhost-vdpa Protocol,QEMU 通過(guò) ioctl() 調(diào)用 Kernel 中的 vDPA Module,再由 vDPA Module 通過(guò) vDPA Driver 完成與 HW Device 之間的交互。

72050e46-ec67-11ed-90ce-dac502259ad0.png

目前,隨著 SmartNIC / DPU 的快速發(fā)展,一種結(jié)合了 SW vDPA 和 HW vDPA 特性的 HW vDPA on OVS-DPDK 方案也逐漸成熟中,其實(shí)現(xiàn)會(huì)更加復(fù)雜、但功能也更加完備。值得期待。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SCSI接口
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    10695
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    966

    瀏覽量

    29383
  • VLAN技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    6584
  • VMM
    VMM
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    10226
  • qemu
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    5679

原文標(biāo)題:詳解:VirtIO Networking 虛擬網(wǎng)絡(luò)設(shè)備實(shí)現(xiàn)架構(gòu)

文章出處:【微信號(hào):SDNLAB,微信公眾號(hào):SDNLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    linux設(shè)備virtio組織關(guān)系及設(shè)備初始化調(diào)用流程

    virtio_net.c,virtio_blk.c,virtio_balloon.c等這些。那么這些文件是什么關(guān)系呢?其次里面很多還有各自probe函數(shù),到底是如何調(diào)用的,例如以網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-25 15:47 ?5189次閱讀
    linux<b class='flag-5'>設(shè)備</b>中<b class='flag-5'>virtio</b>組織關(guān)系及<b class='flag-5'>設(shè)備</b>初始化調(diào)用流程

    virtio I/O通信流程及設(shè)備框架的實(shí)現(xiàn)

    virtio 是一種通用的半虛擬化的 I/O 通信協(xié)議,提供了一套前后端 I/O 通信的的框架協(xié)議和編程接口。根據(jù)該協(xié)議實(shí)現(xiàn)設(shè)備通過(guò)前后端的配合,相比全模擬
    的頭像 發(fā)表于 03-10 13:37 ?7200次閱讀

    外網(wǎng)訪問(wèn)家里的網(wǎng)絡(luò)設(shè)備

    網(wǎng)絡(luò)設(shè)備
    學(xué)習(xí)電子知識(shí)
    發(fā)布于 :2023年07月17日 20:06:18

    各類(lèi)網(wǎng)絡(luò)設(shè)備

    ` 網(wǎng)絡(luò)設(shè)備,銳捷,艾泰,D-link,華為,H3C,思科,韓電,安普`
    發(fā)表于 11-29 11:15

    Linux常用網(wǎng)絡(luò)設(shè)備

    網(wǎng)絡(luò)設(shè)備是計(jì)算機(jī)體系結(jié)構(gòu)中必不可少的一部分,處理器如果想與外界通信,通常都會(huì)選擇網(wǎng)絡(luò)設(shè)備作為通信接口。眾所周知,在 OSI(Open Systems Interconnection,開(kāi)放網(wǎng)際互連)中,網(wǎng)絡(luò)被劃分為七個(gè)層次,從下到
    發(fā)表于 07-25 07:37

    怎么實(shí)現(xiàn)智能網(wǎng)絡(luò)設(shè)備開(kāi)發(fā)中的硬件的設(shè)計(jì)?

    怎么實(shí)現(xiàn)智能網(wǎng)絡(luò)設(shè)備開(kāi)發(fā)中的硬件的設(shè)計(jì)?
    發(fā)表于 05-26 06:47

    StratoVirt 的 virtio-blk 設(shè)備是如何實(shí)現(xiàn)的?

    平臺(tái)下虛擬磁盤(pán)的一種實(shí)現(xiàn)方式,本質(zhì)上為一種半模擬技術(shù)。virtio-blk 設(shè)備中采用 io_event_fd 進(jìn)行前端到后端通知,采用中斷注入方式
    發(fā)表于 06-29 10:37

    StratoVirt 中的虛擬網(wǎng)卡是如何實(shí)現(xiàn)的?

    的核,不停的對(duì)共享環(huán)進(jìn)行輪訓(xùn)操作,解決了 Vhost-net 存在的問(wèn)題。接下來(lái)分別介紹每種虛擬網(wǎng)卡是如何實(shí)現(xiàn)的。Virtio-netVirtio-net 是一種虛擬的以太網(wǎng)卡,通過(guò)
    發(fā)表于 08-10 11:16

    網(wǎng)絡(luò)設(shè)備監(jiān)管系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    網(wǎng)絡(luò)設(shè)備監(jiān)管是指對(duì)IP 網(wǎng)絡(luò)中的關(guān)鍵設(shè)備進(jìn)行實(shí)時(shí)監(jiān)控和管理,使網(wǎng)絡(luò)管理員對(duì)網(wǎng)絡(luò)設(shè)備的使用情況有更為深入的了解。在研究分析
    發(fā)表于 06-23 13:33 ?24次下載

    家用網(wǎng)絡(luò)設(shè)備簡(jiǎn)介

    家用網(wǎng)絡(luò)設(shè)備簡(jiǎn)介 就在幾年前,家用網(wǎng)絡(luò)設(shè)備還相當(dāng)簡(jiǎn)單。使用一根直連電纜、一部網(wǎng)絡(luò)集線器或以太網(wǎng)路由器,您可以將兩部或多部計(jì)算機(jī)連接在一起,共享外設(shè)、
    發(fā)表于 08-05 10:26 ?1143次閱讀

    系統(tǒng)虛擬化技術(shù)virtio總體設(shè)計(jì)思想

    ,主要有計(jì)算資源,存儲(chǔ)資源和網(wǎng)絡(luò)資源。所以,系統(tǒng)虛擬化技術(shù)又可以細(xì)分為計(jì)算虛擬化,存儲(chǔ)虛擬化和網(wǎng)絡(luò)虛擬
    的頭像 發(fā)表于 05-07 15:40 ?5289次閱讀
    系統(tǒng)<b class='flag-5'>虛擬</b>化技術(shù)<b class='flag-5'>virtio</b>總體設(shè)計(jì)思想

    探究I/O虛擬化及Virtio接口技術(shù)(上)

    I/O虛擬化是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是從I/O硬件虛擬化開(kāi)始,逐漸開(kāi)啟了DPU這個(gè)新處理器類(lèi)型的創(chuàng)新。而Virtio接口,已經(jīng)是事實(shí)上的云計(jì)算虛擬
    的頭像 發(fā)表于 04-04 16:54 ?4501次閱讀
    探究I/O<b class='flag-5'>虛擬</b>化及<b class='flag-5'>Virtio</b>接口技術(shù)(上)

    探究I/O虛擬化及Virtio接口技術(shù)(下)

    I/O虛擬化是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是從I/O硬件虛擬化開(kāi)始,逐漸開(kāi)啟了DPU這個(gè)新處理器類(lèi)型的創(chuàng)新。而Virtio接口,已經(jīng)是事實(shí)上的云計(jì)算虛擬
    的頭像 發(fā)表于 04-04 17:03 ?3277次閱讀
    探究I/O<b class='flag-5'>虛擬</b>化及<b class='flag-5'>Virtio</b>接口技術(shù)(下)

    panabit加載virtio網(wǎng)卡驅(qū)動(dòng)

    引言:Panabit網(wǎng)絡(luò)流量管理系統(tǒng)是一款強(qiáng)大的企業(yè)級(jí)網(wǎng)絡(luò)管理軟件,它提供了豐富的功能和靈活的配置選項(xiàng)。而virtio網(wǎng)卡作為一種高性能的虛擬網(wǎng)絡(luò)設(shè)
    的頭像 發(fā)表于 11-17 11:13 ?1757次閱讀

    適用于基于FPGA的網(wǎng)絡(luò)設(shè)備的IEEE 1588透明時(shí)鐘架構(gòu)

    在基于FPGA的網(wǎng)絡(luò)設(shè)備中,精確的時(shí)間同步至關(guān)重要。虹科IEEE1588標(biāo)準(zhǔn)定義的精確時(shí)間協(xié)議(PTP)為網(wǎng)絡(luò)中的設(shè)備提供了納秒級(jí)的時(shí)間同步。本文將介紹虹科提供的適用于基于FPGA的網(wǎng)絡(luò)設(shè)備
    的頭像 發(fā)表于 11-23 08:04 ?1353次閱讀
    適用于基于FPGA的<b class='flag-5'>網(wǎng)絡(luò)設(shè)備</b>的IEEE 1588透明時(shí)鐘<b class='flag-5'>架構(gòu)</b>