• [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启动了,第二个却没有启动。

     悬而未决,现不弄了。。。

  • 相关阅读:
    狂神说笔记——SpringBoot开发单体应用21
    狂神说笔记——SpringBoot快速入门20
    Java全栈系列笔记
    狂神说笔记——SpringBoot操作数据库223
    狂神说笔记——Vue 快速入门19
    狂神说笔记——SpringBoot操作数据库221
    狂神说笔记——SpringCloud快速入门23
    狂神说笔记——SpringBoot开发单体应用21
    狂神说笔记——大前端技能快速入门18
    第 3 章 MCS51 单片机指令系统
  • 原文地址:https://www.cnblogs.com/hugetong/p/5904799.html
Copyright © 2020-2023  润新知