IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> SCSI代码分析(4)SCSI层IO下发和完成 -> 正文阅读

[系统运维]SCSI代码分析(4)SCSI层IO下发和完成

????????SCSI层的IO大体上分为两种,一种为从BLOCK下发的IO称为普通IO(通常数据的读写为此类),另一种为从当前SCSI下发的IO,如前面介绍的扫盘IO,称为passthrough IO。本节分别介绍这两种IO的下发和完成。

1. SCSI层数据的组织

????????在BLOCK层的数据是由bio表示,其中bi_sectors表示数据在硬盘中的位置和长度,而结构体bio_vec[]表示数据在内存中的位置和长度(见BLOCK层代码分析(1)数据的组织BIO)。

????????到BLOCK层数据的组织由SCSI命令和SGL聚散链表共同决定。其中SCSI命令指明数据在硬盘中的位置和长度,SGL聚散链表则指明数据在内存中的位置和长度。

????????SCSI命令READ和WRITE定义如下,其中LBA表示数据在硬盘中位置,transfer length表示为数据的长度。

?????????

SGL聚散链表表示数据在内存中的位置和长度,详细见BLOCK层代码分析(6)之SGL聚散列表

2. 普通IO的下发和完成

????????从BLOCK层下发的IO依次经过SCSI层/LIBSAS层/LLDD层,最终将IO下发给硬件,在各层下发的同时会注册IO完成函数。在硬件处理完数据后,一般会产生中断通知LLDD层(当然也可以轮询方式,如IO_URING就是采用轮询),然后依次调用LLDD层/LIBSAS层/SCSI层的IO完成函数,将IO完成返回到上层。简单过程如下:

3. passthrough IO的下发和完成

????????除了从BLOCK层下发的IO外,在SCSI层还存在”内部IO”,即从SCSI层下发的,硬盘的识别过程中下发的IO如INQUIRY等,都是这种IO,称为passthrough IO.

????????对于passthrough IO, 在SCSI层会获取request和tag,若存在数据时,将数据进行映射,然后将数据经过BLOCK层而下发,后面的步骤与普通IO的下发和完成类似,只是最终IO会在SCSI完成,而不会像普通IO那样传递给BLOCK层。

????????Passthrough IO下发过程和完成过程如下:

(1)通过函数blk_get_request()获取空闲的request;

(2)若IO存在数据时,分配bio,将数据map到bio中(若原来数据不对齐或bounce,需要分配page,必要时并将数据拷贝到page),并将bio添加到request;

(3)然后将request下发到IO 调度器中;

(4)若为poll方式,轮询等待IO完成;若非poll方式,等待IO完成;

(5)将IO返回结果和sense返回,完成IO;

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:26:30  更:2021-12-03 13:27:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:28:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码