一种软件定义的固态盘融合存储方法

本发明公开了一种软件定义的固态盘融合存储方法,在主机端增加主机端融合存储层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

一种软件定义的固态盘融合存储方法

时间: 2024-10-07 17:19:57

一种软件定义的固态盘融合存储方法的相关文章

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基

像素的存储方法、显式创建Mat对象的七种方法

一.像素的存储方法: 存储像素值需要指定颜色空间和数据类型.其中,颜色空间是指针对一个给定的颜色,如何组合颜色元素以对其编码. 最简单的颜色空间要属灰度级空间,只处理黑色和白色,对他们进行组合便可以产生不同程度的灰色. 对于彩色方式则有更多种类的颜色空间,但不论哪种方式都是把颜色分成三个或者四个基元素,通过组合基元素可以产 生所有的颜色.RGB颜色空间是最常见的一种颜色空间,这归功于它也是人眼内部构成颜色的方式.它的基色是红色.绿色 和蓝色,有时为了表明透明颜色也会加入第四个元素alpha. 颜

请问一下这三种存储方法的区别?原理是什么样子的?哪一种比较好,能不能提供一些意见。谢谢

public String nickName; public Integer userId; public String login(){ //登录之后 方法1. userId = user.getId();nickName = user.getNickName(); 方法2. this.getResRequest().setAttribute("userId", userId); this.getResRequest().setAttribute("nickName&quo

Android 存储文件方式之一---SharedPreferences 内容提供者,以xml 的方式进行数据 存储。是一种轻量级的文件数据存储

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 //UI界面的布局 文件<br><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"

Colours–颜色库,包含100种预定义的颜色和方法

简介 Colours–颜色库,包含各种100种预定义的颜色和方法,可以简化颜色相关的开发工作. 项目主页: Colours 最新示例: 点击下载 快速入门 安装 通过Cocoapods安装 pod 'Colours' 手动安装 把 Colours.h 和 Colours.m拖进你的工程里,在需要的地方引入头文件即可: #import "Colours.h" 使用 调色板,一组预定义的颜色 具体可点击这里查看: 100个预定义的颜色 使用预定义的颜色 Colours 预定义了100 多种

一种简单实用的全屏方法

实现程序全屏幕显示的思路有很多种,最常见的一种就是: 1)利用Windows API提供的一个结构体WINDOWPLACEMENT来存储全屏显示前视图和主框架窗口在屏幕上的位置和显示信息.非客户区窗口的显隐信息,以便全屏幕显示时恢复窗口原状: 2)通过API函数GetDesktopWindow()得到桌面窗口,由GetWindowRect()得到显示器的尺寸: 3)通过AdjustWindowRect()来计算当客户区大小为屏幕大小时相应的窗口大小: 4)通过SetWindowPlacement

一种智能卡封装框架的电镀方法

一种智能卡封装框架的电镀方法,属于电子信息技术领域.其特征在于:本发明将成型框架进行前处理之后,再在框架接触层电镀1.8~2.2μm厚的镍层,再在镍层的基础上电镀0.4~0.8μm的磷镍合金层,之后再在框架接触面的磷镍合金层外电镀0.009~0.05μm厚的金层.本发明提高了产品接触表面的耐磨性和抗腐蚀性.本发明可以减少硬金的厚度,并取消后处理的使用,大大节约成本. 1.一种智能卡封装框架的电镀方法,其特征在于,接触层电镀工艺步骤为: 1.1.前处理:对成型框架的铜面进行表面清洗,除去铜面上的油

几种常用的本地话存储方式

概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 沙盒 在介绍各种存储方法之前,有必要说明以下沙盒机制.iOS程序默认情况下只能访问程序自己的目录,这个目录被称为"沙盒". 1.结构 既然沙盒就是一个文件夹,那就看看里面有什么吧

unity中三种调用其他脚本函数的方法

第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用-- 第二种,GameObject.Find("脚本所在物体名").SendMessage("函数名");  此种方法可以调用public和private类型函数 第三种,GameObject.Find("脚本所在物体名").GetComponent<脚本名>().函数名();此种方法只可以调用public类型函数 unity中三种调用其他脚本函数的