加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

设备中的IO路径及调度策略

发布时间:2021-04-29 15:16:58 所属栏目:外闻 来源:互联网
导读:过submit_bio提交IO之后,请求就进入了通用块层。通用块层会对IO进行一些预处理的动作,其目的是为了保证请求能够更加合理的发送到底层的磁盘设备,尽量保证性能***。这里面比较重要的就是IO调度模块。大家可能都听说过CFQ,除此之前还有DeadLine和Noop等,

过submit_bio提交IO之后,请求就进入了通用块层。通用块层会对IO进行一些预处理的动作,其目的是为了保证请求能够更加合理的发送到底层的磁盘设备,尽量保证性能***。这里面比较重要的就是IO调度模块。大家可能都听说过CFQ,除此之前还有DeadLine和Noop等,这些都是磁盘的调度算法。其中CFQ调度算法用的最多。

如果忽略块设备的层叠结构和各种映射,简化的结构大概有3层,如图1所示。这里的3层并非都是软件,还包含硬件。通用块层就不用多说了,这里主要完成IO的合并和调度等操作。其下是驱动层,驱动层是硬件的驱动程序,用于将IO请求转换为对硬件寄存器的操作(注:不同的块设备又有差异,必然iSCSI设备是不会有寄存器操作的)。物理设备不同该驱动层的程序就不同,比如对于SAS直连的磁盘,该驱动层的程序就是SAS驱动,而如果是FC-HBA卡连接的FC-SAN,那么这个驱动层就是FC驱动(比如Qlogic的驱动)。面一层是设备层,设备层通常是一个硬件设备。这里的硬件种类繁多,比如SAS卡、SATA卡、FC-HBA卡或者iSCSI-HBA卡等等。但有的时候又可能并不是硬件设备,比如对于iSCSI来说,该层可能是通过软件模拟的一个设备层,而其请求则是通过网卡发送到目标器端。

主要数据结构及流程

绝大多数程序都是由数据结构和算法2部分内容组成的,数据结构相当于程序的骨架,而算法则是程序的筋和肉。通过算法将数据结构关联起来,从而形成一个完整的整体。人类认识问题的规律是从具体到抽象,从简单到复杂,因此我们先从数据结构开始。理解了数据关键的数据结构,那我们就能更加容易的理解块设备IO的整个逻辑。

在块设备IO中最为关键的数据结构是request_queue,也就是请求队列。该数据结构的简图如图2所示,这个数据结构本身非常复杂,我们这里进行了简化,只保留了部分关键的成员。如图彩色部分是2个函数指针,分别用于接收请求和处理请求。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读