[qemu] 在前端驅動使用virtio的情況下,如何讓后端使用vhost-user [未解決]


首先,如果你更關心原理和知識,請讀讀這個 http://chuansong.me/n/2186528 (值得細細的逐字讀)。

在<<深入淺出dpdk>>中提到,vhost-user(用戶態驅動)配合前端virtio(這就是傳說中的半虛擬化)性能最佳。

我們的目標是:qemu如何使用vhost-user

一,man qemu

其中涉及到的一個名稱MSIX(https://en.wikipedia.org/wiki/Message_Signaled_Interrupts)(沒細看,簡單的說就是PCIE很牛逼的中斷 特性/技術)。

二,在man中,我們找到了這個例子

 qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,share=on \
                   -numa node,memdev=mem \
                   -chardev socket,path=/path/to/socket \
                   -netdev type=vhost-user,id=net0,chardev=chr0 \
                   -device virtio-net-pci,netdev=net0

根據以上的例子猜測這個原理是這樣的:host有一個net0,然后通過pci設備把net0注冊給了guest里的pci網卡設備。他們在host的操作系統層面上是通過socket也就是chr0進行進程間通訊的(通訊的兩個進程分別是qemu程序和用戶態網卡驅動)。除了通訊呢,還與數據交換,這個交換通過hugepage完成,這個hugepage實際上是host層面上的,所以需要在host里設置hugepage然后給guest使用。

基於猜測,可以分成,內存和網卡兩個部分分別對這個想法進行印證。

三,網卡部分

我們已dpdk虛擬機作為實驗的對象(又是他,倒霉的虛擬機小d  - -!)

[tong@T7 dpdk]$ qemu-system-x86_64 -chardev socket,id=chr0,path=./sock,server
QEMU waiting for connection on: disconnected:unix:./sock,server
qemu-system-x86_64 -enable-kvm \
        -m 2G -cpu Nehalem -smp cores=2,threads=2,sockets=2 \
        -numa node,mem=1G,cpus=0-3,nodeid=0 \
        -numa node,mem=1G,cpus=4-7,nodeid=1 \
        -drive file=disk.img,if=virtio \
        -chardev socket,id=chr0,path=./sock \
        -netdev vhost-user,id=net0,chardev=chr0 \
        -device virtio-net-pci,netdev=net0 \
         &

命令都不對,始終不能成功,本地socket要等待鏈接才能繼續。最終想了辦法如上操作,結果第一個命令的qemu啟動了,第二個卻沒有啟動。

 懸而未決,現不弄了。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM