《写数据的方法及装置.pdf》由会员分享,可在线阅读,更多相关《写数据的方法及装置.pdf(17页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103645995 A (43)申请公布日 2014.03.19 CN 103645995 A (21)申请号 201310649068.8 (22)申请日 2013.12.04 G06F 12/08(2006.01) (71)申请人 华为技术有限公司 地址 518129 广东省深圳市龙岗区坂田华为 总部办公楼 (72)发明人 董浩 姚建业 (74)专利代理机构 北京林达刘知识产权代理事 务所 ( 普通合伙 ) 11277 代理人 刘新宇 (54) 发明名称 写数据的方法及装置 (57) 摘要 本发明涉及写数据的方法及装置, 包括 : 确 定数据块中第一子数据块集合的。
2、个数, 第一子数 据块集合中的每个子数据块存储的数据均为脏数 据 ; 当第一子数据块集合的个数超过阈值时, 确 定第二子数据块集合, 第二子数据块集合是第一 个子数据块存储的数据和最后一个子数据块存储 的数据均为脏数据的连续子数据块的集合 ; 当第 二子数据块集合的个数不超过阈值时, 为数据块 内的各个第二子数据块集合分别生成第一写数据 请求, 将第一写数据请求发送存储器 ; 当第二子 数据块集合的个数超过阈值时, 为数据块生成一 个第二写数据请求, 将第二写数据请求发送存储 器。根据本发明实施例的写数据的方法及装置 在写入时无需从磁盘上读取数据到缓存, 减少对 RAID 的读写压力。 (51。
3、)Int.Cl. 权利要求书 2 页 说明书 9 页 附图 5 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书9页 附图5页 (10)申请公布号 CN 103645995 A CN 103645995 A 1/2 页 2 1. 一种写数据的方法, 所述方法应用于存储设备中, 所述存储设备包括缓存和存储器, 所述缓存包含多个数据块, 每个数据块包含多个子数据块, 其特征在于, 所述方法包括 : 确定所述数据块中包含的第一子数据块集合的个数, 所述第一子数据块集合中的每个 子数据块存储的数据均为脏数据 ; 当所述第一子数据块集合的个数超过预定阈值时, 确定第。
4、二子数据块集合, 所述第二 子数据块集合是第一个子数据块存储的数据和最后一个子数据块存储的数据均为脏数据 的连续子数据块的集合 ; 当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的各个第二子数 据块集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述存储器 ; 当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第二写数据 请求, 并将所述第二写数据请求发送给所述存储器。 2. 根据权利要求 1 所述的写数据的方法, 其特征在于, 在所述为所述数据块生成一个 第二写数据请求之前, 还包括 : 生成读数据请求, 所述读数据请求用于读取所述存储器中与所述数据。
5、块对应的分条内 的所有数据 ; 从所述数据块对应的分条内的所有数据中提取与所述数据块中空的子数据块对应的 数据 ; 将所述对应的数据写入所述空的子数据块内。 3. 根据权利要求 2 所述的写数据的方法, 其特征在于, 还包括 : 获取对所述分条进行数据读取的第一平均时间 ; 获取对所述分条内的一个分条单元进行数据读取的第二平均时间 ; 根据所述第一平均时间与所述第二平均时间, 计算所述预定阈值。 4. 根据权利要求 3 所述的写数据的方法, 其特征在于, 根据所述第一平均时间与所述 第二平均时间, 计算所述预定阈值包括 : 计算所述第一平均时间除以所述第二平均时间的商 ; 将所得到的商与预设的。
6、时延系数相乘, 所述预定阈值等于所述相乘获得的乘积。 5. 一种写数据的装置, 所述装置应用于存储设备中, 所述存储设备包括缓存和存储器, 所述缓存包含多个数据块, 每个数据块包含多个子数据块, 其特征在于, 所述装置包括 : 第一确定模块, 用于确定所述数据块中包含的第一子数据块集合的个数, 所述第一子 数据块集合中的每个子数据块存储的数据均为脏数据 ; 第一判断模块, 与所述第一确定模块连接, 用于判断所述第一子数据块集合的个数是 否超过预定阈值 ; 第二确定模块, 与所述第一判断模块连接, 用于当所述第一子数据块集合的个数超过 预定阈值时, 确定第二子数据块集合, 所述第二子数据块集合是。
7、第一个子数据块存储的数 据和最后一个子数据块存储的数据均为脏数据的连续子数据块的集合 ; 第二判断模块, 与所述第二确定模块连接, 用于判断所述第二子数据块集合的个数是 否超过预定阈值 ; 写入模块, 与所述第二判断模块连接, 用于 当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的各个第二子数 权 利 要 求 书 CN 103645995 A 2 2/2 页 3 据块集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述存储器 ; 当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第二写数据 请求, 并将所述第二写数据请求发送给所述存储器。 6. 根据权。
8、利要求 5 所述的写数据的装置, 其特征在于, 所述写入模块被配置为 : 生成读数据请求, 所述读数据请求用于读取所述存储器中与所述数据块对应的分条内 的所有数据 ; 从所述数据块对应的分条内的所有数据中提取与所述数据块中空的子数据块对应的 数据 ; 将所述对应的数据写入所述空的子数据块内。 7. 根据权利要求 6 所述的写数据的装置, 其特征在于, 还包括 : 计算模块, 与所述第一判断模块及所述第二判断模块连接, 用于获取对所述分条进行 数据读取的第一平均时间 ; 获取对所述分条内的一个分条单元进行数据读取的第二平均时 间 ; 根据所述第一平均时间与所述第二平均时间, 计算所述预定阈值。 。
9、8. 根据权利要求 7 所述的写数据的装置, 其特征在于, 所述计算模块被配置为 : 计算所述第一平均时间除以所述第二平均时间的商 ; 将所得到的商与预设的时延系数相乘, 所述预定阈值等于所述相乘获得的乘积。 权 利 要 求 书 CN 103645995 A 3 1/9 页 4 写数据的方法及装置 技术领域 0001 本发明涉及存储领域, 尤其涉及一种写数据的方法及装置。 背景技术 0002 高 速 缓 存 (英 文 : cache)和 廉 价 冗 余 磁 盘 阵 列 (英 文 : Redundant Array of Inexpensive Drivers, 缩写 : RAID) 是存储系统。
10、中的两个重要模块。其中, cache 作为存储 系统的性能加速器, 能很好的屏蔽阵列时延, 使主机输入输出 (英文 : Input and Output, 缩 写 : IO) 更友好的访问硬盘。RAID 的原理是通过将多个相对便宜的硬盘组合起来, 成为一个 硬盘阵列组, 使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘, 并且配合数据分散排列 的设计, 提升数据的安全性。根据选择的版本不同, RAID 与单颗硬盘相比, 不仅能够增大存 储容量, 还能够增强数据集成度以及数据的容错能力。另外, 磁盘阵列对于电脑来说, 看起 来就像一个单独的硬盘或逻辑存储单元。 0003 存储系统接收主机写 IO。
11、 后, 会先写入 cache 再下发给 RAID。以 RAID5 为例, RAID 包括多个分条 (英文 : stripe) , 本发明实施例中描述的分条, 是指并行写入构建 RAID 的各 个存储器上的数据块的集合, 每个分条包括多个分条单元, 其中, 每个分条单元的大小相 同, 且同一个分条上的分条单元位于各个存储器中的偏移位置相同。分条上的分条单元也 称为条带 (英文 : strip) , 条带是一个盘区上的连续地址块。 在磁盘阵列中, 控制器通常采用 条带将虚拟磁盘的块地址 (英文 : block addresses) 映射到成员盘的块地址。RAID 通过条 带化提升存储系统的可靠性。。
12、 0004 若 cache 下发给 RAID 的数据 IO 的大小与 RAID 中一个分条的大小相同, 此时所下 发的数据 IO 能够与对应的分条对齐 ; 相反, 若 cache 下发给 RAID 的数据的大小与 RAID 中 一个分条的大小不同, 则不能分条对齐, 此时将需要 : 先将旧分条单元和旧校验值从磁盘上 读取到缓存, 然后基于新分条单元、 旧分条单元与旧校验值计算出新的校验值, 再将新分条 单元与新的校验值写入磁盘。由于需要先从磁盘上读取数据到缓存, 这显然将放大对磁盘 的读写压力, 导致存储系统的读写性能严重下降。 发明内容 0005 技术问题 0006 有鉴于此, 本发明要解决。
13、的技术问题是, 因 cache 下发 RAID 的 IO 不能分条对齐, 在执行写入时需要先从磁盘上读取数据到缓存, 导致存储系统读写性能下降的问题。 0007 解决方案 0008 为了解决上述技术问题, 根据本发明一实施例, 在第一方面提供一种写数据的方 法, 所述方法应用于存储设备中, 所述存储设备包括缓存和存储器, 所述缓存包含多个数据 块, 每个数据块包含多个子数据块, 所述方法包括 : 0009 确定所述数据块中包含的第一子数据块集合的个数, 所述第一子数据块集合中的 每个子数据块存储的数据均为脏数据 ; 说 明 书 CN 103645995 A 4 2/9 页 5 0010 当所述。
14、第一子数据块集合的个数超过预定阈值时, 确定第二子数据块集合, 所述 第二子数据块集合是第一个子数据块存储的数据和最后一个子数据块存储的数据均为脏 数据的连续子数据块的集合 ; 0011 当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的各个第二 子数据块集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述存储器 ; 0012 当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第二写 数据请求, 并将所述第二写数据请求发送给所述存储器。 0013 在一种可能的实现方式中, 在所述为所述数据块生成一个第二写数据请求之前, 包括 : 0014 生成读数据请求。
15、, 所述读数据请求用于读取所述存储器中与所述数据块对应的分 条内的所有数据 ; 0015 从所述数据块对应的分条内的所有数据中提取与所述数据块中空的子数据块对 应的数据 ; 0016 将所述对应的数据写入所述空的子数据块内。 0017 在一种可能的实现方式中, 还包括 : 0018 获取对所述分条进行数据读取的第一平均时间 ; 0019 获取对所述分条内的一个分条单元进行数据读取的第二平均时间 ; 0020 根据所述第一平均时间与所述第二平均时间, 计算所述预定阈值。 0021 在一种可能的实现方式中, 根据所述第一平均时间与所述第二平均时间, 计算所 述预定阈值包括 : 0022 计算所述第。
16、一平均时间除以所述第二平均时间的商 ; 0023 将所得到的商与预设的时延系数相乘, 所述预定阈值等于所述相乘获得的乘积。 0024 为了解决上述技术问题, 根据本发明又一实施例, 在第二方面提供一种写数据的 装置, 所述装置应用于存储设备中, 所述存储设备包括缓存和存储器, 所述缓存包含多个数 据块, 每个数据块包含多个子数据块, 所述装置包括 : 0025 第一确定模块, 用于确定所述数据块中包含的第一子数据块集合的个数, 所述第 一子数据块集合中的每个子数据块存储的数据均为脏数据 ; 0026 第一判断模块, 与所述第一确定模块连接, 用于判断所述第一子数据块集合的个 数是否超过预定阈值。
17、 ; 0027 第二确定模块, 与所述第一判断模块连接, 用于当所述第一子数据块集合的个数 超过预定阈值时, 确定第二子数据块集合, 所述第二子数据块集合是第一个子数据块存储 的数据和最后一个子数据块存储的数据均为脏数据的连续子数据块的集合 ; 0028 第二判断模块, 与所述第二确定模块连接, 用于判断所述第二子数据块集合的个 数是否超过预定阈值 ; 0029 写入模块, 与所述第二判断模块连接, 用于 0030 当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的各个第二 子数据块集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述存储器 ; 0031 当所述第二子数。
18、据块集合的个数超过预定阈值时, 为所述数据块生成一个第二写 数据请求, 并将所述第二写数据请求发送给所述存储器。 说 明 书 CN 103645995 A 5 3/9 页 6 0032 在一种可能的实现方式中, 所述写入模块被配置为 : 0033 生成读数据请求, 所述读数据请求用于读取所述存储器中与所述数据块对应的分 条内的所有数据 ; 0034 从所述数据块对应的分条内的所有数据中提取与所述数据块中空的子数据块对 应的数据 ; 0035 将所述对应的数据写入所述空的子数据块内。 0036 在一种可能的实现方式中, 所述写数据的装置还包括 : 0037 计算模块, 与所述第一判断模块及所述第。
19、二判断模块连接, 用于获取对所述分条 进行数据读取的第一平均时间 ; 获取对所述分条内的一个分条单元进行数据读取的第二平 均时间 ; 根据所述第一平均时间与所述第二平均时间, 计算所述预定阈值。 0038 在一种可能的实现方式中, 所述计算模块被配置为 : 0039 计算所述第一平均时间除以所述第二平均时间的商 ; 0040 将所得到的商与预设的时延系数相乘, 所述预定阈值等于所述相乘获得的乘积。 0041 有益效果 0042 通过当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第 二写数据请求, 并将所述第二写数据请求发送给所述存储器, 根据本发明实施例的一种写 数据的方法。
20、及装置在执行写入时不需要先从磁盘上读取数据到缓存, 从而减少了对 RAID 的读写压力 ; 通过当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的 各个第二子数据块集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述存 储器, 根据本发明实施例的一种写数据的方法及装置能够减少 cache 下发的写 IO 个数, 从 而减少了对 RAID 的读写压力。 0043 根据下面参考附图对示例性实施例的详细说明, 本发明的其它特征及方面将变得 清楚。 附图说明 0044 包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本发明的 示例性实施例、 特征和方面, 并且用于解。
21、释本发明的原理。 0045 图 1 示出根据本发明一实施例的写数据的方法的流程图 ; 0046 图 2 示出本发明实施例一个 chunk 的示意图 ; 0047 图 3 示出根据本发明另一实施例的写数据的方法的流程图 ; 0048 图 4a- 图 4b 示出本发明实施例中另一 chunk 的示意图 ; 0049 图 5 示出本发明实施例中又一 chunk 的示意图 ; 0050 图 6 示出计算预定阈值的方法的流程图 ; 0051 图 7 示出 IO 大小与阈值关系的示意图 ; 0052 图 8 示出根据本发明一实施例的写数据的装置的结构示意图 ; 0053 图 9 示出根据本发明一实施例的写。
22、数据的装置的结构框图。 具体实施方式 0054 以下将参考附图详细说明本发明的各种示例性实施例、 特征和方面。附图中相同 说 明 书 CN 103645995 A 6 4/9 页 7 的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面, 但是除 非特别指出, 不必按比例绘制附图。 0055 在这里专用的词 “示例性” 意为 “用作例子、 实施例或说明性” 。这里作为 “示例性” 所说明的任何实施例不必解释为优于或好于其它实施例。 0056 另外, 为了更好的说明本发明, 在下文的具体实施方式中给出了众多的具体细节。 本领域技术人员应当理解, 没有某些具体细节, 本发明同样可。
23、以实施。在一些实例中, 对于 本领域技术人员熟知的方法、 手段、 元件和电路未作详细描述, 以便于凸显本发明的主旨。 0057 图 1 示出根据本发明一实施例的写数据的方法的流程图。该写数据的方法, 应用 于存储设备中, 所述存储设备包括控制器和存储器 (例如, 磁盘) , 其中, 控制器包括处理器 和缓存 (又称 cache) 。在本发明实施例中磁盘可以以 RAID 的方式来进行组织, 为了描述方 便, 可以将存储器称为 RAID。cache 包含多个数据块 (又称 chunk) , 每个 chunk 包含多个子 数据块, 执行下述步骤的可以是控制器中的处理器。如图 1 所示, 该方法主要包。
24、括 : 0058 步骤S101、 确定cache的一个chunk中包含的第一子数据块集合的个数, 所述第一 子数据块集合中的每个子数据块存储的数据均为脏数据。 0059 一般来说, cache 中以逻辑单元号 (英文 : logic unit number, 缩写 : LUN) 为标识 来组织所缓存的数据。这使得, 在 cache 内查找待写入 RAID 中的脏数据时, 通常以逻辑 区块地址 (英文 : logical block address, 缩写 : LBA) 为键值找到哈希 (英文 : hash) 表的 chunk。每个 LUN 用 hash 算法组织查找表, hash 是一种数据组。
25、织方式, 每个 hash 节点指向 一个 chunk ; chunk 是 cache 内最小操作单元, 当将 chunk 写入 RAID 时, 为达到分条对齐即 cache 下发给 RAID 的数据 IO 的大小与 RAID 中一个分条的大小相同的目的, chunk 大小应 与 RAID 中对应分条的大小相同, 因此本发明实施例取 chunk 大小与分条大小相同。 0060 图 2 示出本发明实施例一个 chunk 的示意图, 该 chunk 包括 15 个子数据块, 其中 第一子数据块集合的个数为 4, 即图 2 中左起第 2-3 个子数据块为一个第一子数据块集合, 第9-10个子数据块为一。
26、个第一子数据块集合, 第12个子数据块为一个第一子数据块集合, 第 14-15 个子数据块为一个第一子数据块集合。 0061 步骤 S102、 当所述第一子数据块集合的个数超过预定阈值时, 确定第二子数据块 集合, 所述第二子数据块集合是第一个子数据块存储的数据和最后一个子数据块存储的数 据均为脏数据的连续子数据块的集合 ; 0062 图2所示chunk中的第二子数据块集合个数为2, 即左起第2-3个子数据块为一个 第二子数据块集合, 第 9-15 个子数据块为一个第二子数据块集合。 0063 步骤 S103、 当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内 的各个第二子数据块。
27、集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述 存储器。 0064 步骤 S104、 当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成 一个第二写数据请求, 并将所述第二写数据请求发送给所述存储器。 0065 通过当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第 二写数据请求, 并将所述第二写数据请求发送给所述存储器, 根据本发明实施例的一种写 数据的方法及装置在执行写入时不需要先从磁盘上读取数据到缓存, 从而减少了对 RAID 的读写压力。通过当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的 说 明 书 CN 10364599。
28、5 A 7 5/9 页 8 各个第二子数据块集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述存 储器, 根据本发明实施例的一种写数据的方法及装置能够减少 cache 下发的写 IO 个数, 从 而减少了对 RAID 的读写压力。 0066 图 3 示出根据本发明另一实施例的写数据的方法的流程图。图 3 中标号与图 1 相 同的步骤具有相同的功能, 为简明起见, 省略对这些步骤的详细说明。如图 3 所示, 与图 1 不同的是 : 0067 在步骤 S101 之后, 执行步骤 S301、 判断所述第一子数据块集合的个数是否超过预 定阈值 L ? 0068 是则执行步骤 S102 ; 。
29、否则执行步骤 S306。 0069 以阈值 L 为 3.79 为例, 则图 2 所示的 chunk 中第一子数据块集合的个数超过预定 阈值。执行步骤 S102, 确定图 2 中的第二子数据块集合个数为 2。 0070 步骤 S302、 判断所述第二子数据块集合的个数是否超过预定阈值 L ? 0071 是则执行步骤 S104 ; 否则执行步骤 S103。 0072 仍以图2中所示chunk及阈值L为3.79为例, 第二子数据块集合个数为2, 小于阈 值, 因此执行步骤 S103, 为 chunk 内的每个第二子数据块集合分别生成第一写数据请求, 并 将每个第一写数据请求发送给所述存储器, 以将每。
30、个第二子数据块集合作为一个 IO 分别 写入 RAID, 即发送 2 个第一写数据请求给存储器, 将 2 个第二子数据块集合作为 2 个数据 IO 下发给 RAID。 0073 根据本发明实施例的一种写数据的方法能够减少cache下发的写IO个数, 从而减 少了对 RAID 的读写压力。 0074 进一步地, 图 4a 示出本发明实施例中另一 chunk 的示意图, 以图 4a 所示 chunk 为 例, 遍历chunk, 发现chunk内脏数据很多, 且中间没有干净数据混合, 执行步骤S101-S302, 其中第一子数据块集合的个数为7大于阈值, 第二子数据块集合的个数为7大于阈值, 因此 。
31、执行步骤 S104。 0075 在一种可能的实施方式中, 在步骤 S104 为所述数据块生成一个第二写数据请求 之前, 还包括 : 0076 步骤 S303、 生成读数据请求, 所述读数据请求用于读取所述存储器中与所述数据 块对应的分条内的所有数据 ; 0077 步骤 S304、 从所述数据块对应的分条内的所有数据中提取与所述数据块中空的子 数据块对应的数据 ; 0078 步骤 S305、 将所述对应的数据写入所述空的子数据块内。 0079 图4b示出将对应的数据写入空的子数据块之后的chunk示意图。 在步骤S104中, 以该 chunk 作为一个整体, 生成一个第二写数据请求, 并将该第二。
32、写数据请求发送给所述 存储器, 即将整个 chunk 作为一个数据 IO, 下发给 RAID, chunk 的大小与对应分条的大小相 同, RAID 接收到分条对齐的数据, 只需要计算校验数据后就可以直接执行写入, 不需要先从 磁盘上读取数据到缓存。 0080 通过当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第 二写数据请求, 并将所述第二写数据请求发送给所述存储器, 根据本发明实施例的一种写 数据的方法在执行写入时不需要先从磁盘上读取数据到缓存, 从而减少了对 RAID 的读写 说 明 书 CN 103645995 A 8 6/9 页 9 压力。 0081 步骤 S30。
33、6、 在第一子数据块集合的个数不超过所述预定阈值的情况下, 对各个第 一子数据块集合分别生成第三写数据请求, 并将每个第三写数据请求发送给所述存储器。 0082 图5示出本发明实施例中另一chunk的示意图, 以图5所示chunk为例, 遍历chunk 计算出其要下发给 RAID 的第一子数据块集合的个数为 2 小于阈值 L, 因此对 chunk 的第一 子数据块集合分别生成第三写数据请求, 并将该第三写数据请求发给所述 RAID。此时没有 必要将干净数据和脏数据一起进行写数据的操作, 也不需要提取对应数据来写入空的子数 据块, 再进行写操作, 只需要对各个第一子数据块集合分别生成第三写数据请。
34、求, 并将每个 第三写数据请求发送给所述存储器。 需要说明的是, 在本发明实施例中, 干净数据是指已经 写入 RAID, 并且仍然在缓存中保存的数据 ; 脏数据是指尚未写入 RAID, 但仍然在缓存中保 存的数据。 0083 图 6 示出计算预定阈值的方法的流程图。上述实施例中所述的预定阈值, 其计算 方法如图 6 所示, 包括 : 0084 步骤 S401、 获取对所述分条进行数据读取的第一平均时间 ; 0085 步骤 S402、 获取对所述分条内的一个分条单元进行数据读取的第二平均时间 ; 0086 步骤 S403、 根据所述第一平均时间与所述第二平均时间, 计算所述预定阈值。 0087 。
35、计算所述第一平均时间除以所述第二平均时间的商 ; 将所得到的商与预设的时延 系数相乘, 所述预定阈值等于所述相乘获得的乘积。 0088 具体可以按如下公式计算所述预定阈值 : 0089 L=Tm/Tk*M, 0090 其中, L 表示预定阈值, Tm 表示对一个分条进行数据读取的第一平均时间, Tk 表示 对分条内的一个分条单元进行数据读取的第二平均时间, M 表示时延系数。在一种具体的 实施方式中, 时延系数 M 可以为 1.5。 0091 在相同的 RAID 上, 读取不同大小的分条单元所需要的第二平均时间是不同的, 其 对应关系如表 1 所示 : 0092 说 明 书 CN 103645。
36、995 A 9 7/9 页 10 0093 表 1 0094 以分条大小为 1M 为例, 进行数据读取的第一平均时间 (Tm) 为 42.8 毫秒, Tk 取值 如表 1 所示, 再考虑多个 IO 在盘上的并发处理因此其系数为 M=1.5, 当 chunk 大小为 1M, 数 据块大小为 4k 时, L=3.79, 图 7 为 IO 大小与阈值关系的示意图。系数 M 是一个经验值, 是 在具体的测试中总结出来的, 若系数取值过高则阈值较高, 那么以本发明实施例的方式执 行数据写入的概率就会较低, 写性能较差 ; 若系数过低则阈值过低, 则盘上的并发 IO 增多, 其原因在于, 针对一个 IO 。
37、其覆盖的分条单元可能是有限的, 因此并不是该分条内所有分条 单元都有 IO, 若以分条对齐的方式进行数据写入, 该分条对应所有分条单元都有 IO, 因此 造成盘上的并发 IO 增多。通过多次调整得出在 M=1.5 条件下性能是较优的。本发明实施 例通过所述阈值的设定, 在考虑磁盘的并发处理能力的基础上, 实现减少 RAID 读写压力的 技术效果。 0095 图 8 示出根据本发明一实施例的写数据的装置的结构示意图。所述装置 10 应用 于存储设备中, 所述存储设备包括缓存和存储器, 所述缓存包含多个数据块, 每个数据块包 含多个子数据块, 如图 8 所示, 该装置 10 主要包括 : 第一确定。
38、模块 110、 第一判断模块 120、 第二确定模块 130、 第二判断模块 140、 写入模块 150。 0096 第一确定模块 110, 用于确定所述数据块中包含的第一子数据块集合的个数, 所述 第一子数据块集合中的每个子数据块存储的数据均为脏数据 ; 0097 第一判断模块 120, 与所述第一确定模块 110 连接, 用于判断所述第一子数据块集 合的个数是否超过预定阈值 ; 0098 第二确定模块 130, 与所述第一判断模块 120 连接, 用于当所述第一子数据块集合 的个数超过预定阈值时, 确定第二子数据块集合, 所述第二子数据块集合是第一个子数据 块存储的数据和最后一个子数据块存。
39、储的数据均为脏数据的连续子数据块的集合 ; 0099 第二判断模块 140, 与所述第二确定模块 130 连接, 用于判断所述第二子数据块集 合的个数是否超过预定阈值 ; 说 明 书 CN 103645995 A 10 8/9 页 11 0100 写入模块 150, 与所述第二判断模块 140 连接, 用于当所述第二子数据块集合的 个数不超过预定阈值时, 为所述数据块内的各个第二子数据块集合分别生成第一写数据请 求, 并将每个第一写数据请求发送给所述存储器 ; 以及当所述第二子数据块集合的个数超 过预定阈值时, 为所述数据块生成一个第二写数据请求, 并将所述第二写数据请求发送给 所述存储器。 。
40、0101 在一种可能的实施方式中, 写入模块 150 被配置为 : 生成读数据请求, 所述读数据 请求用于读取所述存储器中与所述数据块对应的分条内的所有数据 ; 从所述数据块对应的 分条内的所有数据中提取与所述数据块中空的子数据块对应的数据 ; 将所述对应的数据写 入所述空的子数据块内。 0102 在一种可能的实施方式中, 该装置10还包括计算模块160, 该计算模块160与所述 第一判断模块 120 及所述第二判断模块 140 连接, 用于获取对所述分条进行数据读取的第 一平均时间 ; 获取对所述分条内的一个分条单元进行数据读取的第二平均时间 ; 根据所述 第一平均时间与所述第二平均时间, 。
41、计算所述预定阈值。 0103 在一种可能的实施方式中, 计算模块 160 被配置为 : 计算所述第一平均时间除以 所述第二平均时间的商 ; 将所得到的商与预设的时延系数相乘, 所述预定阈值等于所述相 乘获得的乘积。 0104 通过当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第 二写数据请求, 并将所述第二写数据请求发送给所述存储器, 根据本发明实施例的一种写 数据的装置在执行写入时不需要先从磁盘上读取数据到缓存, 从而减少了对 RAID 的读写 压力 ; 通过当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的各个第 二子数据块集合分别生成第一写数据请求, 并。
42、将每个第一写数据请求发送给所述存储器, 根据本发明实施例的一种写数据的装置能够减少 cache 下发的写 IO 个数, 从而减少了对 RAID 的读写压力。 0105 图 9 示出了本发明的另一个实施例的一种写数据的装置的结构框图。所述写数据 的装置 1100 可以是具备计算能力的主机服务器、 个人计算机 PC、 或者可携带的便携式计算 机或终端等。本发明具体实施例并不对计算节点的具体实现做限定。 0106 所 述 写 数 据 的 装 置 1100 包 括 处 理 器 (processor)1110、通 信 接 口 (Communications Interface)1120、 存储器(mem。
43、ory)1130和总线1140。 其中, 处理器1110、 通信接口 1120、 以及存储器 1130 通过总线 1140 完成相互间的通信。 0107 通信接口 1120 用于与网络设备通信, 其中网络设备包括例如虚拟机管理中心、 共 享存储等。 0108 处理器1110用于执行程序。 处理器1110可能是一个中央处理器CPU, 或者是专用 集成电路 ASIC(Application Specific Integrated Circuit) , 或者是被配置成实施本发 明实施例的一个或多个集成电路。 0109 存储器 1130 用于存放文件。存储器 1130 可能包含高速 RAM 存储器, 。
44、也可能还包 括非易失性存储器 (non-volatile memory), 例如至少一个磁盘存储器。存储器 1130 也可 以是存储器阵列。存储器 1130 还可能被分块, 并且所述块可按一定的规则组合成虚拟卷。 0110 在一种可能的实施方式中, 上述程序可为包括计算机操作指令的程序代码。该程 序具体可用于 : 说 明 书 CN 103645995 A 11 9/9 页 12 0111 确定所述数据块中包含的第一子数据块集合的个数, 所述第一子数据块集合中的 每个子数据块存储的数据均为脏数据 ; 0112 当所述第一子数据块集合的个数超过预定阈值时, 确定第二子数据块集合, 所述 第二子数据。
45、块集合是第一个子数据块存储的数据和最后一个子数据块存储的数据均为脏 数据的连续子数据块的集合 ; 0113 当所述第二子数据块集合的个数不超过预定阈值时, 为所述数据块内的各个第二 子数据块集合分别生成第一写数据请求, 并将每个第一写数据请求发送给所述存储器 ; 0114 当所述第二子数据块集合的个数超过预定阈值时, 为所述数据块生成一个第二写 数据请求, 并将所述第二写数据请求发送给所述存储器。 0115 在一种可能的实现方式中, 在所述为所述数据块生成一个第二写数据请求之前, 该程序还用于 : 0116 生成读数据请求, 所述读数据请求用于读取所述存储器中与所述数据块对应的分 条内的所有数。
46、据 ; 0117 从所述数据块对应的分条内的所有数据中提取与所述数据块中空的子数据块对 应的数据 ; 0118 将所述对应的数据写入所述空的子数据块内。 0119 在一种可能的实现方式中, 该程序还用于 : 0120 获取对所述分条进行数据读取的第一平均时间 ; 0121 获取对所述分条内的一个分条单元进行数据读取的第二平均时间 ; 0122 根据所述第一平均时间与所述第二平均时间, 计算所述预定阈值。 0123 在一种可能的实现方式中, 根据所述第一平均时间与所述第二平均时间, 计算所 述预定阈值包括 : 0124 计算所述第一平均时间除以所述第二平均时间的商 ; 0125 将所得到的商与预。
47、设的时延系数相乘, 所述预定阈值等于所述相乘获得的乘积。 0126 本领域普通技术人员可以意识到, 本文所描述的实施例中的各示例性单元及算法 步骤, 能够以电子硬件、 或者计算机软件和电子硬件的结合来实现。 这些功能究竟以硬件还 是软件形式来实现, 取决于技术方案的特定应用和设计约束条件。专业技术人员可以针对 特定的应用选择不同的方法来实现所描述的功能, 但是这种实现不应认为超出本发明的范 围。 0127 如果以计算机软件的形式来实现所述功能并作为独立的产品销售或使用时, 则在 一定程度上可认为本发明的技术方案的全部或部分 (例如对现有技术做出贡献的部分) 是 以计算机软件产品的形式体现的。 。
48、该计算机软件产品通常存储在计算机可读取的非易失性 存储介质中, 包括若干指令用以使得计算机设备 (可以是个人计算机、 服务器、 或者网络设 备等) 执行本发明各实施例方法的全部或部分步骤。而前述的存储介质包括 U 盘、 移动硬 盘、 只读存储器 (ROM, Read-Only Memory) 、 随机存取存储器 (RAM, Random Access Memory) 、 磁碟或者光盘等各种可以存储程序代码的介质。 0128 以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不局限于此, 任何 熟悉本技术领域的技术人员在本发明揭露的技术范围内, 可轻易想到变化或替换, 都应涵 盖在本发明的保护范围之内。 因此, 本发明的保护范围应以所述权利要求的保护范围为准。 说 明 书 CN 103645995 A 12 1/5 页 13 图 1 图 2 说 明 书 附 图 CN 103645995 A 13 2/5 页 14 图 3 说 明 书 附 图 CN 103645995 A 14 3/5 页 15 图 4a 图 4b 图 5 图 6 说 明 书 附 图 CN 103645995 A 15 4/5 页 16 图 7 图 8 说 明 书 附 图 CN 103645995 A 16 5/5 页 17 图 9 说 明 书 附 图 CN 103645995 A 17 。