Virtio/Vhost是什么
Vhost/Virtio是一种半虚拟化的设备抽象接口规范, 在Qemu和KVM中的得到了广泛的应用,在客户机操作系统中实现的前端驱动程序一般直接叫Virtio, 在宿主机实现的后端驱动程序称为Vhost。与宿主机纯软件模拟I/O相比,virtio可以获得很好的性能,在数据中心中得到了广泛的应用。Vhost有两种实现:内核态和用户态
- 内核态实现:
vhost_net将部分的Virtio驱动从用户空间(其实是QEMU中)移到了kernel中,从而跳过QEMU,减少QEMU和内核之间的上下文切换开销,从而提升网络IO的性能。
通过在内核态增加了一个vhost驱动,与virtio相比,只需要进行一次用户态内核态切换(因为内核态的vhost-net.ko可以直接访问内核态的TAP设备,少了一次切换),另外,由于引入vhost技术共享了虚拟机的网卡缓冲区也省了一次数据拷贝(vhost-net.ko充当vhost backend,kvm.ko充当vhost client)。- 用户态实现:
vhost_user是将vhost_net驱动移动到用户态来实现零切换和零拷贝,从而进一步提升性能。一些实现了vhost backend的交换机(如snabbswitch)直接在用户态从vhost共享的虚拟机网卡缓存区virtio-ring中把网络数据进行读取,然后snabbswtich又实现了SR-IOV的物理网卡驱

本文介绍了Virtio/Vhost的内核态和用户态实现,特别是vhost_user如何提升性能。DPDK逐步支持虚拟化的历程,从最初的guest virtio PMD到现在的用户态vhost user,以及DPDK vhost的关键功能,如设备管理、报文交换和队列映射。此外,还探讨了OVS+DPDK方案在VNFs部署中的应用。
最低0.47元/天 解锁文章
2317

被折叠的 条评论
为什么被折叠?



