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   |
                 +-------------+