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

news2024/11/27 10:44:18

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

        接下来介绍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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/968985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity中Shader的混合模式Blend

文章目录 前言一、混合的作用就是实现各种半透明效果二、混合操作三、在 Shader 中暴露两个属性 来调节 混合的效果 前言 Unity中Shader的混合模式Blend 一、混合的作用就是实现各种半透明效果 这里用PS里的混合作为例子 没选择混合效果前,显示的效果是这样 选择…

嵌入式开发-IIC通信介绍

IIC(Inter-Integrated Circuit)是一种两线式串行总线协议,用于连接微控制器及其他外围设备。在IIC总线上的数据传输速率可以是标准模式(100Kbit/s),快速模式(400Kbit/s)和高速模式&a…

决策树算法学习笔记

一、决策树简介 首先决策树是一种有监督的机器学习算法,其采用的方法是自顶向下的递归方法,构建一颗树状结构的树,其具有分类和预测功能。其基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处的熵值为零。决策树的构…

【强化学习】MDP马尔科夫链

基本元素 状态集:表示智能体所处所有状态的全部可能性的集合。类似的集合,行为集,回报集决策:规定我在某个状态下,我做出某个action马尔可夫链:学术上来说是无记忆性质。说白了就是我只在乎我目前的状态。…

Axes3D绘制3d图不出图解决办法【Python】

运行下面一段代码​: import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D#这里设函数为y3x2x_data [1.0,2.0,3.0]y_data [5.0,8.0,11.0]​def forward(x): return x * w b​def loss(x,y): y_pred forward(x) …

山西省文物局与大势智慧签订战略合作协议

8月24日,由山西省文物局、中国文物信息咨询中心(国家文物局数据中心)主办的数字文博发展论坛在太原举行。武汉大势智慧科技有限公司(后简称“大势智慧”)受邀参与,与来自国内文博数字化领域的专家学者齐聚一堂,围绕“数…

华为数通方向HCIP-DataCom H12-821题库(单选题:241-260)

第241题 ​​LS Request​​报文不包括以下哪一字段? A、通告路由器(Advertising Router) B、链路状态 ID (Link Srate ID) C、数据库描述序列号(Database Dascription Sequence lumber) D、链路状态类型 Link state type) 答案:C 解析: LS Request 报文中包括以下字段…

浅谈下cdn以及防盗链问题

目录 一、什么是cdn 二、使用cdn带来的好处 三、CDN工作原理 四、cdn使用场景 五、流媒体CDN之防盗链问题 一、什么是cdn CDN(Content Delivery Network)是一种分布式网络架构,用于提供高效的内容分发服务。CDN通过将内容缓存在离用户最…

VLDB 2023 | CDSBen: 字节跳动 veDB 数据库存储系统性能测试模型

背景 随着业务爆炸式增长与云原生技术的日渐成熟,大量云原生分布式数据库产品如雨后春笋般涌现,其中一部分主打 OLTP 场景的分布式数据库强调的是从计算-存储分离架构获得弹性收益;对于业界各种计算-存储分离架构的数据库而言,怎么…

3环断链以及断链后的检测方法

3环断链以及断链后的方法 我们在3环注入代码很多时候会选择注入dll,因为纯粹的硬编码不方便写出大量功能,而且不容易维护所以很多时候我们会通过各种方式让我们的dll注入到目标地址空间中,其中有一些方式可以不需要我们自己对dll处理重定位而…

C语言每日一练--Day(15)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:珠玑妙算 两数之和 💓博主csdn个人主页:小小uni…

Docker安装MySQL教程

虽然 docker 安装 mysql 不是一个很好的方案,但是为了个人使用方便,使用 docker 安装 mysql 还是没什么问题的。 本文为了方便,我们直接通过yum方式安装。所以,我们在安装之前需要电脑可以联网,不然我们这种方式是安装…

ASP.NET Core 中的 MVC架构

MVC 架构 MVC架构把 App 按照逻辑分成三层: Controllers,接收 http request,配合 model,通过http response 返回 view,尽量不做别的事Models, 负责业务逻辑,App 的状态,以及数据处理Views&…

数学建模--Seaborn库绘图基础的Python实现

目录 1.绘图数据导入 2. sns.scatterplot绘制散点图 3.sns.barplot绘制条形图 4.sns.lineplot绘制线性图 5.sns.heatmap绘制热力图 6.sns.distplot绘制直方图 7.sns.pairplot绘制散图 8.sns.catplot绘制直方图 9.sns.countplot绘制直方图 10.sns.lmplot绘回归图 1.绘图数…

【C++】原子类型非线程安全

原子类型非线程安全 #include <iostream> #include <thread>int main() {int num 0;int count 100000;std::thread thread1([&](){for(int i 0; i < count; i){num;}});std::thread thread2([&](){for(int i 0; i < count; i){num;}});std::thr…

数学建模--多项式拟合方法Python实现

目录 1.算法设计思路 2.算法核心代码 3.算法效果展示 1.算法设计思路 算法关键步骤:(主要是利用到多项式拟合的库包) 1.将数据进行导入 2.进行曲线拟合返回值为各项系数 3.获得多项式拟合之后的函数表达式 4.将x代入表达式求出对应的y值(这样就能够表示出拟合的差别如何) 5.进…

数学建模--三维图像绘制的Python实现

目录 1.绘制三维坐标轴的方法 2.绘制三维函数的样例1 3.绘制三维函数的样例2 4.绘制三维函数的样例3 5.绘制三维函数的样例4 6.绘制三维函数的样例5 1.绘制三维坐标轴的方法 #%% #1.绘制三维坐标轴的方法 from matplotlib import pyplot as plt from mpl_toolkits.mplot3…

构建知识库:一文解决跨平台科研文献及笔记同步问题

文章目录 需求及目标现有方案调研文献管理方案云存储方案Markdown编辑器Windows端Ipad端 图床管理方案 最终方案操作流程最后 作为一个十级懒人&#xff0c;要么躺着要么在探寻提效工具的路上。 开始打工生涯之后&#xff0c;除了正常工作时间&#xff0c;总想利用业余时间提升…

postgres数据库设置id自增

postgres数据库设置id自增 1. 使用SQL语句建立自增序列 CREATE SEQUENCE id_seq START 1;执行结果 ng) 2. 在设计表中使用该序列 nextval(id_seq::regclass)