最新消息:

virtio,vhost 和vhost-user

kvm admin 7328浏览 0评论

随着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

您必须 登录 才能发表评论!