DPDK系列之十六:Virtio技术分析之二,vhost技术对于virtio的增强

7 篇文章 1 订阅
6 篇文章 1 订阅

一、前言

在文章《DPDK系列之十五:Virtio技术分析之一,virtio基础架构》中,可以看到传统的virtio机制需要qemu来模拟用户态IO,所以虚拟机内部的IO请求从产生、发送到qemu、再到宿主机网络,需要多次跨越内核进行拷贝和处理器运行登记切换,影响性能。所以引入了vhost方案,将virtio的后端放到内核之中,这样virtio后端与宿主机上对于的tap设备的数据收发可以直接在内核进行,提高了效率。

   

                            classic virtio                                        vhost


转载自https://blog.csdn.net/cloudvtech

二、vhost工作机制

vhost使用内核驱动的方式将virtio的后端直接放入内核,这样虚拟机和宿主的沟通过程中就不会再向宿主机的userspace进行切换和数据拷贝。

2.1 qemu端的处理

在启动虚拟机的时候,指定-netdev tap时加入vhost=on,就会在qemu端enable vhost机制。tap在创建的时候,如果发现vhost=on,则会调用相应的初始化函数,通过open(“/dev/vhost-net”, O_RDWR)打开了vhost driver;并通过ioctl(vhost_fd)进行了一系列的初始化,并设置kick fd和call fd。

2.2 内核中的处理

vhost在内核中是以miscdevice的形式注册的,在初始化过程中,vhost driver创建了一个名为“vhost-$pid”内核线程,$pid为Qemu的PID。这个内核线程被称为“vhost worker thread”,用于处理virtio的IO事件。

但是由于vhost并没有模拟一个完整的PCI适配器。它内部只涉及了virtqueue的操作,而virtio设备的适配模拟仍然由Qemu来负责。所以vhost还依赖于用户空间qemu的管理平面进行配置和处理,而自身完成位于Host Kernel层的数据面处理。

vhost与kvm的事件通信通过eventfd机制来实现,虚拟机到vhost方向的kick event,通过ioeventfd承载;另一个是vhost到虚拟机方向的call event,通过irqfd承载。

2.3 虚拟机内部的处理

enable vhost的virtio设备的初始化流程和普通virtio基本上一致,使之最后会将初始化好的vring的信息通过ioctl发送给vhost,这样virtio的vring区域就被宿主机内核中的vhost所感知和共享。

虚拟机数据的发送和传统的virtio类似,都是通过操作基于共享内存的vring实现的,只是在数据进入内核之后,vhost会直接将数据发送给tap设备,不用再进入userspace。

转载自https://blog.csdn.net/cloudvtech

三、vhost-user的工作机制

vhost借助内核驱动机制将virtio的后端从用户态的qemu进程移到了内核态,从而减少跨越内核的切换和数据拷贝;而vhost-user则借助Linux的UIO机制进一步再将这个virtio的后端移到用户态,一些实现了vhost backend的交换机(如OVS-DPDK的type=dpdkvhostuser的端口)直接在用户态从vhost共享的虚拟机网卡缓存区vring中把网络数据进行读取,并发送到物理网卡上,从而大大提升了性能:


宿主机端实现用户态的DPDK host-user,虚拟机端采用virtio DPDK PMD,可以实现基于DPDK的高速数据面。DPDK的vhost-user包含的基本功能有:

  • virtio网络设备管理和后端的实现
  • 共享内存的映射、虚拟队列数据的处理
  • 接受kick event和发送call event
  • 虚拟队列和实际的物理网卡间的数据收发

转载自https://blog.csdn.net/cloudvtech







  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值