CN102073605B - 一种绕过Bio层访问磁盘驱动的存储接口的方法 - Google Patents

一种绕过Bio层访问磁盘驱动的存储接口的方法 Download PDF

Info

Publication number
CN102073605B
CN102073605B CN2010106218261A CN201010621826A CN102073605B CN 102073605 B CN102073605 B CN 102073605B CN 2010106218261 A CN2010106218261 A CN 2010106218261A CN 201010621826 A CN201010621826 A CN 201010621826A CN 102073605 B CN102073605 B CN 102073605B
Authority
CN
China
Prior art keywords
request
scsi
processing queue
request object
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2010106218261A
Other languages
English (en)
Other versions
CN102073605A (zh
Inventor
饶国林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Xinke Anyun Informaiton Technology Co ltd
Shenzhen Anyun Technology Co ltd
Original Assignee
Clouds Creators Information Technology (beijing) Co Ltd
SHENZHEN CHUANGXINKE INFORMATION TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Clouds Creators Information Technology (beijing) Co Ltd, SHENZHEN CHUANGXINKE INFORMATION TECHNOLOGY Co Ltd filed Critical Clouds Creators Information Technology (beijing) Co Ltd
Priority to CN2010106218261A priority Critical patent/CN102073605B/zh
Publication of CN102073605A publication Critical patent/CN102073605A/zh
Application granted granted Critical
Publication of CN102073605B publication Critical patent/CN102073605B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种绕过Bio层访问磁盘驱动的存储接口的方法,包括如下步骤:建立设备模型,每个磁盘设备对应一个磁盘设备对象,并将应用程序发起的IO请求封装成IO请求对象;为每个磁盘设备对象建立两级队列:等待队列和处理队列;等待队列用于依次接收IO请求对象,在处理队列有空位的情况下,将IO请求对象从等待队列中转移到处理队列;创建扫描线程,用于扫描所有磁盘设备对象的处理队列,若处理队列上有IO请求对象,从处理队列中取出IO请求对象向底层提交,IO处理完毕后将该IO请求对象从处理队列中移除。

Description

一种绕过Bio层访问磁盘驱动的存储接口的方法
技术领域
本发明涉及计算机数据存储技术,特别涉及一种绕过Bio层访问磁盘驱动的存储接口的方法。
背景技术
目前常用的磁盘设备的输入输出(IO)接口包括:小型计算机系统接口(SCSI,Small Computer System Interface),串行连接SCSI接口(SAS,SerialAttached SCSI)和光纤通道(FC,Fiber Channel)。各种基于Linux操作系统的磁盘接口驱动程序都须要在Linux块设备层进行注册,通过特定的IO接口来构造和提交IO请求。
Linux 2.6内核正式引入了Bio结构,它是大多数块设备向底层提交IO请求的一种通用描述。通过Bio层来访问磁盘设备的处理流程包括如下步骤:
步骤101:将应用程序提交的IO请求的信息提取出来,构造成Bio结构,Bio结构中记录了IO请求的访问地址和读写数据的长度。一般情况下,在Bio结构中,数据会以分片的形式链接起来,其链首地址记录在Bio结构中。
步骤102:将构造好的Bio结构提交到Linux通用块设备层,根据Bio结构中的请求信息,构造通用的块设备IO请求,将这些块设备IO请求放到所访问磁盘的请求队列上。
步骤103:Linux块设备层通过一系列队列处理函数,将块设备IO请求通过固定的IO接口提交给底层驱动程序。由于基于Linux操作系统的底层驱动都会向Linux通用块设备层注册自己的接口,底层驱动的IO处理函数和块设备层固定的IO接口相衔接,从而顺利接管IO请求的处理。
步骤104:底层驱动程序将IO请求的信息重新封装成与接口协议相关的协议数据单元,并向主机适配器(HBA)提交,最终到达磁盘。
在上面所述的流程中,Bio层会使用多种调度算法对IO进行合并和排序。Linux操作系统以页为单位来管理内存,bio结构也是在此基础之上,以页为单位来组织数据,IO请求所需要的读取或者写入的数据,通常是以页为单位分片链接起来,Bio结构通常只记录链首地址。
Bio结构的引入,能够统一不同块设备的IO接口,正因为要兼顾多种块设备的兼容性要求,通过Bio层的IO请求有着比较复杂的处理流程,给特定情况下的应用带来局限性,同时也在一定程度上带来了性能的损失。
发明内容
本发明提供了一种绕过Bio层访问磁盘驱动的存储接口的方法,避免了Bio层的复杂处理流程,提高IO访问效率。
本发明实施例提出的绕过Bio层访问磁盘驱动的存储接口的方法包括如下步骤:
建立设备模型,每个磁盘设备对应一个磁盘设备对象,并将应用程序发起的IO请求封装成IO请求对象;
为每个磁盘设备对象建立两级队列:等待队列和处理队列;等待队列用于依次接收IO请求对象,在处理队列有空位的情况下,将IO请求对象从等待队列中转移到处理队列;
创建扫描线程,用于扫描所有磁盘设备对象的处理队列,若处理队列上有IO请求对象,从处理队列中取出IO请求对象向底层提交,IO处理完毕后将该IO请求对象从处理队列中移除。
较佳地,所述将应用程序发起的IO请求封装成IO请求对象包括:
使用专用数据包记录IO请求的关键信息;利用所述专用数据包的信息,构造并填充scsi_cmd结构;
所述从处理队列中取出IO请求对象向底层提交包括:使用所述Scsi_cmd结构作为传入参数,通过下层指定接口注册函数提交IO请求。
较佳地,所述关键信息包括:SCSI命令描述块,IO请求的数据传输方向,读写请求的数据传输的DMA地址,数据传输长度和数据请求完成状态。
较佳地,该方法进一步包括:在底层驱动中增加一条分支路径接口注册函数;
所述scsi_cmd结构记录动态内存存取DMA地址,页地址设为空;
所述使用所述scsi_cmd结构作为传入参数,通过下层指定接口注册函数提交IO请求包括:判断所述scsi_cmd结构的页地址是否为空,若是,通过所述分支路径接口注册函数提交IO请求。
较佳地,所述从处理队列中取出IO请求对象向底层提交,IO处理完毕后将该IO请求对象从处理队列中移除包括:
将中断完成函数指针记录到scsi_cmd结构中;
比较返回命令的命令序列号,来判断该返回命令是否属于超时的无效返回,若是,则结束处理;否则,记录SCSI命令完成状态信息,通过所述专用数据包向上层模块返回,并且释放scsi_cmd命令资源;
scsi_cmd的result字段记录了IO完成的状态,根据IO完成的状态,调用相应的函数来向上层返回请求处理结果;
如果所述处理结果为命令正确完成,清除处理队列上的相应IO请求对象,从等待队列中继续取新的IO请求对象转移到处理队列上;如果命令未能正确完成,将根据记录的SCSI命令完成状态信息判断出错原因,进行命令重试。
从以上技术方案可以看出,将应用程序发出的IO请求直接通过底层驱动的注册接口向设备提交,避免了Bio结构的使用也绕开了页分配和页地址的转换过程,从而绕开了Bio层的复杂处理流程,极大的提高了IO效率。本发明提供的这种绕开Bio层访问磁盘驱动的存储接口方法,使用精简的IO路径和资源分配方式,一方面缩短了IO请求的处理时间,另一方面,摆脱了Linux操作系统的限制,通过更加灵活简洁的方式,设计并实现了通用性和移植性更强的新型IO接口。
附图说明
图1为本发明实施例提出的建立通用设备模型和请求队列的流程示意图;
图2为等待队列和处理队列的关系示意图;
图3为本发明实施例提出的绕开Bio层进行IO处理的流程示意图。
具体实施方式
在现有技术中,通过Linux系统Bio层的IO访问都须要将请求挂到块设备请求队列上,在Linux系统中这些请求队列是所有块设备通用的,有着一系列既定的处理方法的集合。但是在很多应用中,需要自行设计请求队列并以不同的方式对其进行队列管理,绕开Bio层,针对不同的队列管理方式,自行构造请求队列,有利于解除这种局限性。
为使本发明方案的技术特征及所达到的技术效果更加清楚,以下参照附图详细叙述本发明的具体实施方式。
为了实现本发明的方法,需要先建立设备模型和请求队列,由于绕开Bio进行请求,队列的管理流程更为简洁,避开了Linux块设备层复杂的队列处理方式。
图1为本发明实施例提出的建立通用设备模型和请求队列的流程示意图。该流程中,定义两种新的数据结构:分别称为磁盘设备对象(kdev,kaos_device)和IO请求对象(kbuf,kaos_buf),磁盘设备对象是每个磁盘设备的抽象,记录了该设备必要的信息;IO请求对象则是对IO请求的抽象,记录了每个IO请求的必要信息。该流程包括如下步骤:
步骤101:建立设备模型,每个磁盘设备对应一个磁盘设备对象,并将应用程序发起的IO请求封装成IO请求对象;
步骤102:为每个磁盘设备对象建立两级队列:等待队列和处理队列;等待队列用于依次接收IO请求对象,在处理队列有空位的情况下,将IO请求对象从等待队列中转移到处理队列。处理队列相当于是缓存池,用来从等待队列中取出IO请求对象缓存起来并向下层接口提交。
步骤103:创建扫描线程,用于扫描所有磁盘设备对象的处理队列,只要处理队列上有IO请求对象,就从处理队列中取出IO请求对象向底层提交,IO处理完毕后将该IO请求对象从处理队列中移除。
图2为等待队列和处理队列的关系示意图。如图2所示,由于等待队列最多可以接收8个IO请求对象,这样一来起到了流量限制的作用,当对处理队列中的IO请求对象完成IO处理,并删除该IO请求对象后,才可以继续缓存等待队列的新的IO请求对象。
图3是本发明实施例提出的绕开Bio层进行IO处理的流程示意图,包括如下步骤:
步骤301:分配sisi_cmd结构。
scsi_cmd结构是底层驱动和Linux块设备层衔接进行IO传输的信息载体,记录了IO请求的相关信息。所述相关信息包括但不限于:SCSI命令描述块(CDB),IO请求的数据传输方向,读写请求的数据传输的DMA地址,数据传输长度,数据请求完成状态等。
步骤302:根据IO请求对象中的IO信息,填充scsi_cmd结构。
scsi_cmd结构中用来进行数据传输的结构称为聚散链表(sg list),由于绕开了Bio层并且避免了页分配,在sg list的链表项中只需要记录动态内存存取(DMA)地址,页地址设为空。
步骤303:将准备好的scsi_cmd结构作为传入参数,提交到队列命令(queuecommand)注册接口处。这里的queuecommand是一个函数指针,底层驱动会向这个指针注册各自的IO处理函数。
步骤304:底层驱动的IO处理函数接管IO处理。
步骤305:IO处理完毕后,调用自行设计的中断完成函数scsi_done来向上层模块传递IO完成信息,并释放相关资源。
步骤306:判断IO是否正确完成,若是,执行步骤307,否则执行步骤308。
步骤307从处理队列中移除kbuf,处理下一个kbuf,返回步骤301;
步骤308:返回错误信息给上层模块,由上层模块决定是进行IO重试还是放弃。
自此,绕开Bio层的IO处理方式通过上下层明确的接口,顺利实现了精简路径的IO处理。
本发明提出的技术方案由于在关键的IO路径上绕开了Linux既有的处理方式,在数据请求封装,提交,管理等方面都使用了自行设计的处理模式,可以不受Linux操作系统的限制,方便移植到各自操作系统中。本发明提供的方法,使得IO处理流程大大简化,应用程序提交的IO经过一次封装,就可以直接提交到底层驱动的接口处,IO性能有很大提升。
具体地,本发明的技术特点如下:
1、在Linux操作系统下,基于Bio层的IO处理有着比较复杂的流程,本发明的目的在于绕开Bio层的复杂流程,利用自行设计的IO存储接口,精简处理过程,实现IO效率提升;
2、自行设计设备模型和队列管理方式,避免使用了Linux块设备层队列处理的复杂调度算法;
3、重新封装IO信息,避免内存页的使用,直接通过DMA方式传输,避免了页地址向DMA地址的转换。
4、少量修改底层驱动,建立分支路径,一方面保证操作系统自身的基于Bio层的IO操作能正常进行,一方面也能保证通过本发明中绕开Bio的存储接口的IO请求能正确提交。极大提高了该存储接口的通用性。
5、自行设计IO完成函数,顺利将改存储接口和上层模块连接,可以方便的一直到各种应用中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (5)

1.一种绕过Bio层访问磁盘驱动的存储接口的方法,其特征在于,包括如下步骤:
建立设备模型,每个磁盘设备对应一个磁盘设备对象,并将应用程序发起的IO请求封装成IO请求对象;
为每个磁盘设备对象建立两级队列:等待队列和处理队列;等待队列用于依次接收IO请求对象,在处理队列有空位的情况下,将IO请求对象从等待队列中转移到处理队列;
创建扫描线程,用于扫描所有磁盘设备对象的处理队列,若处理队列上有IO请求对象,从处理队列中取出IO请求对象向底层提交,IO处理完毕后将该IO请求对象从处理队列中移除。
2.根据权利要求1所述的方法,其特征在于,所述将应用程序发起的IO请求封装成IO请求对象包括:
使用专用数据包记录IO请求的关键信息;利用所述专用数据包的信息,构造并填充scsi_cmd结构;
所述从处理队列中取出IO请求对象向底层提交包括:使用所述scsi_cmd结构作为传入参数,通过下层指定接口注册函数提交IO请求。
3.根据权利要求2所述的方法,其特征在于,所述关键信息包括:SCSI命令描述块,IO请求的数据传输方向,读写请求的数据传输的DMA地址,数据传输长度和数据请求完成状态。
4.根据权利要求2所述的方法,其特征在于,该方法进一步包括:在底层驱动中增加一条分支路径接口注册函数;
所述scsi_cmd结构记录动态内存存取DMA地址,页地址设为空;
所述使用所述scsi_cmd结构作为传入参数,通过下层指定接口注册函数提交IO请求包括:判断所述scsi_cmd结构的页地址是否为空,若是,通过所述分支路径接口注册函数提交IO请求。
5.根据权利要求2、3或4所述的方法,其特征在于,所述从处理队列中取出IO请求对象向底层提交,IO处理完毕后将该IO请求对象从处理队列中移除包括:
将中断完成函数指针记录到scsi_cmd结构中;
比较返回命令的命令序列号,来判断该返回命令是否属于超时的无效返回,若是,则结束处理;否则,记录SCSI命令完成状态信息,通过所述专用数据包向上层模块返回,并且释放scsi_cmd命令资源;
scsi_cmd的result字段记录了IO完成的状态,根据IO完成的状态,调用相应的函数来向上层返回请求处理结果;
如果所述处理结果为命令正确完成,清除处理队列上的相应IO请求对象,从等待队列中继续取新的IO请求对象转移到处理队列上;如果命令未能正确完成,将根据记录的SCSI命令完成状态信息判断出错原因,进行命令重试。
CN2010106218261A 2010-12-27 2010-12-27 一种绕过Bio层访问磁盘驱动的存储接口的方法 Active CN102073605B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010106218261A CN102073605B (zh) 2010-12-27 2010-12-27 一种绕过Bio层访问磁盘驱动的存储接口的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010106218261A CN102073605B (zh) 2010-12-27 2010-12-27 一种绕过Bio层访问磁盘驱动的存储接口的方法

Publications (2)

Publication Number Publication Date
CN102073605A CN102073605A (zh) 2011-05-25
CN102073605B true CN102073605B (zh) 2012-11-21

Family

ID=44032151

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010106218261A Active CN102073605B (zh) 2010-12-27 2010-12-27 一种绕过Bio层访问磁盘驱动的存储接口的方法

Country Status (1)

Country Link
CN (1) CN102073605B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102929801B (zh) * 2012-10-25 2016-06-22 华为技术有限公司 一种用于磁盘寻址的方法和装置
CN102945196B (zh) * 2012-10-29 2015-02-04 杭州华为数字技术有限公司 服务器io诊断的方法及装置
CN103543960A (zh) * 2013-10-12 2014-01-29 创新科存储技术有限公司 一种存储数据的方法
CN104571952B (zh) * 2014-12-25 2017-08-01 华中科技大学 一种分开处理数据与元数据读写请求的方法
CN106933497B (zh) * 2015-12-31 2020-02-21 华为技术有限公司 一种基于sas的管理调度装置、系统及方法
CN105975358B (zh) * 2016-05-03 2019-02-26 深圳市杉岩数据技术有限公司 一种基于scsi设备的容错方法及系统
CN106569901A (zh) * 2016-10-28 2017-04-19 努比亚技术有限公司 终端及访问命令的处理方法
CN106648851A (zh) * 2016-11-07 2017-05-10 郑州云海信息技术有限公司 一种多控存储中io管理的方法和装置
CN109032523B (zh) * 2018-07-26 2021-08-10 郑州云海信息技术有限公司 一种磁盘设备驱动方法、系统、装置及可读存储介质
CN109101331A (zh) * 2018-08-31 2018-12-28 郑州云海信息技术有限公司 一种aio请求处理的方法、系统及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1639699A (zh) * 2002-02-21 2005-07-13 英特尔公司 用于控制存储器访问的方法和装置
CN101162446A (zh) * 2006-10-13 2008-04-16 国际商业机器公司 用于访问信息的方法、存储控制器和信息处理系统
CN101266541A (zh) * 2007-03-16 2008-09-17 武汉海恒信息存储有限责任公司 iSCSI目标器与存储设备的接口方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7840720B2 (en) * 2008-03-31 2010-11-23 International Business Machines Corporation Using priority to determine whether to queue an input/output (I/O) request directed to storage

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1639699A (zh) * 2002-02-21 2005-07-13 英特尔公司 用于控制存储器访问的方法和装置
CN101162446A (zh) * 2006-10-13 2008-04-16 国际商业机器公司 用于访问信息的方法、存储控制器和信息处理系统
CN101266541A (zh) * 2007-03-16 2008-09-17 武汉海恒信息存储有限责任公司 iSCSI目标器与存储设备的接口方法

Also Published As

Publication number Publication date
CN102073605A (zh) 2011-05-25

Similar Documents

Publication Publication Date Title
CN102073605B (zh) 一种绕过Bio层访问磁盘驱动的存储接口的方法
US8504737B2 (en) Serial line protocol for embedded devices
US7228399B2 (en) Control method for storage device controller system, and storage device controller system
KR101035225B1 (ko) 개량 데이터 전송을 위한 제어기 장치 및 방법
CN103838687B (zh) 贮存设备、包括其的计算系统及其数据传送方法
RU2505851C2 (ru) Обеспечение косвенной адресации данных в системе обработки ввода-вывода при фрагментированном списке косвенных адресов данных
JP4917174B2 (ja) 制御装置と通信するように構成されたホスト・コンピュータ・システムにおける入出力(i/o)操作用の入出力処理を容易にするためのコンピュータ・プログラム、装置、および方法
US7707337B2 (en) Object-based storage device with low process load and control method thereof
JP2002520696A (ja) 仮想自動カートリッジシステム
EP2126705A1 (en) Serial advanced technology attachment (sata) and serial attached small computer system interface (scsi) (sas) bridging
CN101840306B (zh) VxWorks操作系统中实现驱动SATA设备的方法和系统
JPS581813B2 (ja) デ−タ処理システム
US20030177330A1 (en) Computer system
US9575669B2 (en) Programmable solid state drive controller and method for scheduling commands utilizing a data structure
US7962676B2 (en) Debugging multi-port bridge system conforming to serial advanced technology attachment (SATA) or serial attached small computer system interface (SCSI) (SAS) standards using idle/scrambled dwords
JP3617631B2 (ja) ストレージ制御装置及びその制御方法
CN101673255A (zh) 通用串行总线主机控制器和通用串行总线主机控制方法
KR100663827B1 (ko) 스토리지 제어 장치 및 스토리지 제어 방법
US20060265523A1 (en) Data transfer circuit and data transfer method
JP5896328B2 (ja) 高性能ahciインターフェイス
US20090300306A1 (en) Data copying method
JP4576323B2 (ja) データ転送装置およびデータ転送方法
JP2001249888A (ja) ファイバチャンネルノードにおける効果的なi/o操作完了のための方法及びシステム
JPH11149455A (ja) メモリディスク共有方法及びその実施装置
CN113806314B (zh) 一种数据存储方法、装置、计算机存储介质及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: SHENZHEN ANYUN INFORMATION TECHNOLOGY CO., LTD.

Free format text: FORMER NAME: SHENZHEN UNITED INFORMATION TECHNOLOGY CO., LTD.

CP03 Change of name, title or address

Address after: 518057 Guangdong city of Shenzhen province Nanshan District Hing Road two No. 6 Shenzhen building B403 - III University Wuhan University

Patentee after: SHENZHEN ANYUN TECHNOLOGY CO.,LTD.

Patentee after: Yunhai Chuangxiang Information Technology (Beijing) Co.,Ltd.

Address before: 518057 Guangdong city of Shenzhen province Nanshan District Hing Road two No. 6 Shenzhen building B403- Wuhan University research III

Patentee before: Shenzhen Chuangxinke Information Technology Co.,Ltd.

Patentee before: Yunhai Chuangxiang Information Technology (Beijing) Co.,Ltd.

ASS Succession or assignment of patent right

Free format text: FORMER OWNER: BEIJING XINKE ANYUN INFORMATION TECHNOLOGY CO., LTD.

Effective date: 20150701

C41 Transfer of patent application or patent right or utility model
C56 Change in the name or address of the patentee
CP01 Change in the name or title of a patent holder

Address after: 518057 Guangdong city of Shenzhen province Nanshan District Hing Road two No. 6 Shenzhen building B403 - III University Wuhan University

Patentee after: SHENZHEN ANYUN TECHNOLOGY CO.,LTD.

Patentee after: BEIJING XINKE ANYUN INFORMAITON TECHNOLOGY CO.,LTD.

Address before: 518057 Guangdong city of Shenzhen province Nanshan District Hing Road two No. 6 Shenzhen building B403 - III University Wuhan University

Patentee before: SHENZHEN ANYUN TECHNOLOGY CO.,LTD.

Patentee before: Yunhai Chuangxiang Information Technology (Beijing) Co.,Ltd.

TR01 Transfer of patent right

Effective date of registration: 20150701

Address after: 518057 Guangdong city of Shenzhen province Nanshan District Hing Road two No. 6 Shenzhen building B403 - III University Wuhan University

Patentee after: SHENZHEN ANYUN TECHNOLOGY CO.,LTD.

Address before: 518057 Guangdong city of Shenzhen province Nanshan District Hing Road two No. 6 Shenzhen building B403 - III University Wuhan University

Patentee before: SHENZHEN ANYUN TECHNOLOGY CO.,LTD.

Patentee before: BEIJING XINKE ANYUN INFORMAITON TECHNOLOGY CO.,LTD.