当前位置: 首页 > news >正文

QEMU源码全解析 —— virtio(2)

接前一篇文章:

本文内容参考:

《趣谈Linux操作系统》 —— 刘超,极客时间

《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社

特此致谢!

上一回对于virtio进行了简介,并说明了其基本原理以及框架。对于virtio框架,再来回顾一下。

virtio框架如下图所示:

virtio是一种利用半虚拟化技术提供I/O性能的框架,其是一种前后端架构,包括前端驱动(Front-End Driver)后端设备(Back-End Device)以及自身定义的传输协议

  • 前端驱动

前端驱动为虚拟机内部的virtio模拟设备对应的驱动,每一种前端设备都需要有对应的驱动才能正常运行。前端驱动的主要作用是:1)接收用户态的请求;2)然后按照传输协议将这些请求进行封装;3)再写I/O端口;4)发送一个通知到QEMU的后端设备。

  • 后端设备

后端设备则是在QEMU中,用来接收前端驱动发过来的I/O请求,然后从接收的数据中按照传输协议的格式进行解析。对于网卡等需要实际物理设备交互的请求,后端驱动会对物理设备进行操作,从而完成请求,并且会通过中断机制通知前端驱动。

  • virtio队列

virtio前端和后端驱动的数据传输通过virtio队列(virtio queue,virtqueue)完成,一个设备会注册若干个virtio队列,每个队列负责处理不同的数据传输。这些队列有的是控制层面的队列、有的是数据层面的队列。virtqueue是通过vring实现的。vring是虚拟机和QEMU之间共享的一段环形缓冲区。当虚拟机需要发送请求到QEMU的时候就准备好数据,将数据描述放到vring中,写一个I/O端口。然后QEMU就能够从vring中读取数据信息,进而从内存中读出数据。QEMU完成请求之后,也将数据结构存放在vring中,前端驱动也就可以从vring中得到数据。

此处也有另外一种观点和视角,将virtio架构分为四层:

  • 前端驱动

首先,在虚拟机里面的virtio前端,针对不同类型的设备有不同的驱动程序,但是接口都是统一的。例如,硬盘就是virtio_blk,网络就是virtio_net。

  • 后端设备

其次,在宿主机的QEMU里边,实现virtio后端的逻辑,主要就是操作硬件的设备。例如,通过写一个物理机硬盘上的文件来完成虚拟机写入硬盘的操作。再如,向内核协议栈发送一个网络包完成虚拟机对于网络的操作。

  • virtio层与virtio-ring层

在virtio的前端和后端之间,有一个通信层,里边包括virtio层和virtio-ring层。virtio这一层实现的是虚拟队列接口,算作前后端通信的桥梁;而virtio-ring则是该桥梁的具体实现。

virtio使用virtqueue进行前端与后端的高速通信。不同类型的设备队列数目不同。virtio-net使用两个队列,一个用于接收、另一个用于发送;而virtio-blk仅使用一个队列。

如果客户机要向宿主机发送数据,则它会将数据的buffer添加到virtqueue中,然后通过写入寄存器通知宿主机。这样宿主机就可以从virtqueue中收到buffer里边的数据了(与前述机制一个意思:当虚拟机需要发送请求到QEMU的时候就准备好数据,将数据描述放到vring中,写一个I/O端口。然后QEMU就能够从vring中读取数据信息,进而从内存中读出数据。QEMU完成请求之后,也将数据结构存放在vring中,前端驱动也就可以从vring中得到数据)。

欲知后事如何,且看下回分解。

相关文章:

  • python自动化测试实战 —— 自动化测试框架的实例
  • Spring Cloud Gateway中对admin端点进行认证
  • Windows安装卸载MySQL
  • 推荐算法:HNSW【推荐出与用户搜索的类似的/用户感兴趣的商品】
  • 2024毕业设计最新大数据毕业设计选题汇总(合集)
  • AI自动生成代码工具
  • LeedCode刷题---滑动窗口问题
  • 使用elasticsearch-dump工具备份ES数据库
  • Java键值对Pair的使用方式和操作流程
  • ip地址怎么转化为十进制
  • 分布式ID服务实践
  • quickapp_快应用_快应用与h5交互
  • ARM:作业3
  • nginx配置正向代理支持https
  • windows如何解决端口冲突(实用篇)
  • 知识笔记(四十七)———什么是mysql
  • 在vscode下将ipynb文件转成markdown(.md文件)的方法
  • MySQL8.0默认配置详解--持续更新中
  • 微服务1 springcloud学习笔记P1-P40
  • ppt转换成pdf文件
  • 北京2025年住房发展计划:供应商品住房用地240-300公顷,建设筹集保租房5万套
  • 上海市委常委会会议暨市生态文明建设领导小组会议研究基层减负、生态环保等事项
  • 吉林市马拉松5月18日开赛,奖牌、参赛服公布
  • 奥园集团将召开债券持有人会议,拟调整“H20奥园2”本息兑付方案
  • 国家主席习近平同普京总统举行大范围会谈
  • 青岛双星名人集团管理权之争:公司迁址,管理层更迭