CN103645859B - 一种虚拟ssd与ssd异构镜像的磁盘阵列缓存方法 - Google Patents
一种虚拟ssd与ssd异构镜像的磁盘阵列缓存方法 Download PDFInfo
- Publication number
- CN103645859B CN103645859B CN201310583574.1A CN201310583574A CN103645859B CN 103645859 B CN103645859 B CN 103645859B CN 201310583574 A CN201310583574 A CN 201310583574A CN 103645859 B CN103645859 B CN 103645859B
- Authority
- CN
- China
- Prior art keywords
- ssd
- data
- write
- virtual
- true
- 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
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种虚拟SSD与SSD异构镜像的磁盘阵列缓存方法,包括:将磁盘进行逻辑分区为两个部分。其中上半部分组成RAID0或RAID5结构作为虚拟SSD。用于备份真实SSD中脏数据。虚拟SSD采用日志写的方式。并设置有ram写缓存。下半部分根据用户需要组装成不同RAID结构,用作数据阵列,以存放冷数据。建立数据盘和真实SSD缓存之间地址映射哈希查找表。设置计时器,用于定期地将虚拟SSD的ram写缓存中缓存的数据写入到虚拟SSD中。接收来自上层文件系统的请求。对于读请求,当读请求不在真实SSD中命中时,从数据阵列中读取数据即可。本发明提出了一种兼顾性能,可靠性和成本开销的方案。
Description
技术领域
本发明属于数据存储技术领域,更具体地,涉及一种虚拟SSD与SSD异构镜像的磁盘阵列缓存方法。
背景技术
固态硬盘采用闪存作为存储介质,因此相对于传统磁盘,没有了磁头寻道的机械过程,其读写性能大大优于磁盘,尤其是随机的读写性能。将SSD引入存储系统中,从而大大提高了整个系统的性能。目前来看,SSD的容量也比一般磁盘要小许多,难以满足现在大量数据的应用情景。业界目前使用SSD主要作为分级存储介质,SSD缓存,相比传统的内存缓存,SSD可以提供更大的缓存空间,把经常访问的热数据存储在SSD中,把访问较少的冷数据存储在磁盘设备上。对于目前海量数据的存储需求,由于其中有大量的是冷数据,都将其存储在后端的磁盘设备上,通常采用磁盘阵列的形式组织起来。
但是,单独SSD做缓存依然存在以下缺陷:首先,价格昂贵,而且随着容量的增大价格更加昂贵;其次,SSD的擦写次数有限,写入数据之前会完成擦除工作,相比普通磁盘,SSD的使用寿命更短,从而也造成了使用SSD系统的可靠性的问题。对于SSD作缓存可靠性的保证,可以采用写穿的方式实现,从而确保了SSD在数据磁盘中有数据备份。但是,采用写穿方式,写请求则会响应变慢,减小了SSD缓存高速的优势。
另一种普遍的方式是采用另一SSD和原缓存SSD组成类似RAID1结构的双镜像方式,以保证可靠性,但这会导致整个系统成本大大增加。
还有一种普遍的方式是简单采用普通磁盘做SSD的镜像,以保证可靠性,然而,由于一般磁盘相比较SSD性能不好,此时,当写命中发生时,数据同时写入SSD和镜像磁盘,显然镜像磁盘会成为性能瓶颈,大大减小了SSD缓存高速的优势。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种虚拟SSD与SSD异构镜像的磁盘阵列缓存方法和系统,其目的在于,针对单独SSD做缓存的可靠性问题,双SSD镜像带来的成本开销问题,以及磁盘做SSD镜像带来的性能问题,提出了一种兼顾性能,可靠性和成本开销的方案。
为实现上述目的,按照本发明的一个方面,提供了一种虚拟SSD与SSD异构镜像的磁盘阵列缓存方法,包括以下步骤:
(1)将磁盘进行逻辑分区为两个部分,其中上半部分组成RAID0或RAID5结构作为虚拟SSD,用于备份真实SSD中脏数据,虚拟SSD采用日志写的方式,并设置有ram写缓存,下半部分根据用户需要组装成不同RAID结构,用作数据阵列,以存放冷数据;
(2)建立数据盘和真实SSD缓存之间地址映射哈希查找表,设置计时器,用于定期地将虚拟SSD的ram写缓存中缓存的数据写入到虚拟SSD中;
(3)接收来自上层文件系统的请求,对于读请求,当读请求不在真实SSD中命中时,从数据阵列中读取数据即可,当读请求在真实SSD中命中时,直接从真实SSD中读出该读请求对应的数据即可,对于写请求,当写请求不在真实SSD中命中时,直接将其写入数据盘中即可,当在真实SSD中命中时,把写请求对应的数据写入到真实SSD,并以日志写方式写入。
优选地,步骤(3)包括以下子步骤:
(3-1)接收来自上层文件系统的请求,并判断该请求是读请求还是写请求,如果是读请求则转入步骤(3-2),如果是写请求则转入步骤(3-7);
(3-2)根据该读请求的逻辑地址(LogicalBlockAddress,简称LBA)对应的数据块块号在(2)中地址映射哈希查找表中进行查找,判断该表中是否存储有该请求块号对应在真是SSD中块地址,如果存在,则表示该读请求对应的数据块存储在真实SSD中,并进入步骤(3-3),否则表示该读请求对应的数据块没有在真实SSD中缓存,然后转入步骤(3-4);
(3-3)从真实SSD中读取该读请求对应的数据块,并将该数据块返回给上层文件系统,过程结束;
(3-4)从数据阵列中读取该读请求对应的数据块,并判断计时器是否达到规定的计时周期,若到达计时周期,表示需要进行数据阵列中热数据选取和真实SSD中冷数据淘汰,则进入步骤(3-5),否则进入步骤(3-6);
(3-5)根据数据淘汰算法选取真实SSD中变冷的数据淘汰到数据阵列中,同时作废虚拟SSD中的对应副本,并将数据阵列中变热的数据写入真实SSD中,然后进入步骤(3-6);
(3-6)将该读请求对应的数据块返回给上层文件系统,过程结束;
(3-7)根据该写请求的逻辑地址获得请求块号,根据请求的数据块块号在(2)中地址映射哈希查找表中进行查找,判断该表中是否存储有该请求块号对应在真是SSD中块地址,如果存在,进入步骤(3-11),否则转入步骤(3-8);
(3-8)将该写请求对应的数据块写入数据阵列中,并判断计时器是否达到规定的计时周期,若到达计时周期,则进入步骤(3-9),否则进入步骤(3-10);
(3-9)根据数据淘汰算法选取真实SSD中变冷的数据淘汰到数据阵列中,并将数据阵列中变热的数据写入真实SSD中,然后进入步骤(3-10);
(3-10)将该写请求对应的数据块返回给上层文件系统,过程结束;
(3-11)将该写请求对应的数据写入其在真实SSD中的对应位置;
(3-12)把该写请求对应的数据以日志写方式写入虚拟SSD中,过程结束。
优选地,步骤(3-12)包括以下子步骤:
(3-12-1)判断虚拟SSD的ram写缓存中数据是否已满,并根据计时器判断时间是否达到写入周期的结束,如果数据未满且时间没有到达写入周期的结束,则进入步骤(3-12-5),如果数据已满或者时间达到写入周期的结束,则进入步骤(3-12-2);
(3-12-2)判断虚拟SSD空间是否已满,如果已满,则对虚拟SSD空间进行整理,然后进入步骤(3-12-3),否则,直接进入步骤(3-12-3);
(3-12-3)把虚拟SSD的ram写缓存中缓存的数据整体写入虚拟SSD的当前条带指针cur所指向的条带,清空虚拟SSD的ram写缓存,同时,将虚拟SSD中受影响而变旧的副本数据作废;
(3-12-4)虚拟SSD的当前条带指针cur向下移动若干条带的距离,移动的距离是由ram缓存了的数据条带数而定;
(3-12-5)把数据写入虚拟SSD的ram写缓存,过程结束。
优选地,步骤(3-12-4)中,若当前条带指针cur超过虚拟SSD的最大条带号,则对该cur指针取模,并使其循环指向第一条带,即cur以循环数组指针的方式存在。
优选地,步骤(3-12-2)包括以下子步骤:
(3-12-2-1)根据虚拟SSD碎片整理条带指针reorg和当前条带指针cur,判断虚拟SSD中是否有空闲条带,若没有则进入步骤(3-12-2-2),否则,过程结束;
(3-12-2-2)遍历虚拟SSD的reorg指针所指向的条带中的每个数据块,对于包含有效数据的数据块,查找其作为真实SSD数据备份在真实SSD中的源的位置,将其在真实SSD中的源的数据读取出来,以日志写的方式将读取得到的数据写入虚拟SSD中,同时作废虚拟SSD中所有同源的备份数据;
(3-12-2-3)虚拟SSD的碎片整理条带指针reorg向下移动一个条带的距离,过程结束。
优选地,在步骤(3-12-2-3)中,若reorg指针超过虚拟SSD的最大条带号,则对reorg指针取模,并使其循环指向第一条带,即reorg以循环数组指针的方式存在。
按照本发明的另一方面,提供了一种虚拟SSD与SSD异构镜像的磁盘阵列缓存系统,包括:
第一模块,用于将磁盘进行逻辑分区为两个部分,其中上半部分组成RAID0或者RAID5结构作为虚拟SSD,用于备份真实SSD中脏数据,虚拟SSD采用日志写的方式,并设置有ram写缓存,下半部分根据用户需要组装成不同RAID结构,用作数据阵列,以存放冷数据;
第二模块,用于建立数据盘和真实SSD缓存之间地址映射哈希查找表,设置计时器,用于定期地将虚拟SSD的ram写缓存中缓存的数据写入到虚拟SSD中;
第三模块,用于接收来自上层文件系统的请求,对于读请求,当读请求不在真实SSD中命中时,从数据阵列中读取数据即可,当读请求在真实SSD中命中时,直接从真实SSD中读出该读请求对应的数据即可,对于写请求,当写请求不在真实SSD中命中时,直接将其写入数据盘中即可,当在真实SSD中命中时,把写请求对应的数据写入到真实SSD,并以日志写方式写入虚拟SSD。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
1.虚拟SSD采用日志写和ram写缓存技术,减少了磁盘磁头移动的开销,减少了虚拟SSD的写次数,其性能和真实SSD相差不大。
2.虚拟SSD是为了通过对真实SSD中脏数据的备份增加可靠性,因此对于读请求不必做出相应,避免了日志写写性能好,而读性能差的不足。
3.对比单一SSD作系统缓存的方案,由于本方法采用虚拟SSD采用日志写方式,同时配有ram写缓存,使得本发明在性能损失很小,仅为5%的情况下,可靠性方面拥有优势;
4.对比两块SSD组成RAID1,共同做系统缓存的方案,本发明由于使用磁盘实现的虚拟SSD,所以,在同样保证可靠性和性能的情况下,在成本开销上拥有优势。
5、本发明方法是一种成本、可靠性、性能三方面兼顾的方法。
附图说明
图1是本发明虚拟SSD与SSD异构镜像的磁盘阵列缓存方法的流程图。
图2是本发明方法虚拟SSD日志写示意图。
图3是本发明方法虚拟SSD空间整理前示意图。
图4是本发明方法虚拟SSD空间整理后示意图。
图5是本发明方法中步骤(3)中的读写流程图。
图6是本发明方法中步骤(3-12)的虚拟SSD日志写流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明的整体思路在于,利用磁盘的性价比优势(相比较SSD)以及顺序访问性能好的特征,把磁盘组成阵列(虚拟SSD),存放真实SSD缓存中数据的副本,与真实SSD构成镜像结构,增加系统的可靠性;同时虚拟SSD采用日志写方式工作,提高虚拟SSD的性能以及为虚拟SSD配备ram写缓存,减少虚拟SSD的IO次数,使之更加接近真实SSD。但是相比较双SSD构成镜像结构具有更实惠的成本开销。
本发明实现过程中用到的变量和相关结构如图2中所示,这里简单介绍,便于后面的描述引用:
cur指针:为虚拟SSD的当前条带指针,每次数据写入的时候,写到cur所指的条带,cur向下移动相应的距离,等待下一次的数据写入,从而实现了虚拟SSD的条带方式的日志写。
虚拟SSD的ram写缓存:收集写请求命中的数据,然后定期地一次性写入虚拟SSD,减少虚拟SSD的IO次数。
reorg指针:为虚拟SSD的碎片整理条带指针,每次碎片整理的时候,从reorg所指的条带开始整理,从真实SSD中读取最新的有效数据,然后重新写到虚拟SSD中cur所指位置,reorg向下移动一个条带的距离,从而实现空间释放。
图2中,在(reorg,cur)区间内的条带中的数据包含真实SSD中脏数据的副本,区间之外均为虚拟SSD的空闲空间。
需要注意的是,出于示例的目的,本发明的数据盘组织成RAID5结构,虚拟SSD是通过磁盘逻辑分区组成RAID0结构。
如图5所示,本发明虚拟SSD与SSD异构镜像的磁盘阵列缓存方法包括以下步骤:
(1)将磁盘进行逻辑分区为两个部分,其中上半部分组成RAID0结构作为虚拟SSD,用于备份真实SSD中脏数据,RAID0结构采用日志写的方式,并设置有ram写缓存,ram写缓存的大小可由用户自行设置;下半部分组装成RAID5结构。RAID5结构用作数据阵列,以存放冷数据。
如图1所示,本发明所应用到的系统包括1个SSD和多个磁盘组成的RAID5,使用SSD做RAID读写缓存,用磁盘上的空闲空间组成一个RAID0副本阵列,即虚拟SSD。真实SSD和虚拟SSD以镜像的方式组织。
本步骤的优点在于,系统不需要额外添加SSD或者其他设备,充当SSD的镜像,不需要额外的开销。
(2)建立数据盘和真实SSD缓存之间地址映射哈希查找表,设置计时器,用于定期(这里称之为写入周期)地将虚拟SSD的ram写缓存中缓存的数据写入到虚拟SSD中。
本步骤的优点在于,用户可以根据不同的可靠性需求和性能需求程度,对写入周期自行设定。
(3)接收来自上层文件系统的请求,对于读请求,当读请求不在真实SSD中命中时,从数据阵列中读取数据即可,当读请求在真实SSD中命中时,直接从真实SSD中读出该读请求对应的数据即可(这样做的优点在于,不会产生虚拟SSD读请求负载,从而也避免了日志写方式下的数据读取性能差的不足),对于写请求,当写请求不在真实SSD中命中时,直接将其写入数据盘中即可,当在真实SSD中命中时(这样就会使SSD中数据变脏,如果没有虚拟SSD,这份数据仅在SSD中存在一份,会有可靠性的问题产生),把写请求对应的数据写入到真实SSD,并以日志写方式写入(这样做的优点在于,由于虚拟SSD采用日志写方式和配备ram写缓存,所以性能损失不会大)。
本步骤具体包括以下子步骤,如图5所示:
(3-1)接收来自上层文件系统的请求,并判断该请求是读请求还是写请求,如果是读请求则转入步骤(3-2),如果是写请求则转入步骤(3-7);
(3-2)根据该读请求的逻辑地址(LogicalBlockAddress,简称LBA)对应的数据块块号在(2)中地址映射哈希查找表中进行查找,判断该表中是否存储有该请求块号对应在真是SSD中块地址,如果存在,则表示该读请求对应的数据块存储在真实SSD中,并进入步骤(3-3),否则表示该读请求对应的数据块没有在真实SSD中缓存,然后转入步骤(3-4);具体而言,读请求的逻辑地址中包括有该读请求对应数据块的块号和块内偏移;
(3-3)从真实SSD中读取该读请求对应的数据块,并将该数据块返回给上层文件系统,过程结束;
(3-4)从数据阵列中读取该读请求对应的数据块,并判断计时器是否达到规定的计时周期(该计时周期是由用户根据性能和可靠性的综合需求自由确定),若到达计时周期,表示需要进行数据阵列中热数据选取和真实SSD中冷数据淘汰,则进入步骤(3-5),否则进入步骤(3-6);
(3-5)根据数据淘汰算法(包括LRU,LFU或其他改进算法等),选取真实SSD中变冷的数据淘汰到数据阵列中,同时作废虚拟SSD中的对应副本,并将数据阵列中变热的数据写入真实SSD中,然后进入步骤(3-6);
(3-6)将该读请求对应的数据块返回给上层文件系统,过程结束;
(3-7)根据该写请求的逻辑地址获得请求块号,根据请求的数据块块号在(2)中地址映射哈希查找表中进行查找,判断该表中是否存储有该请求块号对应在真是SSD中块地址,如果存在,则表示该写请求对应的数据块存储在真实SSD中,发生写命中,并进入步骤(3-11),否则表示该写请求对应的数据块没有在真实SSD中缓存,发生写不命中,然后转入步骤(3-8);
(3-8)将该写请求对应的数据块写入数据阵列中,并判断计时器是否达到规定的计时周期(该计时周期是由用户根据性能和可靠性的综合需求自由确定),若到达计时周期,表示需要进行数据阵列中热数据选取和真实SSD中冷数据淘汰,则进入步骤(3-9),否则进入步骤(3-10);
(3-9)根据数据淘汰算法(包括LRU,LFU或其他改进算法等等),选取真实SSD中变冷的数据淘汰到数据阵列中,并将数据阵列中变热的数据写入真实SSD中,然后进入步骤(3-10);
(3-10)将该写请求对应的数据块返回给上层文件系统,过程结束;
(3-11)将该写请求对应的数据写入其在真实SSD中的对应位置;
(3-12)把该写请求对应的数据以日志写方式写入虚拟SSD中,过程结束。
具体而言,上述步骤(3-12)包括以下子步骤,如图6所示:
(3-12-1)判断虚拟SSD的ram写缓存中数据是否已满(即被动地ram数据写入虚拟SSD条件),并根据计时器判断时间是否达到写入周期的结束(然后进入新一轮周期)(即主动地ram数据写入虚拟SSD条件)。如果数据未满且时间没有到达写入周期的结束(即主动、被动条件均不成立),则进入步骤(3-12-5),如果数据已满或者时间达到写入周期的结束(即主动、被动条件某一成立),则进入步骤(3-12-2);
(3-12-2)判断虚拟SSD空间是否已满(即需要进行空间整理),如果已满,则对虚拟SSD空间进行整理,然后进入步骤(3-12-3),否则,直接进入步骤(3-12-3);
(3-12-3)把虚拟SSD的ram写缓存中缓存的数据整体写入虚拟SSD的当前条带指针cur所指向的条带,清空虚拟SSD的ram写缓存,同时,将虚拟SSD中受影响而变旧的副本数据作废。如图2中过程②所示;
(3-12-4)虚拟SSD的当前条带指针cur向下移动若干条带的距离,移动的距离是由ram缓存了的数据条带数而定,其中若当前条带指针cur超过虚拟SSD的最大条带号,则对该cur指针取模,并使其循环指向第一条带,即cur以循环数组指针的方式存在,如图2中过程③;
(3-12-5)把数据写入虚拟SSD的ram写缓存,过程结束,如图2中过程①所示;
本步骤的优点在于,虚拟SSD采用日志写方式工作,发挥了磁盘顺序访问性能优势,减少磁头频繁移动;虚拟SSD配置ram写缓存,减少了虚拟SSD的IO次数;虚拟SSD空间以条带为单位管理,充分发挥磁盘阵列的并行性。同时,虚拟SSD作为真实SSD镜像,增加了系统的可靠性。
如图2所示,以下结合实例具体描述步骤(3-12)的工作过程:
上述一次日志写的过程如图2所示,IO写请求命中的时候,需要在虚拟SSD中进行日志写操作。
过程①中,上层请求下发的请求数据块的命中重写,首先写入虚拟SSD的ram写缓存中。当虚拟SSD的ram写缓存中数据块已满或者计时达到时间窗口结束的时候,进行从ram写缓存到虚拟SSD的日志写操作,即过程②。
过程②中,如果虚拟SSD中有剩余空闲空间,则把ram写缓存中的数据整体写入虚拟SSD中cur指针所指的条带中,同时修改相应的数据结构,将虚拟SSD中受影响而变旧的副本数据作废,进入过程③。否则,需要调用虚拟SSD空间回收管理模块。
过程③中,需要把虚拟SSD的当前条带指针cur向后移动相应的距离。
举例说明,整个虚拟SSD空间以条带为单位,从0开始编号,某时刻假设初始状态碎片整理指针reorg=0,当前条带指针cur=2。此时有写请求下来,经过判断发生了写命中,命中的是SSD中的2号数据块。这时需要将新数据写入到虚拟SSD的ram写缓存中,然后返回操作完成。此后,发生了5次写命中,分别命中的是SSD中的5,10,7,1,6号数据块,采用相同方式处理。这时ram写缓存数据已满,这时一次性地把其中的数据写入虚拟SSD的cur所指向的条带中,cur指针向下移相应的距离,同时,在虚拟SSD中之前标记2,5,10,7,1,6的副本数据,因为本次ram到虚拟SSD的写操作而变旧作废进而达到了图2所示的状态。
进而言之,步骤(3-12-2)包括以下子步骤:
(3-12-2-1)根据虚拟SSD碎片整理条带指针reorg和当前条带指针cur,判断虚拟SSD中是否有空闲条带(通过cur是否超过reorg一“圈”来判断),即判断reorg==(cur+1)modM是否成立。若成立,表示虚拟SSD空间已满,然后进入步骤(3-12-2-2),否则,过程结束;
(3-12-2-2)遍历虚拟SSD的reorg指针所指向的条带中的每个数据块(如图3中过程①所示),对于包含有效数据的数据块,查找其作为真实SSD数据备份在真实SSD中的源的位置,将其在真实SSD中的源的数据读取出来(如图3中过程②),以与上述步骤(3-12)中形同的日志写的方式将读取得到的数据写入虚拟SSD中(如图3中过程③、④),同时作废虚拟SSD中所有同源的备份数据,避免同源备份数据的重复整理;
(3-12-2-3)虚拟SSD的碎片整理条带指针reorg向下移动一个条带的距离,即释放reorg所指向条带的空间,其中若reorg指针超过虚拟SSD的最大条带号,则对reorg指针取模,并使其循环指向第一条带,即reorg以循环数组指针的方式存在(如图3中过程①),过程结束。
本步骤的优点在于,利用非日志写的真实SSD中的数据来实现虚拟SSD日志写产生的碎片整理过程,避免了单一在虚拟SSD中不同位置的数据块的拼接来找到最新数据的思维,减少了数据拼接的开销;同时,整理过程同样可以响应用户的请求,不会造成阻塞。
虚拟SSD以日志方式写入数据,真实SSD中某个数据块的备份,可能在虚拟SSD中离散的不同位置存在,最极端的情况就是各个数据块只有一个扇区包含有效数据,其他扇区都是旧的无效数据。也就是说这里的SSD某块数据和虚拟SSD中对应的备份是一对多的关系,所以,这里的回收整理会回收虚拟SSD的多个数据块的空间,而重新写入一个数据块的新数据,从而实现空闲空间的增加。
如图3和4所示,以下结合实例具体描述步骤(3-12-2)的工作过程:
如图3所示,初始状态,SSD中有数据块1~12,由于SSD中,数据以一般方式写入,这样1~12数据块只有一份,而此时虚拟SSD中,由于数据块的重写,出现了许多无效的旧的数据块的残留,如图中蓝色斜线标记的块。整理工作,如图3中箭头所示,先从SSD中读取数据,再重新日志方式写入虚拟SSD,这样就变相的删除了旧的无效的数据占用的空间。
过程①,在reorg所指条带中,遍历每个数据块,判断该数据块是否包含有效数据。若不包含,直接忽略。若包含有效数据,进入过程②。
过程②,在SSD中找到对应数据块,读取数据。进入过程③;
过程③,将读取到的数据块,写入虚拟SSD的ram缓存中,同时作废相关的备份数据块。待虚拟SSD的ram缓存中数据已满,进入过程④,从虚拟SSD的ram缓存到虚拟SSD的日志写过程。cur下移相应的距离。
过程①中,遍历结束,reorg下移,指向下一条待整理的条带。
整个整理过程的同时,同样可以接受来上层的IO请求,整理过程其实就是一组特殊的io请求而已。
举例说明,整个虚拟SSD空间以条带为单位,从0开始编号,某时刻假设初始状态碎片整理指针reorg=0,当前条带指针cur=10,如图3。
遍历reorg=0的条带中的数据块,将标记1,4,9的数据块包含全部或者部分的SSD中的备份数据,2,3,7则因为后面的新数据而全部变旧无效,不必整理。将1,4,9从SSD中读出,写入到虚拟SSD的ram写缓存。同时将条带号为1和9中的标记1的数据块作废,因为1号数据块的所有扇区的最新数据全部在虚拟SSD的ram写缓存中存在了。然后reorg下移。
开始整理reorg=1的条带。同理标记7,8,3的数据块包含全部或者部分的SSD中的备份数据,6,5因为后面的新数据而全部变旧无效,不必整理。1则因为上一次整理过程中,将其作废,所以也不用整理,避免重复整理1号数据块。将7,8,3从SSD中读出,写入到虚拟SSD的ram写缓存。同时将条带号为9的标记7的数据块作废,因为7号数据块的所有扇区的最新数据全部在虚拟SSD的ram写缓存中存在了。
此时,虚拟SSD的ram写缓存已满,将其中数据以日志写方式,写到虚拟SSD的当前条带指针cur的位置,然后cur下移,整理后达到图4所示状态。
应该注意的是,前文的所有描述,是以磁盘逻辑分区构建虚拟SSD,数据盘RAID5,虚拟SSD为RAID0为例,但不局限于此。
本方法在单纯的固态盘做缓存的基础上,将逻辑划分的磁盘的一部分或者系统暂时空闲的热备盘组成RAID,存储真实固态缓存盘中脏数据的副本,即虚拟SSD。相比较磁盘逻辑分区组成的虚拟SSD,热备盘组成的虚拟SSD可以从物理上将虚拟SSD和数据盘阵列分离,减小虚拟SSD和数据盘阵列之间性能的影响。为保证磁盘容错效果一样,当下层数据盘阵列为容一个盘错误的RAID,如RAID3,5,10,构成虚拟SSD的RAID等级可以为RAID0;当下层数据盘阵列为容两个盘错误的RAID,如RAID6,构成虚拟SSD的RAID等级可以为RAID5。
针对上层写请求可能造成的数据不一致的可靠性问题,虚拟SSD发挥了重要作用。同时为了使虚拟SSD更接近真实SSD的性能,结合磁盘顺序访问优势,减少磁盘的磁头移动开销,虚拟SSD采用日志写方式,虚拟SSD空间划分成若干条带集,数据以条带为单位,按顺序依次写入条带集。同时为减少虚拟SSD的写次数,为虚拟SSD构造ram写缓存,ram的大小可以自己设置,从而使虚拟SSD更接近真实SSD的性能。而对于上层的读请求,不会造成系统数据不一致的可靠性问题,所以,可以直接从真实SSD中读取数据,不必产生对于虚拟SSD的读操作,不会增加虚拟SSD的负载。
针对虚拟SSD日志写方式产生的虚拟SSD空间旧数据碎片的问题,本方法提供对虚拟SSD进行空间回收整理的功能。利用非日志写的真实SSD中的有效数据来实现虚拟SSD日志写产生的旧数据碎片整理过程,从而避免了单一在虚拟SSD中对新数据读取拼凑的传统思路。另一方面,在整理的过程中,系统依然可以响应上层的请求。
由于采用顺序写的磁盘实现虚拟SSD,本发明既能保留固态盘做缓存的性能优势,又能在节省成本的前提下保证存储系统的可靠性。
本发明虚拟SSD与SSD异构镜像的磁盘阵列缓存系统,包括:
第一模块,用于将磁盘进行逻辑分区为两个部分,其中上半部分组成RAID0或者RAID5结构作为虚拟SSD,用于备份真实SSD中脏数据,虚拟SSD结构采用日志方式,并设置有ram写缓存,下半部分根据用户需要组装成不同RAID结构,用作数据阵列,以存放冷数据;
第二模块,用于建立数据盘和真实SSD缓存之间地址映射哈希查找表,设置计时器,用于定期地将虚拟SSD的ram写缓存中缓存的数据写入到虚拟SSD中;
第三模块,用于接收来自上层文件系统的请求,对于读请求,当读请求不在真实SSD中命中时,从数据阵列中读取数据即可,当读请求在真实SSD中命中时,直接从真实SSD中读出该读请求对应的数据即可,对于写请求,当写请求不在真实SSD中命中时,直接将其写入数据盘中即可,当在真实SSD中命中时,把写请求对应的数据写入真实SSD,并以日志写方式写入虚拟SSD中。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种虚拟SSD与SSD异构镜像的磁盘阵列缓存方法,其特征在于,包括以下步骤:
(1)将磁盘进行逻辑分区为两个部分,其中上半部分组成RAID0或RAID5结构作为虚拟SSD,用于备份真实SSD中脏数据,虚拟SSD采用日志写的方式,并设置有ram写缓存,也可以用独立的磁盘来做虚拟SSD;下半部分根据用户需要组装成不同RAID结构,用作数据阵列,以存放冷数据;
(2)建立数据盘和真实SSD缓存之间地址映射哈希查找表,设置计时器,用于定期地将虚拟SSD的ram写缓存中缓存的数据写入到虚拟SSD中;
(3)接收来自上层文件系统的请求,对于读请求,当读请求不在真实SSD中命中时,从数据阵列中读取数据即可,当读请求在真实SSD中命中时,直接从真实SSD中读出该读请求对应的数据即可,对于写请求,当写请求不在真实SSD中命中时,直接将其写入数据盘中即可,当在真实SSD中命中时,把写请求对应的数据写入到真实SSD,并以日志写方式写入虚拟SSD中;本步骤包括以下子步骤:
(3-1)接收来自上层文件系统的请求,并判断该请求是读请求还是写请求,如果是读请求则转入步骤(3-2),如果是写请求则转入步骤(3-7);
(3-2)根据该读请求的逻辑地址(LogicalBlockAddress,简称LBA)对应的数据块块号在(2)中地址映射哈希查找表中进行查找,判断该表中是否存储有该请求块号对应在真实SSD中块地址,如果存在,则表示该读请求对应的数据块存储在真实SSD中,并进入步骤(3-3),否则表示该读请求对应的数据块没有在真实SSD中缓存,然后转入步骤(3-4);
(3-3)从真实SSD中读取该读请求对应的数据块,并将该数据块返回给上层文件系统,过程结束;
(3-4)从数据阵列中读取该读请求对应的数据块,并判断计时器是否达到规定的计时周期,若到达计时周期,表示需要进行数据阵列中热数据选取和真实SSD中冷数据淘汰,则进入步骤(3-5),否则进入步骤(3-6);
(3-5)根据数据淘汰算法选取真实SSD中变冷的数据淘汰到数据阵列中,同时作废虚拟SSD中的对应副本,并将数据阵列中变热的数据写入真实SSD中,然后进入步骤(3-6);
(3-6)将该读请求对应的数据块返回给上层文件系统,过程结束;
(3-7)根据该写请求的逻辑地址获得请求块号,根据请求的数据块块号在(2)中地址映射哈希查找表中进行查找,判断该表中是否存储有该请求块号对应在真实SSD中块地址,如果存在,进入步骤(3-11),否则转入步骤(3-8);
(3-8)将该写请求对应的数据块写入数据阵列中,并判断计时器是否达到规定的计时周期,若到达计时周期,则进入步骤(3-9),否则进入步骤(3-10);
(3-9)根据数据淘汰算法选取真实SSD中变冷的数据淘汰到数据阵列中,并将数据阵列中变热的数据写入真实SSD中,然后进入步骤(3-10);
(3-10)将该写请求对应的数据块返回给上层文件系统,过程结束;
(3-11)将该写请求对应的数据写入其在真实SSD中的对应位置;
(3-12)把该写请求对应的数据以日志写方式写入虚拟SSD中,过程结束。
2.根据权利要求1所述的磁盘阵列缓存方法,其特征在于,步骤(3-12)包括以下子步骤:
(3-12-1)判断虚拟SSD的ram写缓存中数据是否已满,并根据计时器判断时间是否达到写入周期的结束,如果数据未满且时间没有到达写入周期的结束,则进入步骤(3-12-5),如果数据已满或者时间达到写入周期的结束,则进入步骤(3-12-2);
(3-12-2)判断虚拟SSD空间是否已满,如果已满,则对虚拟SSD空间进行整理,然后进入步骤(3-12-3),否则,直接进入步骤(3-12-3);
(3-12-3)把虚拟SSD的ram写缓存中缓存的数据整体写入虚拟SSD的当前条带指针cur所指向的条带,清空虚拟SSD的ram写缓存,同时,将虚拟SSD中受影响而变旧的副本数据作废;
(3-12-4)虚拟SSD的当前条带指针cur向下移动若干条带的距离,移动的距离是由ram缓存了的数据条带数而定;
(3-12-5)把数据写入虚拟SSD的ram写缓存,过程结束。
3.根据权利要求2所述的磁盘阵列缓存方法,其特征在于,步骤(3-12-4)中,若当前条带指针cur超过虚拟SSD的最大条带号,则对该cur指针取模,并使其循环指向第一条带,即cur以循环数组指针的方式存在。
4.根据权利要求2所述的磁盘阵列缓存方法,其特征在于,步骤(3-12-2)包括以下子步骤:
(3-12-2-1)根据虚拟SSD碎片整理条带指针reorg和当前条带指针cur,判断虚拟SSD中是否有空闲条带,若没有则进入步骤(3-12-2-2),否则,过程结束;
(3-12-2-2)遍历虚拟SSD的reorg指针所指向的条带中的每个数据块,对于包含有效数据的数据块,查找其作为真实SSD数据备份在真实SSD中的源的位置,将其在真实SSD中的源的数据读取出来,以日志写的方式将读取得到的数据写入虚拟SSD中,同时作废虚拟SSD中所有同源的备份数据;
(3-12-2-3)虚拟SSD的碎片整理条带指针reorg向下移动一个条带的距离,过程结束。
5.根据权利要求4所述的磁盘阵列缓存方法,其特征在于,在步骤(3-12-2-3)中,若reorg指针超过虚拟SSD的最大条带号,则对reorg指针取模,并使其循环指向第一条带,即reorg以循环数组指针的方式存在。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310583574.1A CN103645859B (zh) | 2013-11-19 | 2013-11-19 | 一种虚拟ssd与ssd异构镜像的磁盘阵列缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310583574.1A CN103645859B (zh) | 2013-11-19 | 2013-11-19 | 一种虚拟ssd与ssd异构镜像的磁盘阵列缓存方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103645859A CN103645859A (zh) | 2014-03-19 |
CN103645859B true CN103645859B (zh) | 2016-04-13 |
Family
ID=50251086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310583574.1A Active CN103645859B (zh) | 2013-11-19 | 2013-11-19 | 一种虚拟ssd与ssd异构镜像的磁盘阵列缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103645859B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094761B (zh) * | 2014-04-30 | 2018-06-15 | 华为技术有限公司 | 一种数据存储方法和设备 |
CN104572491B (zh) * | 2014-12-30 | 2017-10-17 | 华为技术有限公司 | 一种基于固态硬盘的读缓存管理方法及装置 |
CN104731526B (zh) * | 2015-03-17 | 2017-11-03 | 中国科学院计算技术研究所 | 一种不满条带写的方法及装置 |
CN104731527B (zh) * | 2015-03-17 | 2018-09-07 | 中国科学院计算技术研究所 | 一种三条带状态转换方法 |
CN105260128B (zh) * | 2015-09-11 | 2018-05-29 | 华为技术有限公司 | 一种将数据写入存储设备的方法及存储设备 |
US10540102B2 (en) * | 2016-09-30 | 2020-01-21 | Amazon Technologies, Inc. | Physical media aware spacially coupled journaling and replay |
CN106980469A (zh) * | 2017-03-07 | 2017-07-25 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘顺序写缓存效率的方法 |
CN106980577B (zh) * | 2017-03-20 | 2020-04-28 | 华为机器有限公司 | 输入输出处理方法、装置及终端 |
CN107766463A (zh) * | 2017-09-28 | 2018-03-06 | 北京北信源软件股份有限公司 | 一种多业务驱动的中间件系统的存储处理方法及装置 |
CN107844405B (zh) * | 2017-10-12 | 2021-11-19 | 华为技术有限公司 | 日志处理方法及装置、服务器 |
CN109407975B (zh) * | 2018-09-19 | 2020-08-25 | 华为技术有限公司 | 写数据方法与计算节点以及分布式存储系统 |
CN110968271B (zh) * | 2019-11-25 | 2024-02-20 | 北京劲群科技有限公司 | 一种高性能数据存储方法、系统与装置 |
CN111756828B (zh) * | 2020-06-19 | 2023-07-14 | 广东浪潮大数据研究有限公司 | 一种数据存储方法、装置及设备 |
CN112506445B (zh) * | 2020-12-29 | 2022-05-20 | 杭州电子科技大学 | 一种同质混合固态硬盘的分区比例自适应调整方法 |
CN113778338B (zh) * | 2021-09-13 | 2024-10-11 | 北京东方金信科技股份有限公司 | 分布式存储数据读取效率优化方法、系统、设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010150283A2 (en) * | 2009-06-23 | 2010-12-29 | Indra Networks Pvt. Ltd. | Disk storage performance using digital memory and data compression |
US7971013B2 (en) * | 2008-04-30 | 2011-06-28 | Xiotech Corporation | Compensating for write speed differences between mirroring storage devices by striping |
CN102713828A (zh) * | 2011-12-21 | 2012-10-03 | 华为技术有限公司 | 提供多设备镜像和条带功能的磁盘缓存方法、设备和系统 |
-
2013
- 2013-11-19 CN CN201310583574.1A patent/CN103645859B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7971013B2 (en) * | 2008-04-30 | 2011-06-28 | Xiotech Corporation | Compensating for write speed differences between mirroring storage devices by striping |
WO2010150283A2 (en) * | 2009-06-23 | 2010-12-29 | Indra Networks Pvt. Ltd. | Disk storage performance using digital memory and data compression |
CN102713828A (zh) * | 2011-12-21 | 2012-10-03 | 华为技术有限公司 | 提供多设备镜像和条带功能的磁盘缓存方法、设备和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103645859A (zh) | 2014-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103645859B (zh) | 一种虚拟ssd与ssd异构镜像的磁盘阵列缓存方法 | |
CN103631536B (zh) | 一种利用ssd的无效数据优化raid5/6写性能的方法 | |
CN103136121B (zh) | 一种固态盘的缓存管理方法 | |
US8762622B2 (en) | Enhanced MLC solid state device | |
He et al. | {SMaRT}: An Approach to Shingled Magnetic Recording Translation | |
CN103049222B (zh) | 一种raid5的写io优化处理方法 | |
CN103019958B (zh) | 使用数据属性来管理固态存储器里的数据的方法 | |
CN103458023B (zh) | 分布式闪存存储系统 | |
CN108121503B (zh) | 一种NandFlash地址映射及块管理方法 | |
US8402205B2 (en) | Multi-tiered metadata scheme for a data storage array | |
EP2939120B1 (en) | Priority-based garbage collection for data storage systems | |
CN102646069B (zh) | 一种延长固态盘使用寿命的方法 | |
CN102981963B (zh) | 一种固态盘的闪存转换层的实现方法 | |
CN103425600B (zh) | 一种固态盘闪存转换层中的地址映射方法 | |
CN105339910B (zh) | 在混合驱动器中的虚拟nand容量扩展 | |
US9021222B1 (en) | Managing incremental cache backup and restore | |
US9075754B1 (en) | Managing cache backup and restore | |
CN107066393A (zh) | 提高地址映射表中映射信息密度的方法 | |
CN104794070A (zh) | 基于动态非覆盖raid技术的固态闪存写缓存系统及方法 | |
CN102023809A (zh) | 存储系统、从存储系统读取数据的方法及写入数据的方法 | |
US20180210832A1 (en) | Hybrid drive translation layer | |
CN105955664B (zh) | 一种基于段结构的瓦记录转换层的读写方法 | |
CN111158604B (zh) | 一种闪存颗粒阵列的物联网时间序列数据存储与检索方法 | |
CN102999428A (zh) | 一种瓦记录磁盘的四级编址方法 | |
US20200133543A1 (en) | Locality-aware, memory-efficient, time-efficient hot data identification using count-min-sketch for flash or streaming applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |