《一种快速数据读取方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种快速数据读取方法及装置.pdf(14页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 (43)申请公布日 (21)申请号 201410812463.8(22)申请日 2014.12.23G06F 3/06(2006.01)(71)申请人 浙江宇视科技有限公司地址 310051 浙江省杭州市滨江区西兴街道江陵路 88 号 10 幢南座 1-11 层(72)发明人 王丽红 郭永强(74)专利代理机构 北京博思佳知识产权代理有限公司 11415代理人 林祥(54) 发明名称一种快速数据读取方法及装置(57) 摘要本申请提供一种快速数据读取方法及装置,其中该方法包括:接收来自上层应用的数据读命令,根据预设的映射关系确定该数据读命令在RAID阵列上对应的条带,其中所述。
2、RAID阵列包括多个硬盘 ;向操作系统的 IO 调度层下发与条带中每个条块对应的读取子命令 ;获取 IO 调度层返回的各个条块的数据,过滤出其中属于数据条块中的应用数据返回给上层应用。相较于现有技术,本申请在很多顺序读数据的场景下较大幅度地提高的硬盘读写的速度,且有利于延长硬盘的使用寿命。(51)Int.Cl.(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书6页 附图6页(10)申请公布号 CN 104484135 A(43)申请公布日 2015.04.01CN 104484135 A1/1 页21.一种快速数据读取装置,应用于存储设备,其特征在于,该装置包括 :。
3、命令处理单元,接收来自上层应用的数据读命令,根据预设的映射关系确定该数据读命令在 RAID 阵列上对应的条带,其中所述 RAID 阵列包括多个硬盘 ;命令下发单元,向操作系统的 IO 调度层下发与条带中每个条块对应的读取子命令,以便于 IO 调度层能够最大限度地将针对单个硬盘上多个读取子命令进行合并 ;其中每个条带至少包括存有应用数据的数据条块以及存有校验数据的校验条块 ;数据整理单元,获取 IO 调度层返回的各个条块的数据,过滤出其中属于数据条块中的应用数据返回给上层应用。2.如权利要求 1 所述的装置,其特征在于,所述数据整理单元进一步用于在与各个子命令对应的各个条块的数据全部返回后,确定。
4、所有数据条块均未发生读错误时,过滤出其中属于数据条块中的应用数据返回给上层应用。3.如权利要求 2 所述的装置,其特征在于,所述数据整理单元进一步用于在确定与各个子命令对应的各个条块的数据全部返回后且确定数据条块发生读错误时,根据读错误数量判断是否可以恢复出数据条块中的应用数据,如果是,则根据未发生读错的数据条块以及校验条块中的数据使用 RAID 算法恢复出发生读错误的数据条块中的应用数据。4.如权利要求 2 所述的装置,其特征在于,所述数据整理单元进一步用于将各个条块数据被保存在内存中,所述过滤出其中属于数据条块中的应用数据返回给上层应用具体包括 :将校验条块中的校验数据所占用的内存空间释放。
5、掉。5.如权利要求 1 所述的装置,其特征在于,所述硬盘为磁盘类硬盘。6.一种快速数据读取方法,应用于存储设备上,其特征在于,该方法包括 :接收来自上层应用的数据读命令,根据预设的映射关系确定该数据读命令在 RAID 阵列上对应的条带,其中所述 RAID 阵列包括多个硬盘 ;向操作系统的 IO 调度层下发与条带中每个条块对应的读取子命令,以便于 IO 调度层能够最大限度地将针对单个硬盘上多个读取子命令进行合并 ;其中每个条带至少包括存有应用数据的数据条块以及存有校验数据的校验条块 ;获取 IO 调度层返回的各个条块的数据,过滤出其中属于数据条块中的应用数据返回给上层应用。7.如权利要求 6 所。
6、述的方法,其特征在于,还包括 :在与各个子命令对应的各个条块的数据全部返回后,确定所有数据条块均未发生读错误时,过滤出其中属于数据条块中的应用数据返回给上层应用。8.如权利要求 7 所述的方法,其特征在于,还包括 :在确定与各个子命令对应的各个条块的数据全部返回后且确定数据条块发生读错误时,根据读错误数量判断是否可以恢复出数据条块中的应用数据,如果是,则根据未发生读错的数据条块以及校验条块中的数据使用 RAID 算法恢复出发生读错误的数据条块中的应用数据。9.如权利要求 7 所述的方法,其特征在于,其中各个条块数据被保存在内存中,所述过滤出其中属于数据条块中的应用数据返回给上层应用具体包括 :。
7、将校验条块中的校验数据所占用的内存空间释放掉。10.如权利要求 6 所述的方法,其特征在于,所述硬盘为磁盘类硬盘。权 利 要 求 书CN 104484135 A1/6 页3一种快速数据读取方法及装置技术领域0001 本申请涉及存储技术,尤其涉及一种快速数据读取方法及装置。背景技术0002 受惠于计算机硬件技术的发展,计算机的基础硬件,比如处理器以及内存一直基本遵循着摩尔定律在演进。对于目前典型的计算机结构而言,处理器以及内存,乃至显卡等硬件往往并非计算机整体处理速度的瓶颈,计算机整体处理速度的瓶颈一般是硬盘。受限于诸多原因,传统硬盘 ( 比如磁盘类硬盘 ) 读写速度的提升相对比较缓慢。对于小规。
8、模计算系统而言,比如 PC,其可以通过使用 SSD 硬盘来弥补这个缺陷。SSD 硬盘的访问速度远远高于传统硬盘的访问速度,目前有很多高端 PC 都配备了一定容量的 SSD 硬盘。0003 在大规模计算 / 存储系统中,SSD 硬盘受限于容量 / 价格等诸多因素而难以被广泛使用。比如说对于一个在线视频服务提供商而言,其数据中心依然会使用磁盘类硬盘来存储视频。在大规模计算 / 存储系统中,硬盘的使用方式通常是 RAID 阵列的方式。RAID 技术是一种广泛使用的存储技术,其优势非常明显。RAID技术可以将数据并发写入多个硬盘,或者从多个硬盘中并发读出数据,数据读写速度可以大幅度提升。0004 请参。
9、考图 1,RAID 技术广泛应用于数据中心等大规模存储器同中,比如说,普通用户访问 上的某个视频时,优酷的应用服务器可以通过存储网络 ( 比如 FC 网络或 iSCSI 网络 ) 访问到存储设备,存储设备从下挂的 RAID 阵列中获得其所需要的视频数据返回给应用服务器,由应用服务器返回给用户。然而对于 RAID 阵列的数据访问而言,仍然有较大的技术改善空间。发明内容0005 有鉴于此,本申请提供一种快速数据读取装置,应用于存储设备,该装置包括 :0006 命令处理单元,接收来自上层应用的数据读命令,根据预设的映射关系确定该数据读命令在 RAID 阵列上对应的条带,其中所述 RAID 阵列包括。
10、多个硬盘 ;0007 命令下发单元,向操作系统的 IO 调度层下发与条带中每个条块对应的读取子命令,以便于 IO 调度层能够最大限度地将针对单个硬盘上多个读取子命令进行合并 ;其中每个条带至少包括存有应用数据的数据条块以及存有校验数据的校验条块 ;0008 数据整理单元,获取 IO 调度层返回的各个条块的数据,过滤出其中属于数据条块中的应用数据返回给上层应用。0009 本申请还提供一种快速数据读取方法,应用于存储设备上,该方法包括 :0010 接收来自上层应用的数据读命令,根据预设的映射关系确定该数据读命令在 RAID阵列上对应的条带,其中所述 RAID 阵列包括多个硬盘 ;0011 向操作系。
11、统的 IO 调度层下发与条带中每个条块对应的读取子命令,以便于 IO 调度层能够最大限度地将针对单个硬盘上多个读取子命令进行合并 ;其中每个条带至少包括存有应用数据的数据条块以及存有校验数据的校验条块 ;说 明 书CN 104484135 A2/6 页40012 获取 IO 调度层返回的各个条块的数据,过滤出其中属于数据条块中的应用数据返回给上层应用。0013 相较于现有技术,本申请在很多顺序读数据的场景下较大幅度低提高的硬盘读写的速度,且有利于延长硬盘的使用寿命。附图说明0014 图 1 是一个典型的用户通过网络访问 RAID 阵列上数据的过程。0015 图 2 是一个典型的 RAID 阵列。
12、中条带的结构示意图。0016 图 3 是一个典型的条带中数据分布示意图。0017 图 4A 是一个例子中存储设备的硬件结构图。0018 图 4B 是一个例子中快速数据读取装置的逻辑结构图。0019 图 5 是一个例子中快速数据读取方法的处理流程图。0020 图 6 是另一个例子中快速数据读取方法的处理流程图。0021 图 7 是一个例子中快速数据读取方法在数据合并上的效果对比图。0022 图 8A 是一个测试例子中现有技术的数据读取效果示意图。0023 图 8B 是图 8A 同一场景下本申请数据读取效果示意图。0024 图 9A 是另一个测试例子中现有技术的数据读取效果示意图。0025 图 9。
13、B 是图 9A 同一场景下本申请数据读取效果示意图。具体实施方式0026 请参考图1以及图2,存储设备下挂有存储空间巨大的RAID阵列,其可以同时为多个位于前端的主机 ( 比如各种应用服务器 ) 提供存储服务。从服务的形式上来说,存储设备会给主机提供逻辑意义上的存储资源,其对于主机而言就好像主机本地的一个逻辑盘一样。主机上运行的各种上层应用程序都可以访问逻辑盘上的数据。0027 请参考图 2,以顺序读数据为例,对于主机的应用程序而言,其读取逻辑盘的数据是依次读取的,比如说读取图 2 中 D0 到 D15 这 16 个地址连续的数据块中的数据。然而这些数据事实上是存放在 RAID 阵列上的,读取。
14、这些数据要经过存储设备的处理。存储设备通常保存着逻辑盘与物理硬盘之间的地址映射关系,也就是说针对逻辑盘的访问可以映射到针对物理硬盘的访问。主机应用程序访问了一段连续逻辑地址空间中的数据,但是存储设备读取的却并非是连续物理地址空间中的数据。0028 在 RAID 阵列中,数据是按照条带 (Stripe) 的方式组织的,条块 (Block) 是阵列中一块物理硬盘上的一些连续扇区,是组成阵列的基本单元,多个条块 ( 通常位于不同硬盘同一位置 ) 组成阵列的条带。假设一个 3+1 的 RAID5 阵列,条块大小为 32KB,则条带大小为3*32KB 96KB,其中 3 个条块为数据条块,存放有用的应用。
15、数据 ( 也称为“业务数据”),剩余一个校验条块中存储本条带的校验数据,并非真实的业务数据,故不计入条带大小。0029 在 RAID 阵列处于正常状态 ( 具有冗余性 ) 时,针对读业务,由于没有故障硬盘,不需要读校验条块数据,直接读取命中的数据条块,读取成功后,将命令返回成功。在 RAID 阵列某一个硬盘故障之后,此时阵列处于降级状态,校验数据将发挥作用。此时针对读业务,如果有一个需要读取的数据条块位于故障硬盘无法读取,那么需要读出同一条带中校验条说 明 书CN 104484135 A3/6 页5块和其它数据条块中的数据,使用这些数据按照预定 RAID 算法 ( 比如异或算法 ) 计算出故障。
16、条块的数据,然后返回成功。对于一些级别更高的 RAID 阵列,比如 RAID6 阵列,处理更为复杂一些,但基本原理相同,不再赘述。0030 从上一段的描述可以看出,对于现有的 RAID 阵列的读命令 ( 读 IO) 而言,阵列的校验条块中的校验数据仅在需要恢复故障数据条块时才会读取。如果条带的每个条块都正常,则读数据时并不需要读取校验条块,直接读取命令对应的数据条块即可。请参考图3,假设一个阵列是2+1的RAID5阵列,对于阵列的顺序读数据业务而言,比如读取视频数据这样的业务,假设目前阵列状态正常,校验条块和数据条块的分布如图 3 所示。顺序读数据业务会连续读取阵列中所有数据条块,跳过所有校验。
17、条块。从单块硬盘的角度看,是每隔一个条块(校验条块)可以读取两个连续条块(数据条块),即所有的需要读取的数据在硬盘上的存储地址空间并不是连续的。0031 这种地址空间的不连续对于存储设备操作系统的 IO 调度层面的利用效率而言是不利的。以存储设备上应用最为广泛的 Linux 系统为例,Linux 系统的块 IO 子系统 (IO 调度层面 ) 有 IO 调度机制,该机制会对下发过来的读命令 ( 本例中的读取子命令 ) 进行排序和合并,只有地址连续的多个读命令 ( 读 IO) 才能合并起来变成一个读 IO。这里的地址连续通常是指一个命令的首地址和另一个命令的尾地址在物理硬盘上的 lba 地址刚好是。
18、连续的。此时对照图 3 来看,由于存储设备会通过解析确定所有需要读取的数据条块,然后相应下发多个读 IO,此时多个读 IO 在块 IO 子系统调度时,单次可以合并的 IO 数目就非常有限。以图 3 为例,一次最多只能合并两个读 IO,即对硬盘来说,将两次读取操作合并为一次读取操作。0032 请参考图 4A 以及图 4B,在一个例子中,本申请为存储设备提供一种快速数据读取方案。其中存储设备可以包括处理器、内存、非易失性存储器 ( 比如硬盘 ) 以及内部总线,当然存储设备在实际使用时一般都会通过接口挂接一个或者多个 RAID 阵列。上述方案可以通过计算机软件实现,也可以通过硬件或逻辑器件实现。以软。
19、件实现为例,所述处理器可以将相应的计算机程序指令从非易失性存储器读入内存中然后运行,在逻辑意义上形成快速数据读取装置。在逻辑层面,该快速数据读取装置包括 :命令处理单元、命令下发单元以及数据整理单元。请参考图5,该装置在图像处理设备上运行的过程中,执行如下处理方法。0033 步骤 501,命令处理单元,接收来自上层应用的数据读命令,根据预设的映射关系确定该数据读命令在 RAID 阵列上对应的条带,其中所述 RAID 阵列包括多个硬盘 ;0034 步骤 502,命令下发单元,向操作系统的 IO 调度层下发与条带中每个条块对应的读取子命令,以便于 IO 调度层能够最大限度地将针对单个硬盘上多个读取。
20、子命令进行合并 ;其中每个条带至少包括存有应用数据的数据条块以及存有校验数据的校验条块 ;0035 步骤 503,数据整理单元,获取 IO 调度层返回的各个条块的数据,过滤出其中属于数据条块中的应用数据返回给上层应用。0036 以下结合更为详细的例子来介绍上述方案的优势。RAID阵列上存储的数据通常隶属于各种上层应用,当然这些上层应用只能“看到”数据存储在逻辑盘上。上层应用对数据的读取一般包括两种类型,一种类型是顺序读取,另一种是随机读取。本申请的方案在顺序读取上具有较大的技术优势。视频等多媒体应用通常是典型的顺序读取数据的应用,比如说视频服务器读取为用户终端读取视频数据,这些视频数据在逻辑盘。
21、上通常都是顺序存放说 明 书CN 104484135 A4/6 页6的。但如前所述,在物理硬盘上,包括视频数据在内的各种应用数据通常却不是顺序存放。0037 请参考图 6,如前所述上层应用下发读命令之后,存储设备会根据预先创建的映射关系来确定当前读取的逻辑地址空间所对应的物理地址空间。这种映射关系是存储设备向主机提供逻辑盘时预先创建好的。假设上层应用要读写的逻辑地址是 101-250 长度为 150的一段数据。值得注意的是,这里长度大小仅仅为方便理解本发明所做出的示例。请参考图7,假设这段长度为 150 的数据分别映射在 D0 到 D14 这 15 个数据条块中。按照目前的处理方式,存储设备会。
22、根据上述映射关系确定出 D0 到 D14 这 15 个数据条块,然后下发 15 个对应的读取子命令到自身操作系统的 IO 调度层面。与传统技术不同的是,本申请根据映射关系确定出对应的条带是 Stripe0 到 Stripe5,此时存储设备生成的子命令除了包括对应 D0到 D14 这 15 个数据条块的子命令,还包括对应于 P0 到 P4 这 5 个校验条块中的校验数据。0038 相对于现有技术而言,此时存储设备需要读取的数据长度增加了 50,增幅约为33.3,下发给操作系统 IO 调度层面的子命令数量也增加了约 33.3,而且这些额外读取的数据是校验数据,对于上层应用而言是没有意义的。按照一般。
23、的技术思路来看,多读取数据无疑会降低响应速度。然而本申请充分考虑了 IO 调度机制的实现,通过增加读取长度来使得其读取速度更快。请参考图 7 所示,在本申请中,对于硬盘 1 的读取而言,操作系统 IO调度层面会针对 D0、D3、D6、P3、D12 这 5 个条块中数据进行处理,由于 D0、D3、D6、P3、D12 这5 个条块的地址空间是连续的,因此操作系统 IO 调度层面可以将其合并为一个读命令 ( 起始地址为 1,结束地址为 50),而针对其他硬盘处理是一样的。这也就是说经过操作系统 IO调度层面的处理之后,20 个读取子命令被合并为 4 个读命令,经过 SCSI 等处理之后通过驱动分别下。
24、发给 4 个硬盘。请继续参考图 7 横向虚线以下部分,反观现有技术,由于其并没有读取校验条块的读取子命令,最终经过操作系统 IO 调度层面处理之后,针对单个硬盘而言,将会下发 2 个读命令,也就是说操作系统 IO 调度层面下发到 4 个硬盘的读命令为 8 个。0039 对于硬盘而言,尤其是磁盘类硬盘而言,读取数据量的大小固然会影响到响应速度,而读数据的次数也对响应速度有较大的影响。对于磁盘类硬盘来说,其是通过马达带动磁头转动到盘面上相应位置来读取数据的,磁头不断变化起始位置事实上也会对读取速度有很大影响。从以上描述可以看出,虽然读取数据量有了一定幅度的增加,针对硬盘的读命令显著减少,因此整体的。
25、响应速度却有相当不错的提升。此外,磁盘类硬盘的寿命与读写次数有关,读命令越多,则硬盘的使用寿命越短。因此本申请不但可以提升读取数据的响应速度,还可以提升硬盘的使用寿命。0040 请继续参考图 6,在读命令下发之后,数据被读取上来,此时驱动可以针对错误情况进行一些处理,具体可以参考现有技术。接下来经过驱动到达操作系统 IO 调度层面。由于IO调度层面保存了子命令的合并关系,因此可以确定出哪些子命令获得了返回(即获得返回的条块中的数据 ),如果没有全部返回则可以继续等待。子命令的返回的情况分为两种,一种是返回成功,一种是返回错误。当所有子命令都返回之后,此时可以判断是否存在读错误。如果存在数据条块。
26、读错误,则可以进入恢复处理。如果没有,则可以在步骤 203 进行过滤等处理之后结束。0041 在恢复处理过程中,并非所有读错误都能恢复,这取决于错误数量以及 RAID 的级别,其基本原则是 :若错误数量不大于一个条带中校验条块的数量,则根据 RAID 算法可以将存在读错误的数据条块中的数据恢复出来。以 RAID5 为例,在一个数据条块读取失败的说 明 书CN 104484135 A5/6 页7情况下 :此时可以使用读取上来的校验条块和其它读取成功数据条块中的数据进行异或校验,恢复出读错误的数据条块的应用数据。0042 对于步骤 203 的过滤而言,其实现方式可以有多种,一种速度较快的方式是通过。
27、管理内存空间来实现。在所有子命令都返回后,如果数据条块都没有发生读错误 ( 也称为“读失败”) 的情况,装载校验条块数据的内存空间将被释放,读命令返回成功给上层应用。如果发生一个数据条块读取失败的情况,使用读上来的校验条块数据,和其它读取成功的数据条块数据进行异或校验,恢复出读取失败条块的数据,命令返回成功。这样处理的好处是 :无需等到数据条块发生读取失败后,才下发读取校验条块的子命令,缩短数据恢复及命令返回时间。也就是说额外读取的校验条块中的校验数据,在出现数据条块读错误时可以立刻发挥作用,进一步提升数据读取速度。0043 以下通过几组数据来说明本申请在技术上的显著优势。0044 测试一 :。
28、创建2+1的RAID5阵列,选用当前主流硬盘,RAID条块大小为4KB,阵列空间为 500GB,进行大压力顺序读取业务测试。查询物理磁盘性能统计信息 (iostat 命令 ),采用传统技术获得的结果可以参考图 8A。全部阵列空间读取完成耗时约 95 分钟。而采用本申请技术方案时,查询物理硬盘性能统计信息,请参考图 8B 的结果,可以看出读命令合并 IO 个数 (rrqm/s) 和性能 (rsec/s) 明显优于修改前。全部阵列空间读取完成耗时约 84分钟。读取速度明显提升。针对图 8A 以及图 8B 中涉及的参数说明如下,供本领域普通技术人员参考。0045 rrqm/s: 每秒进行 merge。
29、 的读操作数目,即 delta(rmerge)/s0046 wrqm/s: 每秒进行 merge 的写操作数目,即 delta(wmerge)/s0047 r/s: 每秒完成的读 I/O 设备次数,即 delta(rio)/s0048 w/s: 每秒完成的写 I/O 设备次数,即 delta(wio)/s0049 rsec/s: 每秒读扇区数,即 delta(rsect)/s0050 wsec/s: 每秒写扇区数,即 delta(wsect)/s0051 rkB/s: 每秒读 K 字节数,是 rsect/s 的一半,因为每扇区大小为 512 字节。0052 wkB/s: 每秒写 K 字节数,是。
30、 wsect/s 的一半。0053 avgrq-sz: 平 均 每 次 设 备 I/O 操 作 的 数 据 大 小,delta(rsect+wsect)/delta(rio+wio)0054 avgqu-sz: 平均 I/O 队列长度,即 delta(aveq)/s/1000(aveq 的单位为毫秒 )0055 await: 平均每次设备 I/O 操作的等待时间 ( 毫秒 ),即 delta(ruse+wuse)/delta(rio+wio)0056 svctm: 平 均 每 次 设 备 I/O 操 作 的 服 务 时 间 ( 毫 秒 ),即 delta(use)/delta(rio+wio)。
31、0057 unitl :表征硬盘的使用率。0058 测试二 :创建 2+1 的 RAID5 阵列,选用当前主流硬盘,RAID 条块大小为 4KB,阵列空间为 500GB,进行固定顺序读取业务测试,测试结果请参考图 9A 与图 9B 的对比,显然图9B 中本申请技术方案的测试结果显示出的数据读取性能优势更加明显,且硬盘使用率率更低,有助于提升硬盘的使用寿命。0059 以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精说 明 书CN 104484135 A6/6 页8神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。说 明 书CN 104484135 A1/6 页9图1图2说 明 书 附 图CN 104484135 A2/6 页10图3图 4A说 明 书 附 图CN 104484135 A。