整体框架介绍
启动虚拟机时,前后端网络会进行feature协商。前端指的是guest内部的驱动,后端指的是dpdk中的vhost-user。但guest驱动不能直接和vhost_user协商,中间需要通过qemu这个中介。如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/335d4c7e5b50415289ee17f3eb8c485f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Vuc2hpbmUwMDg=,size_8,color_FFFFFF,t_70,g_se,x_16)
如果qemu要完成一个中介的角色,那么qemu一定要实现两个代理。一个代理和dpdk进行沟通,另一个用来和guest沟通。如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b062ca21f5e44352a3ecc0bd2431457c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Vuc2hpbmUwMDg=,size_20,color_FFFFFF,t_70,g_se,x_16)
和dpdk协商,本质上是与dpdk中的vhost_user协商; 和qemu协商本质上是与guest中的virtio-net驱动协商。因此把qemu中用于和dpdk vhost_user协商的代理称为qemu:vhost_user,把qemu中用于和guest virtio-net协商的代理称为qemu:virtio_net。
所以整个协商过程涉及的核心是:dpdk vhost_user, qemu:vhost_user, qemu:virtio-net, guest virtio-net,共4个模块,每个模块都有自己的feature。
每个模块的feature都由3个概念组成:1)模块代码本身支持的feature;(全量feature); 2)根据实际情况使能的feature;3)经过协商实际生效的feature;
整个协商是自后端到前端,再由前端到后端的。dpdk--->qemu--->guest-->qemu--->dpdk
feature协商过程分析
1、dpdk vhost_user初始化 dpdk在初始化时会初始化全局变量:VHOST_FEATURES。初始值就是dpdk vhost_user代码功能可以支持的全量feature,可以根据需求在启动时调用api(rte_vhost_feature_disable)禁用掉其中一些feature。
2、qemu启动初始化后端代理 qemu后端netdev初始化: qemu主进程在启动时解析到-netdev,如果指定tap driver实现网络报文收发,libvirt会事先创建好tap设备,qemu只需要取出从libvirt传来的tap设备对应fd,类似迁移时从libvirt获取fd的过程,网络设备的初始化在qemu解析完参数后,由qemu_create_late_backends进入: qemu-6.0.0
qemu_init
qemu_create_late_backends
net_init_clients
qemu_opts_foreach(qemu_find_opts("netdev"), net_init_netdev, NULL, errp)
net_init_netdev
net_client_init
net_client_init1
net_client_init_fun[netdev->type](netdev, netdev->id, peer, errp) <=> net_init_tap
当指定netdev的type为vhost_user时,net_client_init_fun[netdev->type]=net_init_vhost_user。 关键数据结构:net_clients存放NetClientState(及代码中的nc)为单个网卡数据,包含网卡名字、链路状态,nc->info指向net_vhost_user_info为。
-------------未完待续
参考文章: http://blog.chinaunix.net/uid-28541347-id-5787244.html http://blog.chinaunix.net/uid-28541347-id-5786547.html https://blog.csdn.net/hzj_001/article/details/94156107 https://blog.csdn.net/huang987246510/article/details/121046398
|