socket连接之后会调用上图中的事件处理函数net_vhost_user_event,进而调用vhost_user_start()接口。 vhost-user的net设备申请的数据结构和框架,其中vhost_net中vhost_dev结构有一个重要的vhost_ops指针,对后端的接口都在这里。前面提到过vhost的后端有用户态和内核态两种,所以VhostOps的实现也有两种,因为我们指定了vho...
qemu和vhost-user app的消息传递是通过UNIX本地socket实现的,对应于kernel下每个ioctl的实现(如果是vhost-kernel,用ioctl),这里vhost-user app必须对每个ioctl 提供自己的处理,DPDK下在vhost-user.c文件下的vhost_user_msg_handler函数,这里有一个核心的数据结构:VhostUserMsg,该结构是消息传递的载体,整个结构并不复杂...
staticvoidnet_vhost_user_event(void*opaque,intevent){constchar*name=opaque;/* 定义多个NetClientState结构,每个队列一个 */NetClientState*ncs[MAX_QUEUE_NUM];VhostUserState*s;Chardev*chr;Error*err=NULL;intqueues;/* 从qemu参数中获取后端设备定义的队列个数 */queues=qemu_find_net_clients_except(nam...
在qemu 2.9的前端virtio和dpdk17.05的后端vhost-user构成的虚拟队列中,会率先通过socket建立连接,将qemu中virtio的内存布局传给vhost,vhost收到包(该消息机制有自己的协议,暂称为msg)后,分析其中的信息,这里面通信包含一套自己写的协议。包含以下内容,均是在刚建立连接时候传递的: staticconstchar*vhost_message_str[...
qemu-system-aarch64: -netdev tap,ifname=tap1,id=network-0,vhost=on,script=no,downscript=no: info: vhost_dev_init call hdev->vhost_ops->vhost_backend_init 、host_set_owne、 vhost_get_features qemu-system-aarch64: -netdev tap,ifname=tap1,id=network-0,vhost=on,script=no,downscript...
Interface "vhost-user-1" type: dpdkvhostuserclient options: {vhost-server-path="/tmp/sock0"} 至此,后端驱动vhost以及它之上的交换机已经启动了,处于等待状态。(但是qemu 2.7以上才支持重连功能) 4.再来安装qemu 先安装依赖项: sudo apt-getinstall zlib1g-dev ...
net_init_netdev初始化函数中,根据type=vhost-user,执行相应的net_init_vhost_user函数进行初始化,并为每个队列创建一个NetClientState结构,用于后续socket通信。对于"-device"参数的处理也是采用同样的方式,依次执行device_init_func,初始化相应的DeviceState结构。
vhost-user和vhost类似,只是使用一个用户态进程vhost-user代替了内核中的vhost模块。vhost-user进程和Guset之间时通过共享内存的方式进行数据操作。vhost-user相对与vhost架构,把virtio驱动后端驱动从内核态又放回到了用户态中(vhost-user进程充当virtiO后端驱动)。
#include "hw/virtio/vhost-user.h" #include "hw/virtio/vhost-backend.h" #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-net.h" #include "chardev/char-fe.h" #include "io/channel-socket.h" #include "sysemu/kvm.h" #include "qemu/error-report.h" ...
-nic[tap|bridge|user|l2tpv3|vde|netmap|vhost-user|socket][,...][,mac=macaddr][,model=mn] 此选项是一次性配置板载(默认)来宾 NIC 硬件和主机网络后端的快捷方式。主机后端选项与下面的相应选项相同。客户机网卡模型可以使用 设置。用于列出可用的设备类型。硬件 MAC 地址可以使用 设置。-netdevmodel=mode...