VIRTIO-BLK代码分析(0)概述

2023-10-22 05:30
文章标签 分析 代码 概述 virtio blk

本文主要是介绍VIRTIO-BLK代码分析(0)概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        也无风雨也无晴。- 苏轼(宋)

        为了快速能够访问VIRTIO相关文章,这里设置穿越门:

VIRTIO-BLK代码分析(0)概述

VIRTIO-BLK代码分析(1)VIRTIO设备的模拟

VIRTIO-BLK代码分析(2)VIRTIO驱动分析

VIRTIO-BLK代码分析(3)数据流处理

VIRTIO-BLK代码分析(4)VIRTIO设备中断的注入

VIRTIO-BLK代码分析(5)virtqueue通信

VIRTIO-SCSI代码分析(1)VIRTIO SCSI设备模拟

VIRTIO-SCSI代码分析(2)VIRTIO 驱动分析

VIRTIO-SCSI代码分析(3)VIRTIO SCSI数据流处理

 VHOST-SCSI代码分析(0)VHOST概述

VHOST-SCSI代码分析(1)VHOST SCSI设备模拟

VHOST-SCSI代码分析(2)VHOST SCSI驱动分析

VHOST-SCSI代码分析(3)数据流处理

VHOST-SCSI代码分析(4)VHOST KICK机制

VHOST-SCSI代码分析(5)VHOST CALL机制

         接下来介绍VIRTIO相关内容。首先从VIRTIO-BLK开始分析,VIRTIO-BLK各部分交互图如下所示:

这里包含以下几个部分:

  1. Guest UserSpace:虚拟机用户空间,如虚拟机中运行fio等;
  2. Guest KernelSpace:虚拟机内核空间,它包含IO存储软件栈以及virtio-blk驱动;
  3. QEMU:作为Host UserSpace,负责为虚拟机模拟virtio设备;
  4. Host Kernel Space:KVM用于虚拟机中MMIO处理以及中断注入;IO栈和block驱动用于将IO下发给硬件或硬件处理完成后向上传递;
  5. Virtqueue:用于VIRTIO驱动与VIRTIO设备之间通信;

首先对图中IO请求下发过程(蓝色箭头)作介绍。

  1. 步骤1,虚拟机中用户态应用如fio进行IO下发;
  2. 步骤2,这里IO栈包含VFS,文件系统,通用block层,block调度层,它建立硬盘和内存数据的映射,存储和组织数据,作IO请求的下发,在block调度层作IO的合并和切分(详细见之前博文);
  3. 步骤3,virtio-blk驱动,在准备好数据并加入到virtioqueue后,虚拟机中访问MMIO(类似doorbell寄存器)陷入到KVM中
  4. 步骤4,KVM将上述异常操作分发给QEMU;
  5. 步骤5,QEMU中模拟virtio device根据支持的io类型作IO下发;
  6. 步骤6,类似于步骤2,只不过当前是host上,建立硬盘和内存数据的映射,存储和组织数据,作IO请求的下发,在block调度层作IO的合并和切分;
  7. 步骤7,BLOCK驱动将IO请求真正下发给硬件;

在硬件完成数据处理后,IO请求完成过程(红色箭头)如下:

  1. 步骤1,硬件完成数据处理后以中断或其他方式(轮询)通知BLOCK层驱动;
  2. 步骤2,IO完成信息经过IO栈各层传递;
  3. 步骤3,IO完成信息返回到QEMU进程,经过处理并传递给virtio device;
  4. 步骤4,QEMU调用virtio_notify(),当MSIX中断时写对应内存访问到KVM;
  5. 步骤5,KVM对虚拟机注入中断,通知虚拟机数据处理完成
  6. 步骤6和7作IO完成信息在各层逐步传递,最终返回给虚拟机中fio;

这篇关于VIRTIO-BLK代码分析(0)概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259364

相关文章

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re