0
点赞
收藏
分享

微信扫一扫

virtio 的一点知识总结

非常帅气的昵称吧 2022-02-10 阅读 72
.netp2pc#

virtio 相关介绍文章很多,这里总结一些自认为一些关键的技术点,

1,virtio ring(vring)队列由 guest 准备(申请内存),vring包含三部分:desc, avail, used,
     且 vring.avail 所指向的 desc 也由 guest 准备,guest 给队列准备 desc 分两种:
     1),发送时准备,如 virtio-blk 所用队列以及 virtio-net 中 guest 主动发送数据用到的队列;
     2),事先准备好,如 virtio-net 中 host 主动发送数据的队列;
2,virtio-blk 只需要一个 virtio ring 队列,且是单方向的队列,读写的发起方都是guest,guest需          要 发送(or 称为读写)数据时向队列中填充desc;
3,virtio-net,virtio-vsock,virtio-console等需要若干个virtio ring 队列pair,pair 中的一个是                  guest主动发送数据时使用的队列,另一个是用于host主动发送数据时使用的队列;
      需要 guest事先填充好 host 所用的数据发送队列,以便host需要发送数据时可以获取到desc;
      且需要guest收到host发送数据后,回收desc并回填到host所用的队列,方便host继续使用;
4,vhost-blk 与 其他 vhost-net,vhost-vsock等不同,在 host 侧需要获取 guest 读写数据所操作           的page,进而组织为bio:
               GVA -> GPA(filled to vring.desc) ->  HVA -> get_user_pages -> make bio; 
      而对于其他的 vhost 驱动则是,直接读取数据:
               GVA -> GPA(filled to vring.desc) ->  HVA -> copry_from_iter;

举报

相关推荐

0 条评论