假如我们加个参数vhost=on,vhost定义了一堆api,qemu把virtio收发包和用于通知收发包的功能offload给kernel vhost-net了,这包就不用从kernel到用户态的qemu,再从qemu共享给guest,直接从kernel共享给guest,减少一次kernel到用户态qemu的复制开销。 qemu对vhost-net初始化,重点关注qemu把address_space发给kernel vhost-net...
首先看vhost-net模块注册,主要使用linux内核提供的内存注册机制,这部分开发过linux kernel的人都应该很了解啦1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 static struct miscdevice vhost_net_misc = { .minor = VHOST_NET_MINOR, .name = "vhost-net", .fops...
MODULE_DESCRIPTION("Host kernel accelerator for virtio net"); MODULE_ALIAS_MISCDEV(VHOST_NET_MINOR); MODULE_ALIAS("devname:vhost-net"); 其中vhost_net_fops代表字符设备支持的用户态接口。字符设备为/dev/vhost-net 1 2 3 4 5 6 7 8 9 10 staticconststructfile_operations vhost_net_fops = { ....
假如我们加个参数vhost=on,vhost定义了一堆api,qemu把virtio收发包和用于通知收发包的功能offload给kernel vhost-net了,这包就不用从kernel到用户态的qemu,再从qemu共享给guest,直接从kernel共享给guest,减少一次kernel到用户态qemu的复制开销。 qemu对vhost-net初始化,重点关注qemu把address_space发给kernel vhost-net...
qemu 调用过open “/dev/vhost_net”后会还会通过ioctl发送VHOST_SET_OWNER命令,这个命令主要是创建后端vhost线程。对应的kernel处理函数为vhost_net_set_owner。其中又会调用vhost_dev_set_owner。 vhost_dev_set_owner long vhost_dev_set_owner(struct vhost_dev *dev) { struct task_struct *worker; int ...
内核态部分 - 由负责数据路径转发的 ovs kernel 模块组成。 OVS 控制器与 ovsdb-server 和内核转发面进行通信。在我们的例子中,我们用一个 port 把 OVS 内核转发面连接到物理网卡,而另一个 port 将 OVS 内核转发面连接到 vhost-net 后端。在实际应用中将会有多个物理网卡通过多个 port 连接到 OVS,同时还有多个...
内核态部分 - 由负责数据路径转发的 ovs kernel 模块组成。 OVS 控制器与 ovsdb-server 和内核转发面进行通信。在我们的例子中,我们用一个 port 把 OVS 内核转发面连接到物理网卡,而另一个 port 将 OVS 内核转发面连接到 vhost-net 后端。在实际应用中将会有多个物理网卡通过多个 port 连接到 OVS,同时还有多个...
内核态部分 - 由负责数据路径转发的 ovs kernel 模块组成。 OVS 控制器与 ovsdb-server 和内核转发面进行通信。在我们的例子中,我们用一个 port 把 OVS 内核转发面连接到物理网卡,而另一个 port 将 OVS 内核转发面连接到 vhost-net 后端。在实际应用中将会有多个物理网卡通过多个 port 连接到 OVS,同时还有多个...
vhost-net的引入,就是将vitio-net后端设备的数据处理模块下沉到Kernel中,从而提高整体的效率; vhost-net的框架图如下: 从图中可以看出,Guest的网络数据交互直接可以通过vhost-net内核模块进行处理,而不再需要从内核态切换回用户态的Qemu进程中进行处理;
Vhost-kernel进一步优化了Virtio-net,内核引入Vhost-net.ko模块,使得网络数据可以在内核态处理,只进行一次切换,显著减少了数据传输的延迟,这使得网络性能得到了显著提升。 Vhost-user方案主要是讲IO负载卸载到用户态完成。 Vhost-user则是Vhost-kernel的进一步发展,将部分驱动操作移到用户态,通过snabbswitch(用户空间的网络...