本发明公开了一种软件定义的固态盘融合存储方法,在主机端增加主机端融合存储层HFSL(Host?Fusion?Storage?Layer),直接获取固态盘的物理块特性以及使用过程中的统计信息,结合上层数据访问特点进行固态盘的复杂IO调度及管理,以及分配粒度可变的地址映射方法实现固态盘持久化的高性能。本发明在主机端实现对NAND?FLASH的性能优化以及PCM与NAND?FLASH融合的存储管理,利用PCM优秀的性能弥补NAND?FLASH的性能缺点,可提高固态盘读写性能以及使用寿命。
[0001] 本发明属于计算机数据存储领域,具体涉及一种软件定义的固态盘融合存储方法。
[0002] 近些年来,基于NAND FLASH的固态盘飞速发展,已经逐渐取代传统的机械硬盘。NAND FLASH芯片制程工艺不断提高,从2008年的25nm制程到现在的10nm制程,性能不断提高。然而NAND FLASH的磨损次数有限,小写性能差,不支持原地修改等缺陷仍然限制了它的性能。
[0003] 现有的基于NAND FLASH的固态盘,基本上都是利用固态盘中的固件程序屏蔽NANDFLASH的缺点,提供类似磁盘的块设备接口供主机端使用。主机端完全把固态盘看成一个黑盒子,不管其物理特性而直接使用。虽然这是最简单,也是最快的取代传统机械硬盘的方法,但是这存在严重的缺点。例如,在主机端针对机械磁盘设计的IO调度算法将不适用于固态盘,针对机械磁盘设计的文件系统也将不适用于固态盘;由于NAND FLASH的读写操作单位是Page (最小2KB)单位,传统以磁盘扇区大小(512B)为单位的请求发送到固态盘中,导致在固态盘中需要额外的处理请求的合并与分发,降低了存储速度;主机端无法获取固态盘的物理特性、磨损状况、使用信息,无法在文件的管理、地址空间的分配上进行性能优化。除此之外,由于固态盘的控制器需对NAND FLASH进行缺点屏蔽和性能优化,占用了大量的嵌入式系统有限的资源,这是非常不划算的,且因不知主机端数据的特点使得性能提升受限。因此需要重新考虑基于NAND FLASH的固态盘的存储结构设计,向主机暴露更多的物理特性及使用信息,使主机不能再完全把固态盘看成黑盒子,而看成一个灰盒子。
[0004] Fusion-IO公司提出了一种VSL (Visual Storage Layer)层,同样把固态盘看成灰盒子,把FTL (Flash Translation Layer闪存转换层)放在主机端驱动程序下实现,获取了很大的性能提高。但VSL是驱动程序与FTL的结合,实际上到达驱动程序层的IO请求已经不具备那么多的数据属性,在驱动程序中不能有效的针对固态盘的物理特性做优化,并且文件系统层仍然是无法获得固态盘的物理特性及磨损状况等统计信息,限制了固态盘的性能提升。
[0005]目前除了上述的高性能的NAND FLASH存储芯片,新型的非易失存储芯片的发展也非常快,特别是PCM (Phase Change Memory,相变存储器),现在美光公司已经生产有1GB大小的PCM存储芯片。PCM相对于NAND FLASH有很多优势,最突出的就是PCM支持以字节为单位的读写操作,读写速度相对NAND FLASH要快,同时PCM写之前不需要擦除,并且具有更多的可磨损次数。目前PCM还处于研究阶段,关于PCM的研究基本都是用仿真的方法把PCM作为内存的替代或者与内存混合使用。特别是固态盘中,很多研究把PCM作为NANDFLASH的缓存使用,但是这并不能充分发挥PCM的性能优势来弥补NAND FLASH的性能缺点。
[0006] 鉴于此,本发明的目的是在主机端实现对NAND FLASH的性能优化以及PCM与NANDFLASH融合的存储管理,来提高固态盘的整体性能;同时,利用PCM优秀的性能弥补NANDFLASH的性能缺点,提高固态盘读写性能以及使用寿命。
[0007] 本发明提出一种软件定义的固态盘融合存储方法,其中,在基于NAND FLASH的固态盘中融合相变存储器(PCM),所述方法包括以下步骤:
[0008] (1)开机时从固态盘PCM固定区域读取PCM地址映射表和FLASH地址映射表到主机内存中,同时在主机内存中开辟一段固态盘的缓存区,当主机有访问固态盘的请求Q(lsn, size, op, data)时,首先获取 Q.lsn 和 Q.size,根据 Q.lsn 以及 Q.size 判断请求 Q访问的数据是否在缓存区中,其中,Isn是逻辑地址,size是请求大小,op是读写标志,data是数据在主机内存中的地址,即主机端的数据目的地址或源地址,如果命中,对于读请求,把数据从缓存区中拷贝到data地址,对于写请求,把data地址数据拷贝到缓存区中,转入步骤(8);如果没命中,对于读请求,转入步骤(2),对于写请求,如果缓存区没有满,直接把data地址处的数据拷贝到缓存区中,转入步骤(8),否则进行缓存区替换更新操作,转入步骤(3);
[0010] (2)获取读请求的Q.lsn和Q.size,查找PCM与FLASH地址映射表进行地址转换,转入步骤(6),其中,对于访问PCM的读请求,产生以PCM最优写粒度大小(如512B)为单位的读操作请求序列;对于访问FLASH的读请求,产生以FLASH物理页大小的读操作请求序列;
[0011] (3)设从缓存区中替换出来的请求为q,判断q.size的大小,如果q.size < NANDPAGE SIZE,转入步骤(4),否则转入步骤(5);
[0012] (4)根据请求q.lsn的访问次数和访问时间,判断q.lsn访问数据的冷热性:如果是热数据,给q.lsn分配PCM磨损次数较少的物理地址;否则给q.lsn分配PCM磨损次数较多的物理地址;产生以PCM最优写粒度大小(如512B)为单位的写请求序列,并转入步骤(6);
[0013] (5)根据请求q.lsn的访问次数和访问时间,判断q.lsn访问数据的冷热性:如果是热数据,给q.lsn分配FLASH磨损次数较少的物理地址;否则给q.lsn分配FLASH磨损次数较多的物理地址;产生以FLASH页大小单位的写请求序列,并转入步骤(6);
[0014] (6)获取(2)、(4)、(5)中产生的请求序列,根据请求中的物理地址将所述请求序列分别添加到固态盘对应通道上的循环请求队列尾,当定时器到来时,把当前通道上的请求发送给固态盘处理;
[0015] (7)检测是否有完成中断,如果检测到中断,表示请求已经处理完成,转入步骤(8);
[0016] (8)返回完成给请求Q。
[0017] 本发明还提出一种主机融合存储层(HFSL)系统,用于对文件系统访问固态盘的请求进行管理,所述固态盘基于NAND FLASH并融合了相变存储器(PCM),所述系统包括:
[0018] 地址映射管理模块,在主机内存中维持PCM地址映射表和NAND FLASH地址映射表,采用分配粒度可变的地址映射方法把PCM与NAND FLASH的地址分配给所述请求中的写请求;
[0019] IO调度管理模块,用于把所述请求分发到固态盘的各个物理通道,所述物理通道包括PCM和NAND FLASH的多个通道,其中,为固态盘的每个物理通道维持一个循环请求队列;
[0020] 缓存区管理模块,对主机内存中开辟的固态盘的缓存区进行管理,当文件系统访问固态盘的请求到来时,判断该请求的数据是否命中,如果命中就把缓存区中的数据返回给文件系统;否则,就把请求交给地址映射管理模块处理,地址映射管理模块对请求进行地址转换获取实际的物理地址,然后IO调度管理模块把请求挂到对应通道的循环请求队列尾部。
[0021] 相对于现有技术,本发明具有以下有益效果:
[0022] (I)固态盘对于主机不再是透明的,主机能获取固态盘的物理特性及数据分布信息,针对其做性能优化;
[0023] (2)采用PCM与NAND FLASH的融合存储方法,PCM作为NAND FLASH同级存储器,在PCM中存放小写数据,以及地址映射表等元数据信息,或需快速访问、频繁访问的热数据等,提高了固态盘的小写性能,同时也提高固态盘的启动速度。同时PCM作为固态盘中NANDFLASH的上级缓存,提升固态盘性能。相对于传统以DRAM作为缓存的固态盘,PCM与NANDFLASH的融合存储还能保证数据的一致性,提高固态盘的可靠性;
[0024] (3)在主机端驱动与文件系统之间实现了一层融合存储中间层一HFSL,HFSL能获取PCM与NAND FLASH的物理特性及数据分布信息,并且针对PCM与NAND FLASH融合存储的物理特性,在HFSL中实现了地址映射、IO调度策略、垃圾回收,磨损均衡等高效存储管理,提高了固态盘的整体性能;
[0025] (4) PCM与NAND FLASH融合存储的固态盘中,只需要完成简单的读、写、擦除等简单操作而不需要在固件中实现复杂的IO调度等管理策略算法,这样能简化固态盘自身的控制管理,便于固态盘硬件体系结构快速创新,使其能集中资源专注控制并行处理PCM与NAND FLASH的基本操作,提高了固态盘的读写速度。
[0028] 下面结合附图对本发明实施例进一步详细说明。
[0029] 总体而言,本发明主要基于两点:一是在主机端实现融合存储层一HFSL (HostFusion Storage Layer),实现对固态盘灵活的IO调度及管理策略以及性能优化,简化固态盘体系结构;二是在基于NAND FLASH的固态盘中融合PCM存储,其中,PCM既可以作为NANDFLASH的同级存储器用于存放固态盘的元数据信息,也可以用于存放小写数据、或访问频繁的热数据等,同时PCM还可以作为NAND FLASH的上级缓存使用,提升固态盘性能。
[0030] 进一步地,本发明基于以下原理:在主机驱动程序与文件系统之间实现HFSL中间层,主机访问固态盘的请求需要经过HFSL的处理,转换成读、写、擦除等简单操作发送给固态盘;在固态盘内部只处理读、写、擦除等简单请求,不需要进行过多的地址转换、垃圾回收、磨损均衡、IO请求的重新分发与组合等复杂的调度及管理算法。针对PCM与NANDFLASH融合存储的物理特性,在HFSL中设计了融合管理的地址映射以及IO调度算法。除此之外,HFSL还具有类似传统固态盘中基本的缓存管理、垃圾回收、磨损均衡等复杂的IO调度功倉泛。
[0031] 图1为本发明实施例的系统结构示意图。其中,主机融合存储层(HFSL)包括三个模块:地址映射管理模块、IO调度管理模块和缓存区管理模块。
[0032] 地址映射管理模块的功能主要是合理地把PCM与NAND FLASH的地址分配给写请求。其中,由于读请求已经有固态盘的物理地址,所以无需分配,而写请求只知道固态盘的逻辑地址,具体的物理地址需要由地址映射模块分配。PCM地址映射表和NAND FLASH地址映射表存放在固态盘的PCM中的固定区域,地址映射管理模块在主机内存中维持上述地址映射表。开机时从PCM固定区域读取地址映射表到主机内存中,关机时把内存中地址映射表中修改了的地址映射条目写回到固态盘PCM固定区域中。除一部分地址物理空间用于存放上述地址映射表以及访问的元数据信息(它们在主机端融合存储层中对主机透明)以外,PCM的其余物理地址与NAND FLASH地址统一编址。在特定实施例中,采用分配粒度可变的地址映射方法进行地址分配:NAND FLASH地址段采用粗粒度的地址映射,以NAND FLASH的物理页大小为地址映射单位;PCM地址段采用以PCM最优写粒度大小为单位的细粒度的地址映射,即以小于页的单位(如512B)为地址映射单位。
[0033] 在进行地址映射时主要考虑三个方面的因素:
[0034] (I)当接收到文件系统访问固态盘的请求时,判断请求访问数据的大小是否小于阈值,如果小于阈值则该请求为小写请求,否则该请求为大写请求,对于小写请求,分配PCM的物理地址,对于大写请求分配NAND FLASH的物理地址;
[0035] (2)统计PCM与NADN FLASH的磨损次数,在进行地址分配时,判断数据的冷热性,如果是冷数据就分配到磨损次数较多的物理块地址,否则就分配到磨损次数较少的物理块地址;
[0036] (3)在进行地址分配时,以条带的方式分配,把连续的逻辑地址分配到固态盘的不同物理通道上。
[0037] 此外,还可以在地址映射管理模块中融入磨损均衡以及垃圾回收操作。
[0038] IO调度管理模块的主要功能是把请求分发到固态盘的各个物理通道。物理通道包括多个PCM通道和多个NAND FLASH通道。IO调度管理模块为固态盘的每个物理通道维持一个循环请求队列。请求经过地址映射之后,对于PCM的请求都是以PCM最优写粒度大小(如512B)为单位的请求序列,对于NAND FLASH的请求都是以NAND FLASH的物理页大小为单位的请求序列。对于IO调度管理模块,根据物理地址计算出通道号,并把请求添加到对应的PCM和NAND FLASH通道循环队列尾部。IO调度管理模块中设置定时器,当定时器到来时把循环请求队列上的请求发送给固态盘。当检测到固态盘有完成中断时,就会查询循环请求队列上请求的完成状态,如果完成了,就从循环请求队列上删除该请求。
[0039] 缓存区管理模块用于对主机内存中开辟的固态盘缓存区进行管理。因为PCM与NAND FLASH的读速度比较快,在特定实施例中,可以设计只写缓存区,即只缓存那些经常被写的数据。当文件系统访问固态盘的请求到来时,可以根据逻辑地址查找平衡二叉树或其它方法判断该请求的数据是否命中,如果命中就把缓存中的数据返回给文件系统。如果在缓存区中没有找到数据,就把请求交给地址映射模块处理,地址映射模块对请求进行地址转换获取实际的物理地址,然后IO调度管理模块把请求挂到对应通道的循环队列尾部。其中,可以采用平衡二叉树来管理缓存数据。另外,在特定实施例中,与传统固态盘内部缓存区不同,HFSL缓冲区采用512B粒度大小管理,而不是传统的以NAND FLASH的物理页大小来管理。同时,因为主机内存资源丰富,可以把缓存区容量尽量设置大些,以能够缓存更多的写数据。
[0040] 图2为本发明实施例的方法流程图。开机时主机融合存储层(HFSL)从固态盘PCM固定区域读取PCM地址映射表和FLASH地址映射表到主机内存中,同时在主机内存中开辟一段固态盘的缓存区。
[0041] 假设主机访问固态盘的请求Q(lsn, size, op, data), Isn是逻辑地址,size是请求大小,op是读写标志,例如为0表示写,为I表示读,data是数据在主机内存中的地址即主机端的数据目的地址或源地址。针对请求Q,具体处理过程如下所示:
[0042] (I)当接收到主机访问固态盘的请求Q时,首先获取Q.lsn和Q.size,根据Q.lsn以及Q.size判断请求Q访问的数据是否在缓存区中。如果命中,对于读请求,把数据从缓存区中拷贝到data地址,对于写请求,把data地址数据拷贝到缓存区中,转入步骤(8)。如果没命中,对于读请求,转入步骤(2),对于写请求,如果缓存区没有满,直接把data地址处的数据拷贝到缓存中,转入步骤(8),否则进行缓存区替换更新操作,转入步骤(3)。其中,可以利用查找平衡二叉树或其它方法判断该请求的数据是否命中。
[0043] (2)获取读请求的Q.lsn和Q.size,查找PCM与FLASH地址映射表进行地址转换。对于访问PCM的读请求产生以PCM最优写粒度大小(如512B)为单位的读操作请求序列;对于访问FLASH的读请求产生以FLASH物理页大小的读操作请求序列,转入步骤(6)。
[0044] (3)设从缓存区中替换出来的请求为q,判断q.size的大小,如果q.size〈NANDPAGE SIZE,转入步骤(4),否则转入步骤(5)。
[0045] (4)根据请求q.lsn的访问次数frequency和访问时间recency,判断q.lsn访问数据的冷热性。如果是热数据,给q.lsn分配PCM磨损次数较少的物理地址;否则给q.lsn分配PCM磨损次数较多的物理地址。产生以PCM最优写粒度大小(如512B)为单位的写请求序列,转入步骤(6)。其中,如果PCM没有足够的物理空间,则把PCM中的数据复制到NANDFLASH中,并且修改对应的地址映射条目。
[0046] (5)根据请求q.lsn的访问次数frequency和访问时间recency,判断q.lsn访问数据的冷热性。如果是热数据,给q.lsn分配FLASH磨损次数较少的物理地址;否则给q.lsn分配FLASH磨损次数较多的物理地址。产生以FLASH页大小单位的写请求序列,转入步骤(6)。
[0047] (6)获取(2)、(4)、(5)中产生的请求序列,根据请求中的物理地址分别添加到固态盘对应通道上的循环请求队列尾。当定时器到来时,把当前通道上的请求发送给固态盘处理。
[0048] (7)检测是否有完成中断,如果检测到中断,表示请求已经处理完成,转入步骤(8)。
[0049] ( 8 )返回完成给请求Q。
[0050] 最后,关机时把缓存区中的数据以及内存中PCM地址映射表和FLASH地址映射表中修改了的地址映射条目写回到固态盘的相应区域中。
[0051] 由此可见,本发明提出的方法中,PCM与NAND FLASH融合存储,PCM不仅可以用于NAND FLASH同级存储器,存放访问固态盘的小写数据以及固态盘的元数据信息,或访问频繁的热数据等,亦可以作为固态盘中NAND FLASH的上级缓存使用,从而提升固态盘整体性能。同时,在主机端融合存储层HFSL针对PCM与NAND FLASH的物理特性,结合数据请求特点进行数据布局与性能优化,简化固态盘自身的控制管理,便于固态盘硬件体系结构快速创新,实现PCM与NAND FLASH融合的灵活、高效、可靠存储。
SRC=https://www.google.com/patents/CN103777905A
一种软件定义的固态盘融合存储方法,布布扣,bubuko.com
原文:http://www.cnblogs.com/coryxie/p/3894999.html