virtio and vhost

最近debug KVM IO,记录总结如下。

关于virtio:

+---------+------+--------+----------+--+
|         +------+        +----------+  |
| user    |      |        |          |  |
| space   |      |        |  guest   |  |
|         |      |        |          |  |
|    +----+ qemu |        | +-+------+  |
|    |    |      |        | | virtio |  |
|    |    |      |        | | driver |  |
|    |    +------+        +-+---++---+  |
|    |                          |       |
|    |       ^                  |       |
|    v       |                  v       |
|            |                          |
+-+-----+-----------------+--+-------+--+
| |tap  |    +------------+ kvm.ko   |  |
| +-----+                 +--+-------+  |
|                kernel                 |
+---------------------------------------+
具体动作过程:

1) guest设置好tx;

2)发送中断信号,退出KVM

3) KVM从内核态切换到QEMU的用户态进程

4) QEMU把tx数据发送到tap

这里发生了两次内核态和用户态的切换。


Vhost:

vhost在内核中加入了vhost_net.ko模块,使得数据可以在内核态中得到处理。

+---------+------+--------+----------+--+
|         +------+        +----------+  |
| user    |      |        |          |  |
| space   |      |        |  guest   |  |
|         |      |        |          |  |
|         | qemu |        | +-+------+  |
|         |      |        | | virtio |  |
|         |      |        | | driver |  |
|         +------+        +-+---++---+  |
|                               |       |
|                               |       |
|                               v       |
|                                       |
+-+-----+---+-+----+------+----+--+-----+
| |tap  |   | vhost-net.ko|    | kvm.ko |
| +---^-+   +------+----^-+    +----+---+
|     |-------|  kernel |-----------|   |
+---------------------------------------+
具体动作过程:

1) guest设置好tx;

2)发送中断信号,退出KVM

3) KVM直接和vhost_net通信

4) vhost_net把tx数据发送到tap

Vhost_user:

增加一种新的vhost_backend, 使得数据可以在用户态得以灵活的处理。

+---------------+------+--+----------+--+
|               +------+  +----------+  |
| user          |      |  |          |  |
| space         |      |  |  guest   |  |
|               |      |  |          |  |
|  +-+-------+  | qemu |  | +-+------+  |
|  | vhost   |  |      |  | | virtio |  |
|  | backend |  |      |  | | driver |  |
|  +---------+  +------+  +-+---++---+  |
|                               |       |
|      ^                        |       |
|      |                        v       |
|      |                                |
+------------------------------+--+-----+
|      +-----------------------+ kvm.ko |
|                              +--+-----+
|                kernel                 |
+---------------------------------------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值