一种存储数据的方法

文档序号:6515228阅读:167来源:国知局
一种存储数据的方法
【专利摘要】一种存储数据的方法,所述方法包括:将构造的小型计算机系统接口SCSI请求加入请求队列;根据所述SCSI请求构造SCSI命令,然后提交底层驱动;由SCSI命令从SCSI存储设备中存储数据后,SCSI层完成输入输出IO。应用本发明实施例后,能够避免IO的延迟,从而提高整体工作性能。
【专利说明】一种存储数据的方法
【技术领域】
[0001]本申请涉及信息存储【技术领域】,更具体地,涉及一种存储数据的方法。
【背景技术】
[0002]目前在Linux系统中,通过在内核构造BIO请求,能够异步提交用户态数据。BIO请求是通用块层向底层提交IO请求的一种通用描述,BIO请求的引入,能够统一不同块设备的IO接口。因为需要兼顾各种块设备的兼容性要求,通过BIO层的IO请求有着非常复杂的处理流程。BIO层会使用Ν00Ρ,CFQ等多种调度算法对IO进行合并和排序,并将IO提交给专门的处理线程进行下发。这样,就存在线程切换和调度算法的开销,导致cpu占用率大大上升,并加大了 IO延迟。
[0003]参见附图1是基于Iinux系统的AIO的IO流程示意图。
[0004]101、用户提交异步输入/输出ΑΙ0。
[0005]102、在AIO内核接口构造块的输入和输出(BIO)请求。bio是Iinux内核中通用块层的一个核心数据结构,描述了块设备的I/o操作,它联系了内存缓冲区与块设备。
[0006]103、将BIO请求加入请求队列。
[0007]104、调度请求队列中BIO请求。
[0008]105、根据BIO请求构造SCSI命令提交至底层驱动。
[0009]106、SCSI层存储设备通过SCSI命令存储数据,SCSI层完成10。
[0010]107、判断IO是否正确返回。
[0011]108、若IO正确返回,则完成10。
[0012]109、若块层处理错误,执行110。
[0013]110、IO需要重试,则执行103 ;10不需要重试,则执行108。
[0014]可见,在102-105中先将BIO请求排队,然后由BIO请求构造SCIS请求。在BIO请求排队的过程耗费时间,相应地增大了 IO延迟。此外,107-110中需要进行通用块层的错误处理。而若在通用块层的IO返回时,已经过了错误处理,并且隐藏具体的错误码从而导致IO延迟返回。比如说如果已经组建raid程序,那么一个IO错误完全可以通过校验算法来纠正,而通用块层的错误处理通常会导致IO延迟返回(最大可达180秒)。
[0015]某些操作对于延迟很敏感,比如对文件系统元数据的操作,以及说流媒体应用或者。若再经过通用块层提交10,则会带来性能的损失。

【发明内容】

[0016]本发明实施例提出一种存储数据方法,能够避免IO的延迟,从而提高整体工作性倉泛。
[0017]本发明实施例的技术方案如下:
[0018]一种存储数据的方法,所述方法包括:
[0019]将构造的小型计算机系统接口 SCSI请求加入请求队列;[0020]根据所述SCSI请求构造SCSI命令,然后提交底层驱动;
[0021]由SCSI命令从SCSI存储设备中存储数据后,SCSI层完成输入输出10。
[0022]所述在SCSI层完成IO后进一步包括:进行错误处理,所述错误处理包括SCSI命令中对应的错误码。
[0023]从上述技术方案中可以看出,在本发明实施例中将构造的SCSI请求加入请求队列;由于根据所述SCSI请求构造SCSI命令,然后提交底层驱动。由SCSI命令从SCSI存储设备中存储数据后,SCSI层完成10。因此无需进行排队及调度就可以将SCSI命令直接提交至底层驱动,且减少不必要的错误处理,能够避免IO的延迟,从而提高整体工作性能。
【专利附图】

【附图说明】
[0024]图1为基于Iinux系统的AIO的IO流程不意图;
[0025]图2为存储数据的方法流程示意图。
【具体实施方式】
[0026]为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。
[0027]在本发明实施例中,以供SCSI作为用户态的请求,直接向下操作SCSI底层设备。绕开块I/o子系统层,避免使用bio结构。因此无需进行排队及调度就可以将SCSI命令直接提交至底层驱动,且减少不必要的错误处理,能够避免IO的延迟,从而提高整体工作性倉泛。
[0028]参见附图2是存储数据的方法流程示意图,具体包括以下步骤:
[0029]201、用户提交 10。
[0030]202、内核模块代理构造SCSI请求。
[0031]203、将SCSI请求加入请求队列。
[0032]204、根据SCSI请求构造SCSI命令提交至底层驱动。
[0033]205、SCSI层存储设备通过SCSI命令存储数据,SCSI层完成10。
[0034]2O6、完成 IO 过程。
[0035]此外,在完成IO过程后,可以选择进行错误处理。此处,需要注意的是:上述错误处理不同于现有技术当中的错误处理。
[0036]由于通用块层的错误码比较简单,不能描述具体的错误类型。而SCSI命令的错误码则多得多,利用在完成IO过程后的错误处理,上层应用可以针对具体的错误,来制定相应的策略。
[0037]比如说未处理的读错误,可以通过重写来修复。但是写的内容,就必须让上层应用通过raid算法,或者文件系统的校验来计算出来,底层无法处理。
[0038]以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种存储数据的方法,其特征在于,所述方法包括: 将构造的小型计算机系统接口 SCSI请求加入请求队列; 根据所述SCSI请求构造SCSI命令,然后提交底层驱动; 由SCSI命令从SCSI存储设备中存储数据后,SCSI层完成输入输出10。
2.根据权利要求1所述存储数据的方法,其特征在于,所述在SCSI层完成IO后进一步包括:进行错误处理,所述错误处理包括SCSI命令中对应的错误码。
【文档编号】G06F3/06GK103543960SQ201310475960
【公开日】2014年1月29日 申请日期:2013年10月12日 优先权日:2013年10月12日
【发明者】陈国民 申请人:创新科存储技术有限公司, 创新科存储技术(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1