CN108959113A - 用于闪存感知堆存储器管理的方法和*** - Google Patents
用于闪存感知堆存储器管理的方法和*** Download PDFInfo
- Publication number
- CN108959113A CN108959113A CN201810473339.1A CN201810473339A CN108959113A CN 108959113 A CN108959113 A CN 108959113A CN 201810473339 A CN201810473339 A CN 201810473339A CN 108959113 A CN108959113 A CN 108959113A
- Authority
- CN
- China
- Prior art keywords
- block
- flash memory
- segments
- equipment
- physical
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种用于闪存感知堆存储器管理的方法,包括:在至少一个处理的存储器空间中保留具有大小等于基于闪存的按字节寻址设备的大小的连续虚拟空间。所述方法还包括由主机设备将基于闪存的按字节寻址设备的存储器空间划分为多个块。每个块包括多个逻辑片段。所述主机设备从与应用相关联的线程接收存储器分配请求。所述主机设备从所述多个块中确定与所述多个块中的其他块相比包括最不空闲的逻辑片段的至少一个块。所述主机设备将包括最不空闲的逻辑片段的至少一个块分配给线程。
Description
技术领域
本公开涉及一种存储器管理。更具体地,本公开涉及一种用于闪存感知堆存储器管理的方法和主机设备。本申请基于2017年5月17日提交的第201741017338号印度申请并且要求其优先权,该印度申请的公开内容通过引用整体并入于此。
背景技术
许多应用(例如,大数据分析、金融实时交易应用、在线游戏应用等)依赖于大的随机存取存储器(RAM)大小,以将巨量频繁访问的对象(例如,索引、查找表、键值对等)缓存在RAM中,从而在主机设备(例如,膝上型、桌面型、计算机、服务器等)中实现高性能。这已经导致了对于动态随机存取存储器(DRAM)的需求的增长。然而,DRAM的成本非常高。为了解决主机设备中的存储器管理,已经出现了基于闪存的按字节寻址存储器设备。
通常,基于闪存的按字节寻址存储器设备(例如,非易失性双列直插式存储器模块-P(NVDIMM-P)包括DRAM缓存和NAND存储主干(storage back bone)。DRAM缓存和NAND存储主干连接到双列直插存储器模块(DIMM)接口。与普通的DRAM相比,DRAM缓存和NAND存储主干的访问延迟可能更高。与DRAM相比,基于闪存的按字节寻址存储器设备具有有限的寿命。基于闪存的按字节寻址存储器设备的动态存储器分配(即,堆(heap),与用于静态存储器分配的堆栈相比)与传统的堆分配相比具有不同的挑战。以下列出了挑战:
(a)设备访问延迟-不同于DRAM,基于闪存的按字节寻址存储器设备访问可以具有可变的延迟。如果数据在设备缓存中,则基于闪存的按字节寻址存储器设备访问立即地提供服务;但是如果数据不存在于设备缓存中,则基于闪存的按字节寻址存储器设备访问需要从闪存读取,而导致了可变的延迟。
(b)有限的寿命-较高的缓存刷新率(flush rate)导致较高的NAND页写入,其转而影响主机设备的寿命。当分配尺寸低于设备缓存线大小时,缓存线可能利用不足(underutilization),其导致写入放大(write amplification)并且因此导致较低的寿命。另外,当传统的分配器被用于基于闪存的按字节寻址存储器设备时,针对分配的物理映射可以跨越到一些随机物理页中。这导致了对更多NAND页的访问。
(c)元数据开销-传统的分配器针对具有大容量的主机设备的元数据开销巨大。元数据布局、安置和访问施加了挑战,因为其将导致缓存颠簸(cache trashing)。
传统的分配器不在存储器的不同区域之间进行区分;所有区域被期望为具有一致的访问延迟。当传统的分配器被用于基于闪存的按字节寻址存储器设备时,对于应用对象的物理分配可以跨越到一些随机物理页中,因此导致更多的NAND页访问。此外,随机访问导致设备缓存未命中(cache miss)/设备缓存加载情形的增加,其将增加主机设备的延迟。
在操作***中请求分页可能导致连续的物理页在不同的处理中被映射到不同的虚拟地址。这将导致多线程环境中较高的缓存颠簸,从而增加访问延迟。
因此,期望解决以上提及的不利或其他缺点,或者至少提供有益的替选。
发明目的
本文中的实施例的主要目的是提供一种用于闪存感知堆存储器管理的方法和主机设备。
本文中的实施例的另一目的是从按字节寻址的基于闪存的存储器设备中分配动态存储器。
本文中的实施例的另一目的是使用基于闪存的按字节寻址设备来有效地扩展***存储器而不对主机设备的吞吐带来任何主要的影响。
本文中的实施例的另一目的是优化基于闪存的按字节寻址存储器设备的访问延迟。
本文中的实施例的另一目的是减少分配器针对大容量设备的元数据开销。
发明内容
根据实施例,一种用于闪存感知堆存储器管理的方法包括:在至少一个处理的存储器空间中保留具有大小等于基于闪存的按字节寻址设备的大小的连续虚拟空间。此外,该方法包括由主机设备将基于闪存的按字节寻址器件的存储器空间划分为多个块(chunk)。每个块包括多个逻辑片段(segment)。此外,该方法包括由主机设备从与应用相关联的线程接收存储器分配请求。此外,该方法包括由主机设备从多个块中确定与多个块中的其他块相比包括最不空闲的逻辑片段的至少一个块。此外,该方法包括由主机设备将包括最不空闲的逻辑片段的至少一个块分配给线程。
根据实施例,一种用于闪存感知堆存储器管理的方法包括:由主机设备将基于闪存的字节可寻址设备划分为多个块。每个块包括多个逻辑片段。此外,该方法包括由主机设备存储所划分的基于闪存的按字节寻址设备的多个逻辑到物理(LTP)条目。LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备中的物理地址的映射。此外,该方法包括由主机设备将多个块中的块的逻辑片段中的每个与基于闪存的按字节寻址设备中的物理片段映射。此外,该方法包括由主机设备执行以下之一:当逻辑片段与物理片段映射时,检查物理片段中的所有页表格条目(PTE);或者当逻辑片段未与物理片段映射时保留物理片段。
根据实施例,一种用于闪存感知堆存储器管理的主机设备包括:处理器、主机存储器控制器以及主机存储器分配器。主机存储器控制器被配置为在至少一个处理的存储器空间中保留具有大小等于基于闪存的按字节寻址设备的大小的连续虚拟空间。此外,主机存储器控制器被配置为将基于闪存的按字节寻址设备的存储器空间划分为多个块,其中,每个块包括多个逻辑片段。此外,主机存储器控制器被配置为从与应用相关联的线程接收存储器分配请求。主机存储器分配器被配置为从多个块中确定与多个块中的其他块相比包括最不空闲的逻辑片段的至少一个块。此外,主机存储器分配器被配置为将线程分配给包括最不空闲的逻辑片段的至少一个块。
根据实施例,一种用于闪存感知堆存储器管理的主机设备包括:处理器、主机存储器控制器、逻辑到物理(LTP)地址控制器以及设备驱动器。主机存储器控制器被配置为将基于闪存的按字节寻址设备划分为多个块,其中,每个块包括多个逻辑片段。LTP地址控制器被配置为存储所划分的基于闪存的按字节寻址设备的多个LTP条目。LTP条目中的每个代表基于闪存的按字节寻址设备中的逻辑地址到物理地址映射。设备驱动器被配置为将多个块中的块的逻辑片段中的每个与基于闪存的按字节寻址设备中的物理片段映射。设备驱动器被配置为执行以下之一:当逻辑片段与物理片段映射时检查物理片段中的所有PTE;或者当逻辑片段未与物理片段映射时保留物理片段。
当结合以下描述和附图进行考虑时,将更好地领会并且理解本文中实施例的这些和其他方面。然而,应当理解,以下描述以示意的而非限制性的方式给出,虽然其指示了优选实施例及其许多特定细节。可以在本文中的实施例的范围内进行各种改变和修改而不背离其精神,并且本文中的实施例包括所有这样的修改。
附图说明
在附图中示出了闪存感知堆存储器管理,贯穿附图,相似的附图标记指示各个图中相对应的部件。根据参考附图进行的以下描述,将会更好地理解本文中的实施例,在附图中:
图1是示出根据本文中公开的实施例的用于闪存感知堆存储器管理的主机设备的框图;
图2是示出根据本文中公开的实施例的闪存感知堆分配器的框图;
图3是示出根据本文中公开的实施例用于闪存感知堆存储器管理的各种操作的流程图;
图4是示出根据本文中公开的实施例的用于闪存感知堆存储器管理的各种操作的另一流程图;
图5示出根据本文中公开的实施例的虚拟空间中的块和片段;
图6示出根据本文中公开的实施例的元数据组织的概述;
图7示出根据本文中公开的实施例的按空闲大小排序树的表示;
图8示出根据本文中公开的实施例的片段树和片段信息关系;
图9示出根据本文中公开的实施例的用于空闲块的线程访问中心仓库(repository);
图10是根据本文中公开的实施例的查找片段的示例图示;
图11是根据本文中公开的实施例的用于存储器分配处理的各种操作的流程图;
图12是根据本文中公开的实施例的用于存储器重新分配(de-allocation)处理的各种操作的流程图;
图13示出根据现有技术的虚拟分配和物理页映射;
图14示出根据本文中公开的实施例的虚拟分配和物理页映射;
图15a示出根据现有技术的由于传统的堆分配器的设备缓存线利用不足;
图15b示出根据本文中公开的实施例的设备缓存线的更好的利用;
图16是根据本文中公开的实施例解释设备缓存占用空间(footprint)减少的示例图示;
图17是根据本文中公开的实施例解释在页错误期间基于片段的分配的示例图示;以及
图18示出根据本文中公开的实施例的片段中的预分配。
具体实施方式
参考在附图中示出的并且在以下描述中详述的非限制性实施例来更加全面地解释本文中的实施例及其各种特征和优点的详情。省略对公知的组件和处理技术的描述以便不会不必要地模糊本文中的实施例。另外,本文中描述的各种实施例不必然地互相排斥,因为一些实施例可以与一个或多个其他实施例结合以形成新的实施例。本文中使用的术语“或”指代非排他性的或,除非另外指示。本文中的示例仅意图便于对可以实践本文中的实施例的方式的理解并且进一步使得本领域技术人员能够实践本文中的实施例。因此,示例不应当被解释为限制本文中的实施例的范围。
如本领域中传统的那样,可以按照实施所描述的一个或多个功能的块(block)为单位来描述并且示出实施例。这些块——在本文中可以被称为单元或模块等——通过诸如逻辑门、集成电路、微处理器、微控制器、存储器电路、无源电子组件、有源电子组件、光学组件、硬接线电路等的模拟或数字电路物理地实施,并且可以可选地通过固件和软件来驱动。例如,电路可以具体化在一个或多个半导体芯片中,或者支撑诸如印刷电路板的基板上,等等。构成块的电路可以通过专用硬件、或通过处理器(例如,一个或多个编程的微处理器和相关联电路)、或通过执行块的一些功能的专用硬件与执行块的其他功能的处理器的组合来实施。实施例的每个块可以物理地分离为两个或更多个交互的且离散的块,而不背离本文中所描述的发明的范围。同样地,实施例的块可以物理地组合为更复杂的块,而不背离本文中所描述的发明的范围。
附图用于帮助容易地理解各种技术特征,并且应当理解本文中所呈现的实施例不受附图限制。这样,本公开应当被解释为除了在附图中具体地阐述的那些之外还扩展到任何改变、等效和替代。尽管术语第一、第二等在本文中可以用于描述各种元件,但是这些元件不应当受这些术语限制。这些术语通常仅用于将一个元件与另一个元件相区分。
本文中的实施例公开了一种用于闪存感知堆存储器管理的方法。该方法包括:在一个或多个处理的存储器空间中保留具有大小等于基于闪存的按字节寻址设备的大小的连续虚拟空间。此外,该方法包括:由主机设备将基于闪存的按字节寻址设备的存储器空间划分为多个块。每个块包括多个逻辑片段。此外,该方法包括:由主机设备从与应用相关联的线程接收存储器分配请求。此外,该方法包括:由主机设备从块中确定与块中的其他块相比包括最不空闲的逻辑片段的至少一个块。此外,该方法包括:由主机设备向线程分配包括最不空闲的逻辑片段的至少一个块。作为结果,可以通过向请求线程分配具有最不空闲的逻辑片段的至少一个块来对当前分配请求提供服务。
不同于传统的方法和***,本文中所描述的方法可以用于从按字节寻址的基于闪存的存储器设备中分配动态存储器。本文中所描述的方法可以用于最小化元数据开销和访问延迟。本文中所描述的方法可以用于通过最大化针对应用的设备缓存命中来最小化访问延迟。
不同于传统的方法和***,本文中所描述的方法可以用于在处理地址空间中保留具有等于设备容量的大小的虚拟空间。虚拟空间被分隔为元数据区域和用户区域。用户区域被分割为多个块,每个块被分割为(多个)片段(即,NAND页的簇(bunch))。每个用户线程总是与块的集合相关联。本文中所描述的方法可以用于从与线程相关联的当前块中分配存储器,以便确保在该块中选择最不空闲片段的同时,针对该分配查找到最佳的匹配。这导致元数据开销和访问延迟的最小化。
本文中所描述的方法可以用于以针对应用的片段的粒度来确保虚拟空间和物理空间的连续性。通过操作***级别的预分配和页表操纵来确保物理连续性。这帮助主机存储器分配器将最小数量的基于闪存的按字节寻址设备页关联到应用对象。引入物理存储器页的预分配以避免碎片化的物理空间。虚拟片段与物理片段的1:1映射被用于最小化元数据开销和访问延迟。
通过保留等于设备容量并且具有连续的虚拟空间、固定的块和片段大小,本文中所描述的方法可以保持用于元数据管理的索引(不是精确的虚拟地址)。采用这样的索引和静态元数据进行工作帮助减少元数据开销问题。另外,分离的元数据区域帮助减少缓存颠簸。在一些情况中,一些元数据区域被固定到设备缓存,从而避免对于频繁参考的元数据的重复的加载。
与单纯基于DRAM的解决方案相比,本文中所描述的方法可以用于扩展***存储器而不对吞吐量产生任何主要的影响。本文中所描述的方法可以用于以成本有效的方式减少物理服务器的数量和维护。
本文中所描述的方法中,将借助于驱动器来在处理的虚拟存储器空间中预分配一个基于闪存的按字节寻址设备的大小的连续虚拟区域,将仅从预分配的区域中提供对主机设备的分配。这将在虚拟空间中提供将为连续的分配。这将帮助降低主机存储器分配器的元数据开销,因为主机存储器分配器可以使用基于索引的过程来访问所分配的区域。这导致主机存储器分配器对较少虚拟区域进行操作,其转而导致较少的元数据和较少的缓存污染。
本文中所描述的方法可以用于减少每线程针对元数据要被访问的NAND页的数量。该方法可以用于减少所分配的基于闪存的按字节寻址设备页中的无用(garbage)区域。
现在参考附图,并且更具体地参考图1至图18,这些是所示出的优选实施例。
图1是示出根据本文中公开的实施例用于闪存感知堆存储器管理的主机设备100的框图。主机设备100可以是例如但不限于膝上型计算机、平板式计算机、个人数字助理(PDA)、智能电话、服务器等。在实施例中,主机设备100包括闪存感知堆分配器110、应用120、OS 130(操作***)、处理器140。主机设备100与基于闪存的按字节寻址设备150通信。
在实施例中,闪存感知堆分配器110被配置为在存储器空间中保留具有大小等于基于闪存的按字节寻址设备150的大小的连续虚拟空间。当在存储器空间中保留具有大小等于基于闪存的按字节寻址设备150的大小的连续虚拟空间之后,闪存感知堆分配器110被配置为将基于闪存的按字节寻址设备150的存储器空间划分为多个块。每个块包括多个逻辑片段。此外,闪存感知堆分配器110被配置为从与应用120(例如,社交网络应、金融实时交易应用、在线游戏应用、大数据分析应用等)相关联的线程接收存储器分配请求。此外,闪存感知堆分配器110被配置为从块中确定与块中的其他块相比包括最不空闲的逻辑片段的至少一个块。此外,闪存感知堆分配器110被配置为将包括最不空闲的逻辑片段的至少一个块分配给线程。作为结果,可以通过将具有最不空闲的逻辑片段的至少一个块分配给请求线程来对当前存储器分配请求提供服务。
在实施例中,至少一个块的片段中的每个在存储器空间中连续地分配并且等于至少一个设备页的大小。
在实施例中,与应用120相关联的所有线程被分配给多个块中的至少一个块。
在实施例中,与块中的其他块相比,块中的最不空闲的块被首先分配。最不空闲的块可以是具有最不空闲的逻辑片段的块,但是替选地,可以是其全面地为最不空闲的不同块。
在实施例中,逻辑片段对应于基于闪存的按字节寻址设备页,其中,逻辑片段中的每个代表在基于闪存的按字节寻址设备150处所存储的连续物理范围。
在实施例中,闪存感知堆分配器110被配置为存储多个LTP条目。LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备150中的物理地址的映射。此外,闪存感知堆分配器110被配置为将块中的每个的逻辑片段中的每个与基于闪存的按字节寻址设备150中的物理片段映射。在实施例中,闪存感知堆分配器110被配置为当逻辑片段与物理片段映射时检查物理片段中的所有PTE。
在示例中,对于属于片段S1的页P1触发页错误,因此检查与片段S1中的每个页相对应的所有PTE以查看其是否有效。如果至少一个条目有效,则其意味着存在映射。提取有效的PTE以查找到物理片段编号,并且还可以在该片段中查找到相对应的物理页编号。该方法不需要维持任何数据结构,使得不存在元数据开销。
在另一实施例中,闪存感知堆分配器110被配置为当逻辑片段未与物理片段映射时保留物理片段。
在实施例中,存储器空间被配置为将元数据存储在基于闪存的按字节寻址设备150的元数据分区中,其中,在基于闪存的按字节寻址设备150中,元数据分区与用户分配的部分分离。
在实施例中,通过基于索引的数据结构来管理连续的虚拟空间。
在实施例中,逻辑片段中的每个包括至少一个所分配的页,其中,如果至少一个物理页尚未被分配,则所分配的逻辑片段从其他逻辑片段借用至少一个物理页。
在实施例中,与基于闪存的按字节寻址设备150共享逻辑片段中的至少一个未被使用的逻辑片段的信息,以移除至少一个未被使用的逻辑片段的映射。
在实施例中,闪存感知堆分配器110被配置为将大小为基于闪存的按字节寻址设备150的大小的应用120的虚拟空间的一部分划分为块。此外,闪存感知堆分配器110被配置为存储所划分的基于闪存的按字节寻址设备的LTP条目,其中,LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备150中的物理地址的映射。此外,闪存感知堆分配器110被配置为将块中的块的逻辑片段中的每个与基于闪存的按字节寻址设备150的物理片段映射。在实施例中,闪存感知堆分配器110被配置为当逻辑片段与物理片段映射时检查物理片段中的所有PTE。在另一实施例中,闪存感知堆分配器110被配置为当逻辑片段未与物理片段映射时保留物理片段。
OS 130在页错误期间以4KB(RAM页)为单位来分配物理页。处理器140与闪存感知堆分配器110、应用120、OS 130和基于闪存的页地址设备150通信。
尽管图1示出了主机设备100的硬件组件,但是要理解其他实施例不限于此。在其他实施例中,主机设备100可以包括更少或更多的硬件组件。此外,硬件组件的标签或名称仅用于示意的目的,并且不限制本文中所描述的发明的范围。一个或多个组件可以组合在一起以执行相同或基本上相似的功能,以执行主机设备100中的闪存感知堆存储器管理。
图2是示出根据本文中公开的实施例的闪存感知堆分配器110的框图。在实施例中,闪存感知堆分配器110包括主机存储器控制器110a、主机存储器分配器110b、LTP地址控制器110c以及设备驱动器110d。主机存储器控制器110a被配置为在存储器空间中保留具有大小等于基于闪存的按字节寻址设备150的大小的连续虚拟空间。此外,主机存储器控制器110a被配置为将基于闪存的按字节寻址设备150的存储器空间划分为块。此外,主机存储器控制器110a被配置为从与应用120相关联的线程接收存储器分配请求。
在从与应用120相关联的线程接收存储器分配请求作为当前分配请求之后,主机存储器分配器110b被配置为在从块中确定与块中的其他块相比包括最不空闲的逻辑片段的至少一个块。在从块中确定与块中的其他块相比包括最不空闲的逻辑片段的至少一个块之后,主机存储器分配器110b被配置为将包括最不空闲的逻辑片段的至少一个块分配给线程。
在实施例中,以最佳匹配的方式来实施存储器分配,即,主机存储器分配器110b被配置为在初始阶段选择可以提供最佳匹配的片段。在两个片段都可以对存储器分配请求提供服务的情况下,主机存储器分配器110b被配置为依赖于最不空闲的片段来进行选择。这将确保使用最小数量的闪存设备页。
在实施例中,如果缓存线大小>4K(RAM页大小),则存在缓存线利用不充分的可能性,使得将从之前的未占满的缓存线提供接下来的“小的”分配。
在实施例中,当发现片段未被使用时,将其从设备缓存解除固定(有资格收回)。
此外,LTP地址控制器110c被配置为存储LTP条目,其中,LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备150中的物理地址的映射。设备驱动器110d被配置为将块中的每个的逻辑片段中的每个与基于闪存的按字节寻址设备150中的物理片段映射。在实施例中,设备驱动器110d被配置为当逻辑片段与物理片段映射时检查物理片段中的所有PTE。在另一实施例中,设备驱动器110d被配置为当逻辑片段未与物理片段映射时保留物理片段。
在实施例中,如果PTE中的至少一个被填充,则设备驱动器110d指示片段已经被保留。从现存的PTE中提取片段编号,并且针对当前的错误分配相对应的页。
在实施例中,如果相同虚拟片段中的任何PTE都未被填充,则意味着针对虚拟片段未分配物理片段,然后设备驱动器110d进行分配新的物理片段并且采用新近分配的物理片段来填充相对应的PTE。
尽管图2示出了闪存感知堆分配器110的硬件组件,要理解的是其他实施例不限于此。在其他实施例中,闪存感知堆分配器110可以包括更少或更多的硬件组件。此外,硬件组件的标签或名称仅用于示意性的目的并且不限制本文中所描述的发明的范围。一个或更多个组件可以被组合在一起以执行相同或基本上相似的功能,从而执行主机设备100中的闪存感知堆存储器管理。
图3是示出根据本文中公开的实施例的用于闪存感知堆存储器管理的各种操作的流程图300。在302,该方法包括在用于一个或多个处理的存储器空间中保留具有大小等于基于闪存的字节可寻址存设备150的大小的连续的虚拟空间。在实施例中,该方法允许主机存储器控制器110a在存储器空间中保留具有大小等于基于闪存的按字节寻址设备150的大小的连续虚拟空间。在304,该方法包括将基于闪存的字节可寻址的设备150的存储器空间划分为块。在实施例中,该方法允许主机存储器控制器110a将基于闪存的按字节寻址设备150的存储器空间划分为块。
在306,该方法包括从与应用120相关联的线程接收存储器分配请求。在实施例中,该方法允许主机存储器控制器110a从与应用120相关联的线程接收存储器分配请求。在308,该方法包括从块中确定与块中的其他块相比包括最不空闲的逻辑片段的至少一个块。在实施例中,该方法允许主机存储器分配器110b从块中确定与块中的其他块相比包括最不空闲的逻辑片段的至少一个块。
在310,该方法包括将包括最不空闲的逻辑片段的至少一个块分配给线程。在实施例中,该方法允许主机存储器分配器110b将包括最不空闲的逻辑片段的至少一个块分配给线程。
可以按照所呈现的顺序、不同的顺序或者同时地来执行流程图300中的各种动作、行为、块、步骤等。此外,在一些实施例中,动作、行为、步骤等中的一些可以被省略、添加、修改、跳过等,而不背离本文中所描述的发明的范围。
图4是示出根据本文中公开的实施例的用于闪存感知堆存储器管理的各种操作的流程图400。在402,该方法包括将基于闪存的按字节寻址设备150的大小划分为块。在实施例中,该方法允许主机存储器控制器110a将基于闪存的按字节寻址设备150划分为块。在404,该方法包括存储所划分的基于闪存的按字节寻址设备的多个LTP条目。在实施例中,该方法允许LTP地址控制器110c存储所划分的基于闪存的按字节寻址设备的LTP条目。
在406,该方法包括将块中的块的逻辑片段中的每个与基于闪存的按字节寻址设备150中的物理片段映射。在实施例中,该方法允许设备驱动器110d将块中的块的逻辑片段中的每个与基于闪存的按字节寻址设备150中的物理片段映射。
在408,该方法包括当逻辑片段与物理片段映射时检查物理片段中的所有PTE。在实施例中,该方法允许设备驱动器110d当逻辑片段与物理片段映射时检查物理片段中的所有PTE。
在410中,该方法包括当逻辑片段未与物理片段映射时保留物理片段。在实施例中,该方法允许设备驱动器110d当逻辑片段未与物理片段映射时保留物理片段。
该方法可以被用于将针对线程的分配维持为彼此尽可能地接近。保持分配彼此接近将减少从闪存到缓存所需要的加载。另外,该空间定域性帮助减少缓存使用率,其与分配被远离散布的情况相反。
该方法可以用于分配来自与线程相关联的当前块的存储器。其尝试确保在选择该块中的最不空闲的片段的同时,针对分配查找到最佳匹配。如果在当前块中未查找到最佳匹配,则该方法可以用于尝试在与线程相关联的其他块当中查找不同的块(另外的最不空闲的),其可以提供最佳匹配。可以采用该策略来减少设备内部的写入放大以及保持较低的碎片率。
以块级别处理元数据。空间定域性的另外的益处是最小化用于应用的块,以便减少元数据使用率。另外,通过将区域分割为块,可以按照模块化的方式来处理元数据。每个用户线程与少量块相关联,以便消除针对元数据访问的锁定竞争和互相依赖。
在本文中所描述的方法中,分离的元数据区域帮助降低缓存颠簸。一些元数据区域被固定到设备缓存,从而避免针对频繁参考的元数据的重复加载。
通过操作***级别的预分配和页表操纵来确保物理连续性。这帮助分配器将最小数量的闪存设备页关联到应用对象。
引入物理存储器页的预分配以避免碎片化的物理空间。保持虚拟片段与物理片段的1:1映射。在片段内遍历操作***页表条目以建立映射的物理片段。如果对物理片段进行映射,则通过得到片段内的偏移来建立映射。如果不存在映射,则该方法保留设备上的物理片段,并且在操作***中进行页映射;针对相同虚拟片段保留片段中的所有其他页。
该方法可以用于在分配新块之前从相关联的块分配存储器,以便对由来自主机设备100的线程(和处理)进行的虚拟空间使用率最小化。
可以按照所呈现的顺序、不同的顺序或者同时地来执行流程图400中的各种动作、行为、块、步骤等。此外,在一些实施例中,动作、行为、步骤等中的一些可以被省略、添加、修改、跳过等,而不背离本文中所描述的发明的范围。
图5示出了根据本文中公开的实施例的虚拟空间中的块和片段。图6示出了根据本文中公开的实施例的元数据组织的概述。
本文中所描述的方法可以用于在处理地址空间中保留大小等于设备容量的虚拟空间。虚拟空间可以被分离为元数据区域和用户区域,如图6所示。用户区域被分割为多个块,其中,每个块被分割为片段的集合(即,NAND页的簇)。每个用户线程总是与块的集合相关联。
基本上,块是多个片段,并且片段等于如一个或多个闪存设备页的大小。片段是代表一些连续逻辑闪存设备页的实体。能够使得库做出尝试最小化闪存设备页的数量的方案现在将与最小化片段的数量类似。
在实施例中,线程特定的信息将包含关于其保持的块的信息。线程特定的信息还保持块的按空闲大小排序的树。在需要改变当前块指针时,该树将帮助进行快速决定。
线程特定的信息将不会被存储在基于闪存的按字节寻址设备150上而是存储在DRAM上。这背后的原因在于:闪存感知堆分配器110想要针对基于闪存的按字节寻址设备150上的任何元数据保持静态分配。线程特定的信息不可能静态分配,因为这会导致将线程的数量限制(cap)为特定的数量。
使用按空闲大小排序的树来查找该块。这里基本的思想是节点Y的空闲大小Sy>=Sx并且Sz>Sy。这是将如何如图7所示对树进行排序。
全局块信息阵列:以阵列形式保存所有块的信息。每个阵列索引指示块,即,阵列元素编号“1”代表关于块“1”的信息。
块信息:本文中所描述的方法可以用于以线程级别提供堆存储器的动态分配和重新分配。这意味着线程将能够针对其分配和重新分配具有其自身特定的块。这能够使得不同的线程对其自身进行操作而不必担心竞争/锁定,从而减少延迟。块信息将包含关于块到线程的映射的信息。需要该映射以解决在空闲的情况下块属于哪个线程。
除此之外,本文中所描述的方法维持两个阵列:片段树阵列和片段信息阵列。
A.片段信息阵列:阵列[0.…S-1]
B.片段树:阵列[0…..S-2]
片段树用作具有隐含链接的S-1节点的平衡二叉树。片段树将具有详情,如片段中的总空闲空间和子树中的可服务块。对于每个块需要片段信息阵列和片段数据。
凭借具有连续的虚拟空间、固定块和片段大小,该方法可以用于保持用于元数据的索引(不是精确的虚拟地址),如图6中所示。该方式类似于通过文件***进行的元数据维护。采用索引和静态数据进行工作帮助将开销降低到最小。
图8示出根据本文中的实施例的片段树和片段信息关系。
使用来自片段信息结构的信息来创建片段树。片段树元素提供关于以下两类事物的数据,即:子树中的最不空闲空间(可以是两个或更多个块)以及子树中可用的大小分类。该信息帮助快速查找在任何片段中存在可服务的块并且适当地进行选择。
片段信息和空闲块数据结构:每个片段将具有保持空闲块的哈希阵列。元素的数量将是大小分类的数量。每个存储桶(bucket)(或阵列的元素)基本上保持在特定大小分类的片段内相对于空闲块的偏移。该空闲块然后将具有到相同大小分类的另一空闲块的链接,如果其存在于该片段中的话。以这种方式,产生特定大小分类的所有空闲块的链接。
集中块仓库:本文中所描述的方法可以被用于维持集中块仓库。考虑针对每个线程的空闲块与非空闲块的比率。每当该比率增加超过阈值时,库会将少量空闲块移动到中心(central)仓库。每当线程需要新块时,其将在集中块仓库中进行查找。图9示出了用于新空闲块的线程访问中心仓库。
图10是根据本文中公开的实施例查找片段的示例图示。
考虑用户知道要参考那个块,并且现在正在查找该片段。
假定需要大小分类1的对象。处理将如下进行。
a)参考块信息以查看大小分类1是否可以由块中的片段树使用。通过检查ST1元素来对此进行检查。这给出对整个片段的考量。
b)这里,用户可以看到大小分类1在由ST1代表的子树中任何位置中可用。
c)此外,主机设备100的用户检查ST1的子代(children)->ST2和ST3,主机设备100的用户可以观察到ST2和ST3两者在其子树中大小分类1可用,但是最小的大小在ST3中,其为3k。
d)此外,主机设备100的用户检查由ST3代表的片段3和片段4,并且选择片段4,因为其具有可用的大小分类1并且片段3的空闲空间>片段4的空闲空间。
请求大小小于CHUNK_SIZE:当请求大小小于CHUNK_SIZE时进行以下处理。
a)库针对每个线程维持当前块。这将得到对请求快速地进行服务的块。
b)然后,访问片段树以检查使用当前块是否可以实际地服务传入请求。
c)如果块可以服务传入请求,则继续以查找其可以进行服务的片段。
d)片段选择背后的构思是尝试依赖于块的大小来对块请求进行最佳匹配。当尝试与已经使用并且最不空闲的片段匹配时,本文中所描述的方法执行上述步骤。
e)以这种方式将多个对象聚集在单个片段中。
f)该方法可以用于更新片段树和片段信息的数据结构。
g)然而,如果当前块指针不可以服务当前请求,则该方法需要查找另外的块。
h)该方法可以用于从线程特定的块当中查找另外的块。
i)将使用按空闲大小排序的树来完成查找块。
j)该方法可以用于遍历树以查找到也可以保持传入请求的合适的块。
k)现在其将变为当前块,并且之后,用于块的分配的处理与以上相同。
l)如果线程不具有其他块或者其他块不可以对请求进行服务,则
1.如果在中心池中存在任何块,则从中心池中取出新块,或者
2.通过mmap新块来取出新块。
m)一旦知道块和片段,则库将查找哈希表,以及在所需要的大小分类中查找块并且从哈希存储桶中移除该块。
n)一旦选择了块,则写入指示块的大小和之前的链接的报头。
请求大小大于CHUNK_SIZE:该处理与当请求大小较小时略有不同。这是由于该方法仍然可以在块级别进行操作的事实。
a)对于大于块大小的任何大小,库将其向上取整为CHUNK_SIZE的倍数。
b)该方法需要上述那么多的连续块。
c)该方法从空闲块开始对象。
d)针对整个区域创建对象报头。这存在于第一块的第一片段中。
e)所有其他块将被指示为已经完全使用。
f)因此,大的对象横跨作为一个单元的多个块。
g)然而,在内部其将被维护为离散的块。
图11是根据本文中公开的实施例的针对存储器分配处理的各种操作的流程图1100。通过闪存感知堆分配器110来执行操作(1102-1140)。
考虑线程不具有可以对请求进行服务的任何块的情形。在这种情况下,主机控制器110a和主机存储器分配器110b需要向线程指派新块。通过使用mmap来完成新块到线程。mmap基本上返回块地址。这是块的存储器区域的起始地址。然后,一旦获得信息,则可以使用块。
这需要对与块相关的数据结构的设置以及对其的初始化。这还包括向由线程所保持的块的列表添加块。因为该块现在将被用于对请求进行服务,所以处理将该块标记为当前块。当前块是用于记住从其对最近的分配请求进行了服务的块的方式。这避免了线程为了找到其通过块的列表进行迭代。
在1102,该方法包括分配大小。在1104,该方法包括确定大小是否大于块大小。如果大小大于块大小,则在1106,该方法包括计算针对该大小所需要的块的数量。在1108,该方法包括从中心池获得如上述那么多的块,如果其可获得的话。在1110,该方法包括映射剩余数量的新块,如果其存在的话。在1112,该方法包括针对新块创建合适的块数据结构实例。在1114,该方法包括向用户空间分配整个大小。
如果大小不大于块大小,则在1116,该方法包括确定当前块是否可以对应用120进行服务。如果当前块可以对应用120进行服务,则在1118,该方法包括检测片段。在1120,该方法包括获得片段中的块。在1122,该方法包括对应用120分配块。
如果当前块不可以对应用120进行服务,则在1124,该方法包括确定线程具有其他块。如果线程具有其他块,则在1126,该方法包括确定针对该线程的任何其他块可以对应用120进行服务。如果针对线程的任何其他块可以对应用120进行服务,则在1128,该方法包括将该所发现的块确定为当前块。
如果线程不具有块,则在1130,方法包括确定中心池具有块。如果中心池具有块,则在1132,该方法包括提供来自中心池的块作为当前块。
如果中心池不具有块,则在1134,通过使用mmap完成块到线程。在1136,方法包括创建合适的数据结构,并且在1138,该方法包括将该块添加到线程块。在1140,该方法包括提供该块作为当前块。
可以按照所呈现的顺序、不同的顺序或者同时地来执行流程图1100中的各种动作、行为、块、步骤等。此外,在一些实施例中,动作、行为、步骤等中的一些可以被省略、添加、修改、跳过等,而不背离本文中所描述的发明的范围。
图12是示出根据本文中公开的实施例的用于存储器重新分配处理的各种操作的流程图1200。通过闪存感知堆分配器110执行操作(1202-1226)。在1202,该方法包括检测该块空闲。在1204,该方法包括通过参考报头来确定块的大小。在1206,该方法包括确定大小是否小于CHUNK_SIZE。如果大小不小于CHUNK_SIZE,则在1208,该方法包括确定块从该对象起始。
在1210,该方法包括针对除了最后的块之外的所有块使得整个块空闲。在1212,该方法包括针对最后的块将由所分配的块所覆盖的区域提供为空闲。在1214,该方法包括将块添加到合适的哈希存储桶。在1216,该方法包括更新片段树,并且在1218,该方法包括对按空闲大小排序的块树重新进行排序。在1220,该方法包括使用地址确定其属于的块和片段,并且在1222,该方法包括确定邻近的块空闲。如果邻近的块空闲,则在1224,该方法包括从哈希存储桶中移除邻近的空闲块。在1226,该方法包括将邻近的块合并到合适大小的分类。
可以按照所呈现的顺序、不同的顺序或者同时地来执行流程图1200中的各种动作、行为、块、步骤等。此外,在一些实施例中,动作、行为、步骤等中的一些可以被省略、添加、修改、跳过等,而不背离本文中所描述的发明的范围。
对象大小小于CHUNK_SIZE:在该情况下,当对象大小小于CHUNK_SIZE时,库执行下述。
a)当空闲发生时,针对该大小来参考对象报头。
b)如果大小小于CHUNK_SIZE,则该方法可以被用于使用地址参数(argument)来确定块和片段。
c)完成对于邻近的块的合并。
d)这是必要的,因为该方法应当能够对相对较大的请求进行服务。否则,针对例如8字节分配形成的块将总是需要如那样使用。
e)该方法可以被用于更新哈希存储桶、片段树等。
f)该方法还应当对按空闲大小排序的块树进行重新排序。
对象大小大于CHUNK_SIZE:在这种情况下,存在形成对象的多个块。库清空作为对象的一部分的每个单一块,并且使得其针对任何类型的请求可用。
a)如果大小大于CHUNK_SIZE,则方法知道接下来多少块是该对象的部分。
b)该方法可以用于使用地址来确定起始块。
c)该方法可以用于清空块中的每个以使得他们由其自身使用。
传统的分配可能导致随机物理页映射,如图13所示。本文中所描述的方法将会将虚拟片段中的连续页映射到相对应的物理片段中的连续物理页。针对应用120,在物理空间和虚拟空间两者中所确保的连续性的粒度以片段为单位,如图14所示。
片段的概念引入了片段中页的预分配(保留)作为预分配的页。这些页是现在未被使用并且被期望将在将来使用的页。在某一情形中,用户堆分配器将连续地分配很多虚拟区域,但是用户访问将仅发生在这些区域的随机页中。这可能导致以下情形,其中,物理页由于其大多数为针对将来的访问被预分配的页或被保留的页而不可用。这导致被称为保留的页的抢断(stealing)的概念。
页抢断意味着保留的页而不是期望的页被用于虚拟页的映射(分配)。当空闲列表中的页的数量低于阈值时发生。
页抢断需要以页(4K)的粒度来保持元数据信息,并且关于被抢断以及被保留但是未被抢断的页的信息也被保持在元数据中。这导致了巨大的元数据开销,并且这么多的元数据不可能被保持在***DRAM中。
关于未被使用的(空闲的)片段的信息可以被传递到设备作为DISCARD(丢弃)命令。这将帮助设备移除针对这些片段的映射。这将大大地减少设备固件的元数据开销。DISCARD命令可以由驱动器针对相同的片段发出。
图15a示出了传统堆分配器的设备缓存线的利用不充分。缓存线的利用不充分导致写入放大,并且因此,导致基于闪存的设备的较低的寿命(即,较高的缓存刷新率导致较高的NAND页写入,其转而影响主机设备100的寿命。由于缓存线的利用不充分的NAND页的读取-修改-写入的增加导致写入放大并且因此导致较低的寿命)。
图15b示出了根据如本文中公开的实施例的设备缓存线的更好的利用。存储器分配仅发生在针对线程保留的块中。这些块未被用于针对其他线程的分配。这帮助避免锁定/资源的竞争等。这导致了由于缓存线的更好的利用的NAND页的读取-修改-写入的降低,以及主机设备100的寿命的增加。
图16是根据如在本文中公开的实施例解释设备缓存占用空间(footprint)的减少的示例图示。片段的概念将减少处理的设备缓存占用空间。不期望的要被加载的缓存线的数量将大大地减少,如图16的图示“b”中所示,反之,图16的图示“a”示出了设备缓存线中的多个不期望的缓存线的使用。该方法可以用于通过在片段中给予连续的物理页分配来最小化NAND页访问,使得针对对于基于闪存的按字节寻址设备的任何操作,可以最小化NAND页加载的数量。
如图17中所示地解释在页错误期间基于片段的分配。对于页错误,设备驱动器110d检查虚拟片段是否已经被映射到物理片段。主机存储器分配器110b检查相同片段中的所有PTE。如果不存在映射,则设备驱动器110d保留设备上的物理分段,并且在OS 130中进行页映射,片段中的所有其他页被置于保留状态。
图18示出了根据如本文中公开的实施例的片段中的预分配。每当针对片段中的虚拟页发生页错误时,连同针对该请求指派物理页一起,最接近的物理页的数量也暂时地被保留在相同片段中。这些页不可用于针对其他片段的分配,直到出现存储器不足的情形。因此,如果针对相同片段中的任何其他页发生页错误,则查找到保留页并且将其映射到虚拟地址。这对于在虚拟空间和物理空间两者中均为连续的片段具有影响。
具体的实施例的前述描述将全面地揭示本文中的实施例的一般性质,使得其他人通过应用当前知识可以针对各种应用来修改和/或适用这样的具体的实施例而不背离一般构思,并且因此,这样的适用和修改应当意图于并且将意图于被理解为在所公开的实施例的等价形式的含义和范围内。将理解,本文中所采用的措辞或术语出于描述性而非限制性的目的。因此,虽然就优选的实施例而言描述了本文中的实施例,但是本领域技术人员将意识到可以采用如在本文中描述的实施例的精神和范围内的修改来实践本文中的实施例。以下描述实施例的变形的示例。
在实施例中,至少一个块的片段中的每个在存储器空间中连续地分配,并且等于至少一个连续设备页的大小。
在实施例中,与应用相关联地所有线程被连续地分配给多个块中的至少一个块,并且线程仅从被指派给其的块中进行分配。
在实施例中,与应用相关联的每个线程被指派有多个块中的至少一个块,其中,从块中分配的线程被指派给应用。
在实施例中,与多个块中的其他块相比,多个块中最不空闲的块被首先分配。
在实施例中,多个逻辑片段对应于设备页。逻辑片段中的每个代表在基于闪存的按字节寻址设备处所存储的连续的物理范围。
前块是否可,其中,与相关联的块中的多个片段中的其他片段相比,多个片段中对当前分配请求提供服务的最不空闲的片段被首先分配。
在实施例中,当前分配请求被转译(translate)为片段内可用的预定义分配大小中的一个。
在实施例中,设备页被固定(pinned)到设备缓存。
在实施例中,该方法包括由主机设备存储多个逻辑至物理(LTP)条目。LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备中的物理地址的映射。此外,该方法包括由主机设备将块中的每个的逻辑片段中的每个与基于闪存的按字节寻址设备中的物理片段映射。此外,该方法包括由主机设备执行以下之一:当逻辑片段与物理片段映射时,检查物理片段中的所有页表格条目(PTE);或者当逻辑片段未与物理片段映射时保留物理片段。
在实施例中,存储器空间被配置为将元数据存储在基于闪存的按字节寻址设备中的元数据分区中,其中,在基于闪存的按字节寻址设备中元数据分区与用户分配的部分分离。
在实施例中,通过基于索引的数据结构来管理连续的虚拟空间。
在实施例中,逻辑片段中的每个包括至少一个分配的页,其中,如果至少一个物理页尚未被分配,则新近分配的逻辑片段可以从其他逻辑片段借用至少一个物理页。
在实施例中,与基于闪存的按字节寻址设备共享多个未被使用的片段中的至少一个片段的信息,以便设备使用该信息来操纵其映射表。
Claims (20)
1.一种用于闪存感知堆存储器管理的方法,包括:
在至少一个处理的存储器空间中保留具有大小等于基于闪存的按字节寻址设备的大小的连续虚拟空间;
由主机设备将基于闪存的按字节寻址设备的存储器空间划分为多个块,其中,每个块包括多个逻辑片段;
由主机设备从与应用相关联的线程接收存储器分配请求;
由主机设备从所述多个块中确定与所述多个块中的其他块相比包括最不空闲的逻辑片段的至少一个块;以及
由主机设备将包括最不空闲的逻辑片段的至少一个块分配给线程。
2.根据权利要求1所述的方法,其中,所述至少一个块的每个片段在存储器空间中连续地分配,并且等于至少一个连续设备页的大小。
3.根据权利要求1所述的方法,其中,与应用相关联的每个线程被指派有所述多个块中的至少一个块,其中,从块中被分配的所述每个线程被指派给应用。
4.根据权利要求1所述的方法,其中,所述多个逻辑片段对应于设备页,其中,所述逻辑片段中的每个代表在基于闪存的按字节寻址设备处所存储的连续的物理范围。
5.根据权利要求1所述的方法,还包括:
由主机设备存储多个逻辑到物理(LTP)条目,其中,LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备中的物理地址的映射;
由主机设备将块中的每个的逻辑片段与基于闪存的按字节寻址设备中的物理片段映射;以及
由主机设备执行以下之一:当逻辑片段与物理片段映射时,检查物理片段中的所有页表格条目(PTE);或者当逻辑片段未与物理片段映射时保留物理片段。
6.根据权利要求1所述的方法,其中,存储器空间被配置为将元数据存储在基于闪存的按字节寻址设备中的元数据分区中,其中,在基于闪存的按字节寻址设备中元数据分区与用户分配的部分分离。
7.根据权利要求1所述的方法,其中,与多个线程当中的每个线程相关的信息被存储在主机存储器中。
8.根据权利要求1所述的方法,其中,所述逻辑片段中的每个包括至少一个分配的页,其中,如果至少一个物理页尚未被分配,则分配的逻辑片段从其他逻辑片段借用所述至少一个物理页。
9.根据权利要求1所述的方法,其中,与基于闪存的按字节寻址设备共享所述多个片段中的所述至少一个片段未被使用的信息,以便主机设备使用该信息来操纵映射表。
10.一种用于闪存感知堆存储器管理的方法,包括:
由主机设备将基于闪存的字节可寻址设备划分为多个块,其中,每个块包括多个逻辑片段;
由主机设备存储基于闪存的按字节寻址设备的多个逻辑到物理(LTP)条目,其中,LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备中的物理地址的映射;
由主机设备将所述多个块中的块的逻辑片段中的每个与基于闪存的按字节寻址设备中的物理片段映射;以及
由主机设备执行以下之一:当逻辑片段与物理片段映射时,检查物理片段中的所有页表条目(PTE);或者当逻辑片段未与物理片段映射时保留物理片段。
11.根据权利要求10所述的方法,其中,所述逻辑片段中的每个包括至少一个预分配的页,其中,当空闲列表中的页的数量低于阈值时,预分配的页中的至少一个被映射到至少一个虚拟页。
12.一种用于闪存感知堆存储器管理的主机设备,包括:
处理器;
主机存储器控制器,被配置为:
在至少一个处理的存储器空间中保留具有大小等于基于闪存的按字节寻址设备的大小的连续虚拟空间;
将基于闪存的按字节寻址设备的存储器空间划分为多个块,其中,每个块包括多个逻辑片段;以及
从与应用相关联的线程接收存储器分配请求;和
主机存储器分配器,被配置为:
从所述多个块中确定与所述多个块中的其他块相比包括最不空闲的逻辑片段的至少一个块;以及
将包括所述最不空闲的逻辑片段的至少一个块分配给线程。
13.根据权利要求12所述的主机设备,其中,所述至少一个块的片段中的每个在存储器空间中连续地分配,并且等于至少一个连续设备页的大小。
14.根据权利要求12所述的主机设备,其中,与应用相关联的每个线程被指派有所述多个块中的至少一个块,其中,从块中分配的线程被指派给应用。
15.根据权利要求12所述的主机设备,其中,所述多个逻辑片段对应于设备页,其中,逻辑片段中的每个代表在基于闪存的按字节寻址设备处所存储的连续的物理范围。
16.根据权利要求12所述的主机设备,还包括:
逻辑到物理(LTP)地址控制器,被配置为:
存储多个逻辑到物理(LTP)条目,其中,LTP条目中的每个代表逻辑地址到基于闪存的按字节寻址设备中的物理地址的映射;
设备驱动器,被配置为:
将块中的每个的逻辑片段中的每个与基于闪存的按字节寻址设备中的物理片段映射;并且
执行以下之一:当逻辑片段与物理片段映射时,检查物理片段中的所有页表格条目(PTE);或者当逻辑片段未与物理片段映射时保留物理片段。
17.根据权利要求15所述的主机设备,其中,所述设备页被固定到设备缓存。
18.根据权利要求12所述的主机设备,其中,与多个线程当中的每个线程相关的信息被存储在主机存储器中。
19.根据权利要求12所述的主机设备,其中,所述逻辑片段中的每个包括至少一个分配的页,其中,如果至少一个物理页尚未被分配,则分配的逻辑片段从其他逻辑片段借用所述至少一个物理页。
20.根据权利要求12所述的主机设备,其中,与基于闪存的按字节寻址设备共享所述多个片段中的至少一个片段未被使用的信息,以便主机设备使用该信息来操纵映射表。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN201741017338 | 2017-05-17 | ||
IN201741017338 | 2017-05-17 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108959113A true CN108959113A (zh) | 2018-12-07 |
CN108959113B CN108959113B (zh) | 2023-08-29 |
Family
ID=64272246
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810473339.1A Active CN108959113B (zh) | 2017-05-17 | 2018-05-17 | 用于闪存感知堆存储器管理的方法和*** |
Country Status (3)
Country | Link |
---|---|
US (1) | US10824555B2 (zh) |
KR (1) | KR102498668B1 (zh) |
CN (1) | CN108959113B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10783085B1 (en) | 2019-03-01 | 2020-09-22 | Apple Inc. | Cache filtering |
US11271720B2 (en) | 2019-03-25 | 2022-03-08 | Micron Technology, Inc. | Validating data stored in memory using cryptographic hashes |
US11436033B2 (en) | 2019-10-11 | 2022-09-06 | International Business Machines Corporation | Scalable virtual memory metadata management |
US11379408B2 (en) * | 2020-05-04 | 2022-07-05 | International Business Machines Corporation | Pointer-based dynamic data structures in key-value stores |
KR20220017309A (ko) * | 2020-08-04 | 2022-02-11 | 삼성전자주식회사 | 가상 메모리의 할당 방법 및 이를 지원하는 전자 장치 |
US20210089467A1 (en) * | 2020-10-01 | 2021-03-25 | Intel Corporation | Page allocation for contiguity-aware translation lookaside buffers |
WO2023088546A1 (en) * | 2021-11-17 | 2023-05-25 | Huawei Technologies Co., Ltd. | Controller and method to perform persistent memory management in a memory system |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080104152A1 (en) * | 2006-10-27 | 2008-05-01 | Hewlett-Packard Development Company, L.P. | Memory piece categorization |
US20100211756A1 (en) * | 2009-02-18 | 2010-08-19 | Patryk Kaminski | System and Method for NUMA-Aware Heap Memory Management |
EP2620838A1 (en) * | 2012-01-26 | 2013-07-31 | ST-Ericsson SA | Automatic partial array self-refresh |
US20150032972A1 (en) * | 2013-07-26 | 2015-01-29 | Sridharan Sakthivelu | Methods and apparatus for supporting persistent memory |
US20160026660A1 (en) * | 2014-07-22 | 2016-01-28 | Oracle International Corporation | Distribution of an object in volatile memory across a multi-node database |
CN106462510A (zh) * | 2014-03-06 | 2017-02-22 | 伊姆西公司 | 具有独立直接接入大量固态存储资源的多处理器*** |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4972316A (en) | 1987-03-30 | 1990-11-20 | International Business Machines Corporation | Method of handling disk sector errors in DASD cache |
US6804766B1 (en) * | 1997-11-12 | 2004-10-12 | Hewlett-Packard Development Company, L.P. | Method for managing pages of a designated memory object according to selected memory management policies |
JP4679581B2 (ja) | 2005-07-29 | 2011-04-27 | パナソニック株式会社 | メモリコントローラ、不揮発性記憶装置、不揮発性記憶システム及び不揮発性メモリのアドレス管理方法 |
US20080072119A1 (en) * | 2006-08-31 | 2008-03-20 | Rodney Rozman | Allowable bit errors per sector in memory devices |
JP5090941B2 (ja) | 2008-01-29 | 2012-12-05 | 株式会社日立製作所 | ストレージサブシステム及びストレージシステム |
US8312201B2 (en) * | 2008-06-09 | 2012-11-13 | International Business Machines Corporation | Managing memory allocations loans |
TWI452467B (zh) | 2008-10-13 | 2014-09-11 | A Data Technology Co Ltd | 記憶體系統及其控制方法 |
US8239619B2 (en) | 2010-07-09 | 2012-08-07 | Macronix International Co., Ltd. | Method and apparatus for high-speed byte-access in block-based flash memory |
US9355023B2 (en) | 2011-03-15 | 2016-05-31 | Anirudh Badam | Virtual address pager and method for use with a bulk erase memory |
US9563555B2 (en) | 2011-03-18 | 2017-02-07 | Sandisk Technologies Llc | Systems and methods for storage allocation |
US8793444B2 (en) * | 2011-05-05 | 2014-07-29 | International Business Machines Corporation | Managing large page memory pools |
US20130111105A1 (en) | 2011-10-31 | 2013-05-02 | Antonio Lain | Non-volatile data structure manager and methods of managing non-volatile data structures |
CN104011691B (zh) * | 2011-12-29 | 2016-12-14 | 英特尔公司 | 非易失性ram盘 |
JP5447617B2 (ja) * | 2012-08-22 | 2014-03-19 | Tdk株式会社 | フラッシュメモリコントローラ、フラッシュメモリシステム、及びフラッシュメモリ制御方法 |
WO2014102882A1 (en) | 2012-12-28 | 2014-07-03 | Hitachi, Ltd. | Storage apparatus and storage control method |
US9361215B2 (en) | 2013-05-31 | 2016-06-07 | Apple Inc. | Memory allocation improvements |
US10528459B2 (en) * | 2015-05-15 | 2020-01-07 | Vmware, Inc. | Scalable space management using bitmap summary tree |
US10416890B2 (en) * | 2015-09-09 | 2019-09-17 | Intel Corporation | Application execution enclave memory page cache management method and apparatus |
-
2018
- 2018-05-15 KR KR1020180055405A patent/KR102498668B1/ko active IP Right Grant
- 2018-05-16 US US15/981,402 patent/US10824555B2/en active Active
- 2018-05-17 CN CN201810473339.1A patent/CN108959113B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080104152A1 (en) * | 2006-10-27 | 2008-05-01 | Hewlett-Packard Development Company, L.P. | Memory piece categorization |
US20100211756A1 (en) * | 2009-02-18 | 2010-08-19 | Patryk Kaminski | System and Method for NUMA-Aware Heap Memory Management |
EP2620838A1 (en) * | 2012-01-26 | 2013-07-31 | ST-Ericsson SA | Automatic partial array self-refresh |
US20150032972A1 (en) * | 2013-07-26 | 2015-01-29 | Sridharan Sakthivelu | Methods and apparatus for supporting persistent memory |
CN106462510A (zh) * | 2014-03-06 | 2017-02-22 | 伊姆西公司 | 具有独立直接接入大量固态存储资源的多处理器*** |
US20160026660A1 (en) * | 2014-07-22 | 2016-01-28 | Oracle International Corporation | Distribution of an object in volatile memory across a multi-node database |
Non-Patent Citations (1)
Title |
---|
张丽;谭毓安;郑军;马忠梅;王文明;李元章;: "一种基于闪存物理镜像的FAT文件***重组方法", 电子学报, no. 08, pages 33 - 39 * |
Also Published As
Publication number | Publication date |
---|---|
US10824555B2 (en) | 2020-11-03 |
KR102498668B1 (ko) | 2023-02-09 |
KR20180126379A (ko) | 2018-11-27 |
CN108959113B (zh) | 2023-08-29 |
US20180336140A1 (en) | 2018-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108959113A (zh) | 用于闪存感知堆存储器管理的方法和*** | |
US10318434B2 (en) | Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application | |
US9152569B2 (en) | Non-uniform cache architecture (NUCA) | |
CN104487953B (zh) | 用于层次型存储器***的存储器管理 | |
US9966152B2 (en) | Dedupe DRAM system algorithm architecture | |
US11726707B2 (en) | System and method of writing to nonvolatile memory using write buffers | |
CN106415522A (zh) | 存储器内轻量一致性 | |
CN106462501A (zh) | 基于混合存储器立方体***互连目录的高速缓冲存储器一致性方法 | |
US10108555B2 (en) | Memory system and memory management method thereof | |
CN105938458B (zh) | 软件定义的异构混合内存管理方法 | |
KR102597630B1 (ko) | 중복제거 어플리케이션을 즉시 처리하는 효율적인 메모리를 위한 가상 버킷 복수의 해시 테이블들 | |
CN105917319A (zh) | 存储器单元和方法 | |
CN115168247B (zh) | 用于并行处理器中动态共享存储空间的方法及相应处理器 | |
US10528284B2 (en) | Method and apparatus for enabling larger memory capacity than physical memory size | |
CN115407933A (zh) | 基于非易失内存的文件元数据存储方法与*** | |
CN106339330A (zh) | 高速缓存刷新的方法及*** | |
CN103377141A (zh) | 高速存储区的访问方法以及访问装置 | |
CN113535392B (zh) | 基于cma实现支持大内存连续分配的内存管理方法及*** | |
CN113721839B (zh) | 用于处理图数据的计算***和存储分层方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |