发明名称 基于SSD的大规模存储系统中的文件布局方法
摘要 本发明公开了一种基于SSD的大规模存储系统中的文件布局方法,该方法向存储系统写入文件时,采用范德蒙德矩阵将用户数据利用非对称纠删码分成n份,n份数据写到n个SSD上;向存储系统读取文件时,根据n个SSD上n份数据中的任意k份(k<n),利用范德蒙德矩阵即可计算出整个文件,其中k为可恢复用户数据的最低数量,而且读取文件时,向n个SSD发送读请求,最先返回的k份数据被用来恢复用户数据。只要n个SSD中的k个没有进行垃圾回收,读请求就不受SSD垃圾回收的影响。本发明具有可靠性高、容错性能好、SSD使用寿命长、SSD垃圾回收对读请求影响低的优点。
申请公布号 CN103135946B 申请公布日期 2014.11.26
申请号 CN201310097842.9 申请日期 2013.03.25
申请人 中国人民解放军国防科学技术大学 发明人 廖湘科;肖侬;陈志广;卢宇彤;周恩强;陈海涛;蒋艳凰;张伟
分类号 G06F3/06(2006.01)I 主分类号 G06F3/06(2006.01)I
代理机构 湖南兆弘专利事务所 43008 代理人 赵洪;谭武艺
主权项 一种基于SSD的大规模存储系统中的文件布局方法,其特征在于实施步骤如下:1)建立范德蒙德矩阵,跳转执行下一步;2)接收应用程序的读写请求,跳转执行下一步;3)判定所述读写请求的请求类型,若请求类型为写请求则跳转执行步骤4),若请求类型为读请求则跳转执行步骤8);4)将待写入文件进行分块得到k个用户数据分块,其中k为可恢复用户数据的最低数量,跳转执行下一步;5)根据范德蒙德矩阵和所述k个用户数据分块计算获取待写入SSD的n份数据,其中n为大于k的整数:首先将所述k个用户数据分块组成如式(1)所示的向量,然后根据式(2)计算获取待写入SSD的n份数据;最后跳转执行下一步;<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>D</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>d</mi><mn>0</mn></msub></mtd></mtr><mtr><mtd><msub><mi>d</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>d</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000518651190000011.GIF" wi="1419" he="308" /></maths>式(1)中,D为得到的向量,d<sub>0</sub>~d<sub>k‑1</sub>为所述k个用户数据分块;<img file="FDA0000518651190000012.GIF" wi="1411" he="383" />式(2)中,C为得到的待写入SSD的n份数据的向量,c<sub>0</sub>~c<sub>n‑1</sub>即为待写入SSD的n份数据;G为范德蒙德矩阵,G的每个元素是一个位串;D为所述k个用户数据分块组成的向量;×为异或运算符;6)根据所述待写入SSD的n份数据选择n个目标SSD:首先记录存储系统中所有SSD的容量信息,然后根据记录的所有SSD的容量信息计算出各个SSD的空间利用率,再从所有SSD中选择一组任意两个SSD之间的空间利用率差异最大的n个目标SSD;最后,跳转执行下一步;7)将所述待写入SSD的n份数据分别写入所述n个目标SSD中,并在写入文件的元信息中记录所述n个目标SSD的信息,写请求处理完毕,等待在下一个读写请求到来时跳转执行步骤2);8)根据所述读请求的读取目标文件的元信息中记录的SSD信息找到n个目标SSD,跳转执行下一步;9)向所述n个目标SSD发送读请求,初始化用于记录所述n个目标SSD返回的数据个数的计数器,跳转执行下一步;10)每收到一个目标SSD返回的数据,则将所述计数器加1,跳转执行下一步;11)当计数器的数值等于可恢复用户数据的最低数量k时,跳转执行下一步,否则继续返回执行步骤10);12)根据各个目标SSD返回的k份数据恢复用户数据并返回给读请求:首先将根据各个目标SSD返回的k份数据组成如式(3)所示的向量,然后将根据各个目标SSD返回的k份数据,在范德蒙德矩阵中选择相应的可恢复用户数据的最低数量行组成子矩阵,并将所述子矩阵转置得到转置子矩阵,最后根据式(4)恢复用户数据并返回给读请求;读请求处理完毕,等待在下一个读写请求到来时跳转执行步骤2);<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>R</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>r</mi><mn>0</mn></msub></mtd></mtr><mtr><mtd><msub><mi>r</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>r</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000518651190000021.GIF" wi="1412" he="308" /></maths>式(3)中,R为各个目标SSD返回的数据组成的向量,其中r<sub>0</sub>~r<sub>k‑1</sub>为各个目标SSD返回的数据;<img file="FDA0000518651190000022.GIF" wi="1412" he="333" />式(4)中,U为恢复得到的用户数据向量,其中u<sub>0</sub>~u<sub>k‑1</sub>即为恢复得到的k个用户数据分量,k个用户数据分量即组成最终恢复得到的用户数据;A<sup>T</sup>为所述子矩阵转置得到的转置子矩阵,<img file="FDA0000518651190000023.GIF" wi="260" he="68" />为转置子矩阵A<sup>T</sup>中的元素,所述转置子矩阵A<sup>T</sup>中的元素是一个位串;R为各个目标SSD返回的数据组成的向量。
地址 410073 湖南省长沙市砚瓦池正街47号中国人民解放军国防科学技术大学计算机学院