vHost
QEMU实现的virtio网络后端带来的网络性能并不如意,究其原因是因为频繁的上下文切换, 低效的数据拷贝、线程间同步等。于是,内核实现了一个新的virtio网络后端驱动,名为 vhost-net。与之而来的是一套新的vhost协议。
vhost-user
基于vhost协议,DPDK设计了一套新的用户态协议,名为vhost-user协议.
+-------------------------------------------+
| Qemu process |
| |
| +---------------------------------+ |
| | Guest OS | |
| | User | |
| | +---------------------------+ | |
| | Kernel | |
| | +-------------+ | |
| | | virtio-net | | |
| | +-----+-^-----+ | |
| | | | | |
| +---------------------------------+ |
| | | |
| +-----v-+-----+ |
| | vhost-user | |
| +-------------+ |
+-------------------------------------------+
Host User Space
+-----------------------------------------------------+
Host Kernel Space
vhost-net
better than vhost-user
vhost协议可以将允许VMM将virtio的数据面offload到另一个组件上,而这个组件正是 vhost-net。
QEMU会打开并初始化字符设备`/dev/vhost-net`,并调用ioctl来与vhost-net进行控制面 通信。
+-------------------------------------------+
| Qemu process |
| |
| +---------------------------------+ |
| | Guest OS | |
| | | |
| | User | |
| | +---------------------------+ | |
| | Kernel | |
| | +-------------+ | |
| | | virtio-net | | |
| | +-----+-^-----+ | |
| | | | | |
| +---------------------------------+ |
| | | |
+-------------------------------------------+
| |
Host User Space | |
+-----------------------------------------------------+
Host Kernel Space | |
| |
+-----v-+-----+
| vhost-net |
+-------------+