医院网站模板,搜索关键词的软件,无锡网站建设365caiyi,网站开发公司vue框架也无风雨也无晴。- 苏轼#xff08;宋#xff09; 接下来介绍VIRTIO相关内容。首先从VIRTIO-BLK开始分析#xff0c;VIRTIO-BLK各部分交互图如下所示#xff1a; 这里包含以下几个部分#xff1a;
Guest UserSpace#xff1a;虚拟机用户空间#xff0c;如虚拟机中运行f… 也无风雨也无晴。- 苏轼宋 接下来介绍VIRTIO相关内容。首先从VIRTIO-BLK开始分析VIRTIO-BLK各部分交互图如下所示 这里包含以下几个部分
Guest UserSpace虚拟机用户空间如虚拟机中运行fio等Guest KernelSpace虚拟机内核空间它包含IO存储软件栈以及virtio-blk驱动QEMU作为Host UserSpace负责为虚拟机模拟virtio设备Host Kernel SpaceKVM用于虚拟机中MMIO处理以及中断注入IO栈和block驱动用于将IO下发给硬件或硬件处理完成后向上传递Virtqueue用于VIRTIO驱动与VIRTIO设备之间通信
首先对图中IO请求下发过程蓝色箭头作介绍。
步骤1虚拟机中用户态应用如fio进行IO下发步骤2这里IO栈包含VFS文件系统通用block层block调度层它建立硬盘和内存数据的映射存储和组织数据作IO请求的下发在block调度层作IO的合并和切分详细见之前博文步骤3virtio-blk驱动在准备好数据并加入到virtioqueue后虚拟机中访问MMIO类似doorbell寄存器陷入到KVM中步骤4KVM将上述异常操作分发给QEMU步骤5QEMU中模拟virtio device根据支持的io类型作IO下发步骤6类似于步骤2只不过当前是host上建立硬盘和内存数据的映射存储和组织数据作IO请求的下发在block调度层作IO的合并和切分步骤7BLOCK驱动将IO请求真正下发给硬件
在硬件完成数据处理后IO请求完成过程红色箭头如下
步骤1硬件完成数据处理后以中断或其他方式轮询通知BLOCK层驱动步骤2IO完成信息经过IO栈各层传递步骤3IO完成信息返回到QEMU进程经过处理并传递给virtio device步骤4QEMU调用virtio_notify()当MSIX中断时写对应内存访问到KVM步骤5KVM对虚拟机注入中断通知虚拟机数据处理完成步骤6和7作IO完成信息在各层逐步传递最终返回给虚拟机中fio