随着qemu2.1的发布,可以看到,qemu支持了vhost-user。从介绍可以看出,这是把原来vhost-backend从kernel移到了userspace,这和原来virtio架构有什么区别呢?并且这个特性带来了怎样的改进?
virtio
virtio是qemu的半虚拟化驱动,guest使用virtio driver将请求发送给virtio-backend。
+---------+------+--------+----------+--+ | +------+ +----------+ | | user | | | | | | space | | | guest | | | | | | | | | +----+ qemu | | +-+------+ | | | | | | | virtio | | | | | | | | driver | | | | +------+ +-+---++---+ | | | | | | | ^ | | | v | v | | | | +-+-----+-----------------+--+-------+--+ | |tap | +------------+ kvm.ko | | | +-----+ +--+-------+ | | kernel | +---------------------------------------+
图中描述了的io路径:guest发出中断信号退出kvm,从kvm退出到用户空间的qemu进程。然后由qemu开始对tap设备进行读写。 可以看到这里从用户态进入内核,再从内核切换到用户态,进行了2次切换。
vhost
vhost技术对virtio-net进行了优化,在内核中加入了vhost-net.ko模块,使得对网络数据可以再内核态得到处理。
+---------+------+--------+----------+--+ | +------+ +----------+ | | user | | | | | | space | | | guest | | | | | | | | | | qemu | | +-+------+ | | | | | | virtio | | | | | | | driver | | | +------+ +-+---++---+ | | | | | | | | v | | | +-+-----+---+-+----+------+----+--+-----+ | |tap | | vhost-net.ko| | kvm.ko | | +---^-+ +------+----^-+ +----+---+ | |-------| kernel |-----------| | +---------------------------------------+
图中描述了的io路径:guest发出中断信号退出kvm,kvm直接和vhost-net.ko通信,然后由vhost-net.ko访问tap设备。 这样网络数据只需要经过从用户态到内核态的一次切换,就可以完成数据的传输。大大提高了虚拟网卡的性能。 由于这个技术中vhost-backend在内核中,所以也被叫做vhost-kernel。
vhost-user
随着技术的发展,将网络数据放入用户态处理将可以得到更灵活的形式。在原有的vhost架构中,进行了改动,增加了 一种新的vhost-backend,叫做vhost-user。
+---------------+------+--+----------+--+ | +------+ +----------+ | | user | | | | | | space | | | guest | | | | | | | | | +-+-------+ | qemu | | +-+------+ | | | vhost | | | | | virtio | | | | backend | | | | | driver | | | +---------+ +------+ +-+---++---+ | | | | | ^ | | | | v | | | | +------------------------------+--+-----+ | +-----------------------+ kvm.ko | | +--+-----+ | kernel | +---------------------------------------+
图中描述了的io路径:guest发出中断信号退出kvm,kvm直接和vhost-backend通信,然后网络数据将交由vhost-backend 进行处理。 从图中可以看出这个技术,依然是需要从用户态退出到内核,再由内核退出到用户态,这样的技术和virtio-backend有 什么区别呢?
未完待续。。。
转载请注明:爱开源 » virtio,vhost 和vhost-user