CN107548491B - 用于管理存储器的设备和方法以及存储介质 - Google Patents

用于管理存储器的设备和方法以及存储介质 Download PDF

Info

Publication number
CN107548491B
CN107548491B CN201680022837.3A CN201680022837A CN107548491B CN 107548491 B CN107548491 B CN 107548491B CN 201680022837 A CN201680022837 A CN 201680022837A CN 107548491 B CN107548491 B CN 107548491B
Authority
CN
China
Prior art keywords
page
write data
compressed
data
compression
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
Application number
CN201680022837.3A
Other languages
English (en)
Other versions
CN107548491A (zh
Inventor
S.伊耶
S.D.默斯
S.纳扎里
G.萨德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of CN107548491A publication Critical patent/CN107548491A/zh
Application granted granted Critical
Publication of CN107548491B publication Critical patent/CN107548491B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0886Variable-length word access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/652Page size control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

示例包括具有数据和压缩元数据的经压缩页面。一些示例包括接收包含写入数据的写入请求、将写入数据存储在数据高速缓存中、以及向写入数据应用页面适应进程。在一些这样的示例中,可以针对经处理写入数据而生成虚拟页面表格中的虚拟页面表格条目。虚拟页面表格条目可以包括压缩索引和页面地址。可以执行经处理写入数据的内联压缩以便将经处理写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处。在一些示例中,经压缩页面可以包括具有参考计数、经压缩页面偏移和虚拟页面地址的压缩元数据。

Description

用于管理存储器的设备和方法以及存储介质
技术领域
本公开总体涉及存储器管理。
背景技术
可以在利用有限量的处理能力、带宽和存储器快速地且高效地存储和检索大量数据的情况下为存储解决方案分派任务。存储器的虚拟化可以用于改进存储器效率,其中虚拟存储器地址映射到物理存储器地址。在一些示例中,存储器可以在虚拟化存储器系统内瘦-供应,使得如所需要的那样在进程、任务或用户之间灵活地分配存储器空间,允许所分配的虚拟存储器的量超出物理存储器的总量。元数据在一些这样的示例中可以用于促进数据的发现和检索。
发明内容
根据本公开的一个方面,提供一种非暂时性机器可读存储介质,其包括指令。所述指令能够由设备的处理资源执行以用于:接收包含写入数据的写入请求;将所述写入数据存储在数据高速缓存中;将页面适应进程应用至所述写入数据;引起用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目的生成,其中虚拟页面表格条目包括压缩索引和页面地址;执行经处理写入数据的内联压缩以便将经处理写入数据在经压缩页面中压缩和存储在与压缩索引相关联的位置处,其中经压缩页面包括具有参考计数、经压缩页面偏移和虚拟页面地址的压缩元数据;接收读取-修改-写入请求以便修改所述写入数据和重新写入经修改的写入数据;将所述经修改的写入数据存储在数据高速缓存中;将页面重新适应进程应用至所述经修改的写入数据以便确定所述经修改的写入数据是否将在经压缩页面中适应于与压缩索引相关联的位置处;以及基于确定所述经修改的写入数据将在经压缩页面中适应于与压缩索引相关联的位置处,执行所述经修改的写入数据的内联压缩以便将所述经修改的写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处。
根据本公开的另一方面,提供一种用于管理存储器的设备,包括:处理资源;数据高速缓存;经压缩的高速缓存;以及如前所述的非暂时性机器可读存储介质。
根据本公开的又一方面,提供一种用于管理存储器的方法,其中所述方法包括:在设备处接收包含写入数据的写入请求;在所述设备处将所述写入数据存储在数据高速缓存中;将页面适应进程应用至所述写入数据;生成用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目,其中虚拟页面表格条目包括压缩索引和页面地址;执行经处理写入数据的内联压缩以便将经处理写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处,其中经压缩页面包括具有算法和版本标识符、参考计数、经压缩页面偏移、虚拟页面地址和未使用空间标识符的压缩元数据;在所述设备处接收读取-修改-写入请求以便修改所述写入数据并且重新写入经修改的数据;在所述设备处将所述经修改的写入数据存储在数据高速缓存中;将页面重新适应进程应用至所述经修改的写入数据以便确定所述经修改的写入数据是否将在经压缩页面中适应于与压缩索引相关联的位置处;以及基于确定所述经修改的写入数据将在经压缩页面中适应于与压缩索引相关联的位置处,执行所述经修改的写入数据的内联压缩以便将所述经修改的写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处。
附图说明
以下详细描述参照附图,其中:
图1A是包括指令的示例机器可读存储介质的框图,所述指令用来应用页面适应(fit)进程以写入数据并且执行经处理写入数据的内联压缩,所述内联压缩将经处理写入数据压缩并存储在包括压缩元数据的经压缩页面中;
图1B是包括指令的示例机器可读存储介质的框图,所述指令用来检索针对写入数据的读取请求,确定写入数据的位置并且基于该位置来解压缩写入数据;
图1C是包括指令的示例机器可读存储介质的框图,所述指令用来接收修改写入数据的读取-修改-写入请求并且应用页面重新适应进程以确定经修改的写入数据是否将适应于经压缩页面中;
图2A是具有数据高速缓存、经压缩的高速缓存和指令的示例设备的框图,所述指令用来向生成用于经压缩页面的压缩元数据的数据应用页面适应进程;
图2B是具有数据高速缓存、经压缩的高速缓存和指令的示例设备的框图,所述指令用来接收针对写入数据的读取请求,确定写入数据的位置,并且基于该位置来解压缩写入数据;
图2C是具有数据高速缓存、经压缩的高速缓存和指令的示例设备的框图,所述指令用来接收修改写入数据的读取-修改-写入请求并且应用页面重新适应进程以便确定经修改的写入数据是否将适应于经压缩页面中;
图3A是用于管理存储器的示例方法的流程图,包括接收包含写入数据的写入请求、向写入数据应用页面适应进程、以及执行内联压缩以便将经处理写入数据压缩和存储在具有压缩元数据的经压缩页面中;
图3B是用于管理存储器的示例方法的流程图,包括接收针对写入数据的读取请求、确定写入数据的位置、以及基于该位置来解压缩写入数据;
图3C是用于管理存储器的示例方法的流程图,包括接收修改写入数据的读取-修改-写入请求以及应用页面重新适应进程来确定经修改的写入数据是否将适应于经压缩页面中,并且基于该确定来向该经压缩页面执行内联压缩或者向新的经压缩页面执行内联压缩;
图4是具有虚拟页面表格条目的示例虚拟页面表格的框图,所述虚拟页面表格条目具有压缩索引和页面地址;以及
图5是具有压缩元数据和经压缩数据的示例经压缩页面的框图。
具体实施方式
可能需要使用有限量的处理能力、带宽和存储器来快速地且高效地存储和检索大量数据。在一些示例中,存储器管理技术可以用于生成虚拟存储器系统,所述虚拟存储器系统可以允许存储器看起来为针对进程或任务的大、连续地址空间。然而,那些地址(即,虚拟存储器地址)可以或者可以不对应于连续的物理存储器地址。
也可以使用瘦-供应技术。这样的技术可以牵涉看起来是在请求时进行分配的存储器。然而,实际上,物理存储器是在必要时进行分配的,例如在将数据实际地写入到存储介质时。此外,数据压缩技术可以用于最大化存储容量。在一些示例中,数据可以在被写入到存储器之前进行压缩。数据压缩可以牵涉经由压缩算法在较少数目的位中传送或者存储某一数目的位的数据。在一些示例中,数据压缩可以牵涉使用比数据的原始表示更少的位来编码数据。在其它示例中,数据压缩可以牵涉通过消除冗余或不必要的位来减少数据的大小。
这样的存储器管理技术的使用可以牵涉在不利用这样的技术的存储器系统中不存在的开销和/或数据结构。例如,在虚拟存储器系统中,因为进程和任务可以利用虚拟存储器地址,所以系统可以将虚拟存储器地址转译为对应的物理存储器地址。在一些示例中,由一个或多个页面表格条目填入的页面表格可以使得虚拟存储器系统能够将虚拟存储器地址与物理存储器地址相关联。每一个页面表格条目可以包括合适的元数据,即,提供关于其它数据的信息的数据。例如,元数据可以包括虚拟页面编号和物理页面编号,其可以用于生成物理存储器地址。
尽管页面表格可以用于促进数据的发现和检索,但是它们还可能牵涉较大的存储器和带宽使用以及增加的时延。例如,牵涉虚拟存储器地址的单个存储器操作可以首先牵涉查找页面表格中的页面表格条目以便确定物理存储器地址。接下来,它可以牵涉访问物理存储器地址处的存储介质。因而,每一个这样的存储器操作将牵涉至少两个存储器访问,一个是访问页面表格条目并且另一个是访问存储介质内的物理存储器地址。一些存储器操作可能牵涉甚至更多的访问。例如,读取和修改数据可能牵涉修改或者更新原始数据的页面表格条目和/或添加用于新数据的新页面表格条目的附加存储器访问。
类似地,利用数据压缩的系统可以包括具有与数据的压缩和/或解压缩有关的元数据的表格。在这样的系统中,单个存储器操作可以牵涉在访问存储介质处的经压缩数据之前查找这样的元数据。
在一些示例中,元数据可以一起例如在表格或索引中定位在与它所涉及的数据相同的数据存储单元上。无论如何,可能仍然需要多个存储器访问以便首先访问元数据并且接下来访问数据。在其它示例中,在冗余性和容错性可能重要的情况下,元数据可以一起定位在例如页面表格中并且进一步在另一个位置处复制,例如在数据块处。以这样的方式复制元数据可以允许在故障之后重构页面表格,并且在一些实例中,可以允许在没有针对每一个存储器操作的增加的存储器访问的情况下进行重构。然而,相比于不要求这样的复制的系统,每一存储器操作的存储器访问可能没有削减,意味着过度的带宽使用、接纳某些存储器操作的存储器的超额供应、以及增加的时延。
本文描述的示例可以经由页面适应进程以及数据和元数据向经压缩页面的内联压缩而改进有限存储资源的存储器管理,这可以牵涉针对某些存储器操作的较少存储器访问。例如,本文描述的一些示例可以接收写入请求、读取请求或者读取-修改-写入请求以便修改和再写入数据。在这样的示例中,基于所接收的请求,可以生成虚拟页面表格条目,并且可以将数据与压缩元数据一起存储在经压缩页面中。在其它这样的示例中,基于所接收的请求,可以经由虚拟页面表格条目和压缩元数据来定位数据。在又其它这样的示例中,基于请求,可以应用页面重新适应进程,并且可以创建新的经压缩页面,或者可以修改现有经压缩页面中的数据。
在本文描述的一些示例中,设备的处理资源可以执行机器可读存储介质上的指令以便接收包含写入数据的写入请求,将写入数据存储在数据高速缓存中,并且向写入数据应用页面适应进程。处理资源可以进一步执行指令以便引起用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目的生成。虚拟页面表格条目可以包括压缩索引和页面地址。处理资源还可以执行指令以便执行经处理写入数据的内联压缩来将经处理写入数据和存储在经压缩页面中压缩与压缩索引相关联的位置处。经压缩页面可以包括具有参考计数、经压缩页面偏移和虚拟页面地址的压缩元数据。
在本文描述的一些这样的示例中,设备的处理资源可以执行指令以便接收针对写入数据的读取请求并且确定写入数据是否位于数据高速缓存中。(至少部分地)基于写入数据没有位于数据高速缓存中的确定,处理资源可以执行指令来确定写入数据是否位于经压缩的高速缓存中。(至少部分地)基于写入数据没有位于经压缩的高速缓存中的确定,处理资源可以经由虚拟页面表格和压缩元数据来定位写入数据并且解压缩写入数据。在本文描述的示例中,说成“基于”给定条件的确定、动作等可以是单独地基于该条件或者基于该条件和(多个)其它条件。
在本文描述的其它这样的示例中,设备的处理资源可以附加地执行指令来接收修改写入数据和重新写入经修改的写入数据的读取-修改-写入请求。处理资源可以执行指令来将经修改的写入数据存储在数据高速缓存中并且向经修改的写入数据应用页面重新适应进程以便确定经修改的写入数据是否将在经压缩页面中适应在与压缩索引相关联的位置处。(至少部分地)基于经修改的写入数据将适应的确定,处理资源可以执行指令来执行经修改的写入数据的内联压缩以便将经修改的写入数据在经压缩页面中压缩和存储在与压缩索引相关联的位置处。
(至少部分地)基于经修改的写入数据将不适应的确定,处理资源可以执行指令来引起用于经修改的写入数据的虚拟页面表格中的新虚拟页面表格条目的生成。新虚拟页面表格条目可以包括新压缩索引和新页面地址。同样(至少部分地)基于该确定,处理资源可以进一步执行指令以便执行经修改的写入数据的内联压缩来将经修改的写入数据压缩和存储在新的经压缩页面中。新的经压缩页面可以包括具有新参考计数、新的经压缩页面偏移和新虚拟页面地址的新压缩元数据。此外,(至少部分地)基于经修改的写入数据将不适应的确定,处理资源可以执行指令来更新经压缩页面的压缩元数据。
在本文描述的一些示例中,设备可以包括处理资源、数据高速缓存、经压缩的高速缓存、以及包括指令的机器可读存储介质,所述指令用来接收包含写入数据的写入请求,将写入数据存储在数据高速缓存中,以及向写入数据应用页面适应进程,其生成用于经压缩页面的压缩元数据,所述压缩元数据包括参考计数、经压缩页面偏移和虚拟页面地址。存储介质可以进一步包括引起用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目的生成的指令。虚拟页面表格条目可以包括压缩索引和页面地址。存储介质还可以包括指令来执行经处理写入数据的内联压缩以便将经处理写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处。经压缩页面可以包括具有参考计数、经压缩页面偏移和虚拟页面地址的压缩元数据。
在本文描述的一些示例中,用于管理存储器的方法可以牵涉在设备处接收包含写入数据的写入请求并且在该设备处将写入数据存储于数据高速缓存中。方法还可以牵涉向写入数据应用页面适应进程并且生成用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目。虚拟页面表格条目可以包括压缩索引和页面地址。方法还可以牵涉执行经处理写入数据的内联压缩以便将经处理写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处。经压缩页面可以包括具有算法和版本标识符、参考计数、经压缩页面偏移、虚拟页面地址和未使用空间标识符的压缩元数据。
现在参照附图,图1A是包括指令的示例机器可读存储介质120的框图,所述指令用来接收包含写入数据的写入请求102并且将写入数据压缩和存储在包含压缩元数据的经压缩页面中。指令可以是由设备100的处理资源110可执行的。
设备100包括处理资源110,并且可以是适用于执行以下描述的功能性的任何联网或计算设备。如本文中使用,设备可以是桌面型计算机、膝上型(或笔记本)计算机、工作站、平板计算机、移动电话、智能设备、开关、路由器、服务器、刀片机箱、或者包括处理资源的任何其它处理设备或仪器。
如在图1A中所描绘,设备100还可以包括机器可读存储介质120,所述机器可读存储介质120包括(例如,编码有)由处理资源110可执行以便实现本文中关于图1A描述的功能性的指令122、124、126、128和130。在一些示例中,存储介质120可以包括附加指令。在其它示例中,本文中关于指令122、124、126、128和130描述的功能性,以及本文中关于存储介质120描述的任何附加指令,可以至少部分地实现在电子电路中(例如,经由包括硬件和编程的任何组合以便实现本文描述的功能性的组件)。在一些示例中,设备100可以是用于存储平台的控制器节点或者可以位于用于存储平台的控制器节点内。在一些示例(没有在图1A中示出)中,存储介质120可以位于设备100的外部。在这样的示例中,设备100可以经由计算机网络(例如,因特网、局域网(LAN)、广域网(WAN)等)与存储介质120通信。
如本文中所使用,机器可读存储介质可以是用于包含或者存储信息的任何电子、磁性、光学或其它物理存储装置,所述信息诸如可执行指令、数据等。例如,本文描述的任何机器可读存储介质可以是随机存取存储器(RAM)、易失性存储器、非易失性存储器、闪速存储器、存储驱动(例如,硬驱动)、固态驱动、任何类型的存储盘(例如,压缩盘、DVD等)等中的任一或者其组合。另外,本文描述的任何机器可读存储介质可以是非暂时性的。
在本文描述的示例中,处理资源可以例如包括一个处理器或者多个处理器,所述多个处理器包括在单个设备中或跨多个设备分布。如本文中所使用,处理器可以是中央处理单元(CPU)、基于半导体的微处理器、图形处理单元(GPU)、配置为检索和执行指令的现场可编程门阵列(FPGA)、适用于检索和执行存储在机器可读存储介质上的指令的其它电子电路中的至少一种或其组合。处理资源110可以获取、解码和执行存储在存储介质120上的指令以便执行上文关于指令122、124、126、128和130描述的功能性。在其它示例中,存储介质120的指令中的任一个的功能性可以以电子电路的形式、以编码在机器可读存储介质上的可执行指令的形式或其组合而实现。在图1A的示例中,存储介质120可以由一个机器可读存储介质或者多个机器可读存储介质来实现。
在图1A的示例中,指令122可以接收包含写入数据的写入请求102。如本文中描述的写入请求可以是指存储写入数据的消息或命令。在一些示例中,写入请求102可以从用户接收(例如,保存文件)。在其它示例中,写入请求102可以作为较大事务或操作的部分而从进程或任务接收。写入数据可以是指要记录在磁性、光学、机械或电子介质上的电气信号形式的任何字符、符号或信息。在一些示例中,在接收到包含写入数据的写入请求102时,可以为写入数据分配或指派虚拟页面编号或虚拟页面地址。在一个这样的示例中,写入数据可以适应于单个虚拟页面中。在另一个这样的示例中,写入数据可以包括若干虚拟页面。
指令124可以从写入请求102接收写入数据并且将写入数据存储在数据高速缓存中。如在本文示例中使用的数据高速缓存可以是指这样的任何组件,其存储数据使得相比于将该数据存储在较慢的数据源(诸如远程服务器)中的情况而言未来针对该数据的请求可以被更加快速地服务或完成。在一些示例中,数据高速缓存可以位于处理资源110或者设备100上。在其它示例中,数据高速缓存可以位于存储介质120上,处在设备100上或外。在其它示例中,数据高速缓存可以位于主存储器中。在又其它的示例中,数据高速缓存可以位于次存储器中。数据高速缓存可以临时地或者更永久性地存储要存储在存储器中或者从存储器读取的任何数据。数据高速缓存还可以存储处理资源110所请求的或者预测要由处理资源110需要的任何数据和/或由处理资源110频繁使用的任何数据。数据高速缓存内的任何或所有数据可以是包括来自写入请求102的写入数据的数据集合的部分。
指令126可以分析数据高速缓存中的数据并且向写入数据应用页面适应进程。在本文描述的示例中,页面可以是指代指定数量的数据。例如,页面可以是N个字节的序列,其中N是2的幂。在牵涉虚拟存储器的示例中,页面可以是4千字节(KB)到64KB或者更多。页面适应进程可以确定用于经压缩页面中的数据的最佳适应。如在本文示例中使用的经压缩页面是指包括经压缩数据和元数据的页面。在一些示例中,经压缩数据可以包括数据的若干虚拟页面。在一个示例中,经压缩页面可以包括高达八个虚拟页面。在其它示例中,取决于页面的大小、所实现的压缩量、可用存储器空间和其它这样的相关变量,经压缩页面可以包括甚至更多的虚拟页面。在下文关于图5更加详细地描述经压缩页面。
在一些示例中,指令126可以包括基于包括写入数据的数据高速缓存内的数据集合来确定最佳适应的指令。在一些示例中,页面适应进程可以估计或者预测压缩之后的写入数据的大小。页面适应进程可以基于一个或多个压缩算法来估计该大小。页面适应进程可以类似地估计或者预测数据高速缓存内的其它数据压缩之后的(多个)大小。页面适应进程可以基于一个或多个压缩算法来估计所述(多个)大小。(至少部分地)基于所估计的压缩之后数据高速缓存内写入数据以及其它数据的大小,页面适应进程可以查明具有“最佳适应”的经压缩页面,并且其具有适当数目的数据虚拟页面而且以适当的次序进行组织。在一些示例中,页面适应进程可以在查明要将哪个数据包括在经压缩页面中时分析是否可以一起访问数据高速缓存内的写入数据和其它数据。在其它示例中,页面适应进程可以在确定要将哪个数据包括在经压缩页面中时分析数据可以多频繁地或者多不频繁地被访问。在一些这样的示例中,非常频繁访问的数据可以不包括在经压缩页面中。在一些示例中,页面适应进程可以针对经压缩页面内的写入数据和其它数据而生成或者确定压缩索引和页面地址,这在下文关于指令128更加详细地描述。在一些示例中,页面适应进程可以附加地针对经压缩页面内的数据而生成或确定压缩元数据,这在下文关于指令130更加详细地描述。
在已经通过页面适应进程处理来自写入请求102的写入数据之后,指令128可以引起针对经处理写入数据生成虚拟页面表格中的虚拟页面表格条目。在一些示例中,指令128可以基于从页面适应进程接收或获得的信息而引起虚拟页面表格条目的生成。如在本文示例中所使用,虚拟页面表格可以是指包括一个或多个虚拟页面表格条目的表格或其它适当数据结构。如本文示例中使用的虚拟页面表格条目可以是指虚拟页面表格的行、线或其它适当部分,其借由压缩元数据的方式而辅助于将虚拟存储器地址与物理存储器地址相关联。虚拟页面表格条目内的数据或信息可以称为元数据。如本文中所使用的,元数据可以是指提供关于其它数据的信息的数据。
在一些示例中,虚拟页面表格条目与虚拟页面编号或虚拟页面地址相关联,并且包括压缩索引和页面地址。压缩索引可以是指经压缩页面内的特定虚拟页面。例如,对于可以持有高达八个虚拟页面的经压缩页面,压缩索引可以包括在0-7之间的值,其中每一个值与不同的虚拟页面相关联。对于可以持有更少虚拟页面的经压缩页面,压缩索引可以相应地更小。同样地,对于可以持有更大数目的虚拟页面的经压缩页面,压缩索引可以相应地更大。
在一些示例中,压缩表格条目的页面地址可以引用到物理页面。在一些这样的示例中,页面地址可以是针对经压缩页面的物理页面地址。在其它这样的示例中,页面地址可以是这样的物理页面编号,可以从所述物理页面编号生成针对经压缩页面的物理页面地址。
在一些示例中,指令128可以引起虚拟页面表格的生成,虚拟页面表格中每一个虚拟页面表格条目对应于存储器中的经压缩页面。在其它示例中,每一个虚拟页面表格条目可以对应于存储器中的页面,其中页面的子集是经压缩页面并且页面的另一子集是未经压缩页面。在这样的示例中,用于未经压缩页面的压缩索引可以包括空位字符或者其它值以指示页面不包括经压缩数据。
图4描绘了包括若干虚拟页面表格条目410的示例虚拟页面表格400。如所描绘的,每一个虚拟页面表格条目包括压缩索引和页面地址。在一些示例中,虚拟页面表格400可以包括没有在图4中示出的附加元数据。例如,虚拟页面表格400可以包括有效位以指示页面是否在主存储器中。关于页面没有处在主存储器中的指示可以对应于页面故障并且可以牵涉到附加存储器访问以确定物理页面的页面地址。
参照图1A,指令130可以在页面适应进程已经应用之后从数据高速缓存接收或以其它方式获取经处理写入数据(以及要存储在经压缩页面中的任何其它数据)。在一些示例中,指令130可以接收或者以其它方式获取要压缩到经压缩页面中的一个或多个数据(包括经处理写入数据)虚拟页面。在一个这样的示例中,经处理写入数据可以是要压缩到单个经压缩页面中的若干虚拟页面中的一个(或多个)。指令130可以执行对经处理写入数据(以及要存储在经压缩页面中的任何其它数据)的内联压缩以将经处理写入数据存储在经压缩页面中作为经压缩写入数据。内联压缩可以使用数种合适压缩算法中的任一种来实现,包括(但不限于)
Figure GDA0002545278060000101
(LZO)、
Figure GDA0002545278060000103
Figure GDA0002545278060000102
经处理的写入数据可以存储在经压缩页面中与页面压缩表格条目中的压缩索引相关联的位置处。例如,压缩索引“0”可以指示经处理写入数据被定位为经压缩页面内的首个虚拟页面。类似地,压缩索引“1”可以指示经处理写入数据被定位为经压缩页面内的第二个虚拟页面。在这样的示例中,首个虚拟页面可以被其它数据占用。在一些示例中,经压缩页面可以存储在次存储器、第三级存储器、离线或者外部存储器中。
除经压缩数据之外,经压缩页面可以包括与经压缩数据相关联的压缩元数据。在一些示例中,指令130可以从针对经压缩页面的页面适应进程接收压缩元数据。如本文中使用,压缩元数据可以是指经压缩页面内的这样的数据,所述数据提供关于经压缩页面中的经压缩数据的信息。在一些示例中,指令130可以执行对压缩元数据连同经处理写入数据和要存储在经压缩页面中的任何其它数据的内联压缩。在其它示例中,指令130可以执行仅仅对经处理写入数据(以及要存储在经压缩页面中的任何其它数据)的内联压缩,并且压缩数据可以以未经压缩的格式存储在经压缩页面中。
除其它之外,压缩元数据可以包括参考计数(reference count)、经压缩页面偏移和虚拟页面地址。参考计数、经压缩页面偏移和虚拟页面地址中的每一个可以表示由一个或多个位构成的单独字段,所述一个或多个位提供关于经压缩页面以及经压缩页面内的经压缩数据的信息。
在一些示例中,参考计数可以是指经压缩页面内的虚拟页面的数目。例如,对于包括两个虚拟页面的经压缩页面,参考计数可以包括值“2”或者可以以其它方式指示经压缩页面包括两个虚拟页面。类似地,对于包括8个虚拟页面的经压缩页面,参考计数可以包括值“8”或者可以以其它方式指示经压缩页面包括八个虚拟页面。
在一些示例中,经压缩页面偏移可以是指指定与经压缩页面中的每一个虚拟页面相关联的数据在经压缩页面中位于何处的偏移。在一些这样的示例中,经压缩页面内的每一个虚拟页面可以与其自身的经压缩页面偏移相关联。相应地,持有若干虚拟页面的经压缩页面可以具有若干不同的经压缩页面偏移字段。经压缩页面偏移可以由字节编号(bytenumber)表示。在其中经处理写入数据可以存储在经压缩页面内的首个虚拟页面中的一个示例中,用于经处理写入数据的经压缩页面偏移可以是“0”。在其中经处理写入数据可以存储在经压缩页面内的首个虚拟页面中但是经压缩页面以压缩元数据开始的另一个示例中,用于经处理写入数据的经压缩页面偏移可以是反映压缩元数据的大小的字节值(bytevalue)。类似地,在其中经处理写入数据可以存储为经压缩页面内的第二个虚拟页面的示例中,用于经处理写入数据的经压缩页面偏移可以是反映首个虚拟页面中的数据的大小的字节值。用于经压缩页面内的每一个虚拟页面的经压缩页面偏移可以允许容易计算虚拟页面的大小。
在一些示例中,虚拟页面地址可以是指虚拟页面。在一些这样的示例中,虚拟页面地址可以是虚拟页面的地址。在其它这样的示例中,虚拟页面地址可以是虚拟页面编号,可以从所述虚拟页面编号生成针对虚拟页面的虚拟页面地址。在一些示例中,经压缩页面内的每一个虚拟页面可以与其自身的虚拟页面地址相关联。虚拟页面地址可以允许在必要的时候对虚拟页面的对应虚拟页面表格条目的高效查找。
在一些示例中,压缩元数据可以包括附加元数据,诸如算法和版本标识符或者未使用空间标识符。算法和版本标识符以及未使用空间标识符可以表示由一个或多个位构成的单独字段,所述一个或多个位提供关于经压缩页面以及经压缩页面内的经压缩数据的附加信息。在一些示例中,算法和版本标识符可以标识用于压缩数据的压缩算法和压缩算法版本。在一些这样的示例中,这可以辅助于经压缩页面内的数据的解压缩。
在一些示例中,未使用空间标识符可以标识经压缩页面结尾处的未使用空间的量。在一些示例中,未使用空间标识符可以辅助于确定存储在经压缩页面中的最末虚拟页面的大小。在其它示例中,未使用空间标识符可以替代地是已使用长度标识符。
图5描绘了包括压缩元数据510和经压缩数据530的示例经压缩页面500的框图。在图5的示例中,经压缩页面包括经压缩数据的八个虚拟页面。压缩元数据510包括算法和版本标识符512、参考计数514、经压缩页面偏移516、未使用空间标识符518和虚拟页面地址520。算法和版本标识符512可以指示用于压缩经压缩数据530的压缩算法和压缩算法版本。参考计数514可以具有值“8”以指示经压缩页面500包括八个虚拟数据页面。
在图5的示例中,经压缩页面500内的每一个虚拟页面还可以具有相关联的经压缩页面偏移516。如在图5中所示,可以持有高达八个经压缩数据虚拟页面的经压缩页面可以包括八个经压缩页面偏移字段。相应地,虚拟页面0将与经压缩页面0偏移相关联,虚拟页面1将与经压缩页面1偏移相关联,等等。每一个经压缩页面偏移字段可以标识经压缩数据在经压缩页面500内开始处的字节位置。
图5的未使用空间标识符518标识经压缩页面500内的未使用空间534的量。在一些示例中,未使用空间标识符518可以将未使用空间534的量表示为字节值。虚拟页面地址520可以指示经压缩页面内的每一个虚拟页面的虚拟页面地址。如所示,经压缩页面500内八个虚拟页面中的每一个可以具有相关联的虚拟页面偏移。相应地,虚拟页面0将与虚拟页面0地址相关联,虚拟页面1将与虚拟页面1地址相关联,等等。在一些示例中,虚拟页面地址520是用于虚拟页面的虚拟页面地址。在其它示例中,虚拟页面地址520可以是从其可以生成虚拟页面地址的虚拟页面编号。虚拟页面地址520可以允许在必要的时候对虚拟页面的对应虚拟页面表格条目的高效查找。
如在图5中所示,经压缩数据530可以包括用于高达八个虚拟页面的虚拟页面经压缩数据532,并且在一些示例中,还可以包括未使用空间534。尽管没有在图5中示出,但是经压缩页面可以包括更少或者更多类型的压缩元数据510。同样地,经压缩页面可以包括经压缩数据530的更少或者更多虚拟页面。此外,在图5的示例中,压缩元数据510示出在经压缩数据530之前。然而,压缩元数据和经压缩数据可以以任何适合的方式在经压缩页面内进行组织和定位。
在一些示例中,指令122、124、126、128和130可以是安装包的部分,所述安装包在安装时可以由处理资源110执行以实现以上描述的功能性。在这样的示例中,存储介质120可以是便携式介质,诸如CD、DVD或闪速驱动、或者由服务器维护的存储器,从该服务器可以对安装包进行下载和安装。在其它示例中,指令122、124、126、128和130可以是已经安装在设备100上的一个应用、多个应用或者(多个)组件的部分,所述设备100包括处理资源110。在这样的示例中,存储介质120可以包括存储器,诸如硬驱动、固态驱动等。在一些示例中,本文中关于图1A描述的功能性可以与本文中关于图1B-C以及图2-5中的任一个描述的功能性组合地提供。
在本文中关于图1B描述了另外的示例,图1B是包括指令的示例机器可读存储介质120的框图,所述指令用来接收针对写入数据的读取请求104、定位写入数据、以及如果必要,解压缩写入数据。图1B的示例包括设备100、处理资源110以及包含指令122、124、126、128和130的机器可读存储介质120,如上文关于图1A所描述。图1B的示例还包括机器可读存储介质120,机器可读存储介质120包括由处理资源110可执行以实现本文中关于图1B描述的功能性的指令132、134、136和138。
在一些示例中,存储介质120可以包括附加的指令。在其它示例中,本文中关于指令122、124、126、128、130、132、134、136、138以及本文中关于存储介质120描述的任何附加指令描述的功能性可以至少部分地实现在电子电路中(例如,经由包括硬件和编程的任何组合以实现本文描述的功能性的组件)。在一些示例中,设备100可以是用于存储平台的控制器节点或者可以位于用于存储平台的控制器节点内。在一些示例(没有在图1B中示出)中,存储介质120可以位于设备100的外部。在这样的示例中,设备100可以经由计算机网络(例如,因特网、局域网(LAN)、广域网(WAN)等)与存储介质120通信。
处理资源110可以获取、解码和执行存储在存储介质120上的指令以执行以上关于指令122、124、126、128、130、132、134、136和138描述的功能性。在其它示例中,存储介质120的指令中的任一个的功能性可以以电子电路的形式、以编码在机器可读存储介质上的可执行指令的形式或者其组合而实现。在图1B的示例中,存储介质120可以通过一个机器可读存储介质或者多个机器可读存储介质来实现。
如上文关于图1A所述,指令122可以接收包含写入数据的写入请求102。指令124可以从写入请求102接收写入数据并且将写入数据存储在数据高速缓存中。指令126可以分析数据高速缓存中的数据(包括写入数据)并且向写入数据应用页面适应进程。指令128可以引起针对经处理写入数据生成虚拟页面表格中的虚拟页面表格条目。如在上文关于图1A和4所述,虚拟页面表格条目可以包括压缩索引和页面地址。指令130可以执行对经处理写入数据的内联压缩,以将经处理写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处。如上文中关于图1A和5所描述,经压缩页面可以包括经压缩数据和压缩元数据,所述压缩元数据可以包括参考计数、经压缩页面偏移和虚拟页面地址。
在图1B的示例中,指令132可以接收针对写入数据102的读取请求104。如本文中所述的读取请求可以指检索(即,读取)数据的消息或命令。在一些示例中,读取请求104可以从用户接收(例如,打开文件)。在其它示例中,读取请求104可以作为较大事务或操作的部分而从进程或任务接收。在一些示例中,读取请求104可以包括针对写入数据的虚拟页面地址。
响应于接收到读取请求104,指令134可以确定写入数据是否位于数据高速缓存中。在一些示例中,指令134可以(至少部分地)基于与读取请求相关联的地址而搜索数据高速缓存。在一些这样的示例中,指令134可以搜索与数据高速缓存相关联的索引、表格或其它组织结构以确定写入数据是否位于数据高速缓存中。如果写入数据位于数据高速缓存内,可以针对请求实体而检索写入数据,完成读取请求。
(至少部分地)基于确定写入数据没有位于数据高速缓存中,指令136可以确定写入数据是否位于经压缩的高速缓存中。如在本文示例中使用的经压缩的高速缓存可以是指这样的任何组件,其存储经压缩页面使得相比于将经压缩页面存储在较慢的数据源(诸如远程服务器)中的情况而言可以更快速地服务或者完成未来针对经压缩页面的请求。在一些示例中,经压缩的高速缓存可以位于处理资源110或设备100上。在其它示例中,经压缩的高速缓存可以位于存储介质120上,处在设备100上或外。在其它示例中,经压缩的高速缓存可以位于主存储器中。在又其它的示例中,经压缩的高速缓存可以处在次存储器中。经压缩的高速缓存可以临时或者更永久性地存储要存储在存储器中或者从存储器读取的经压缩页面。经压缩的高速缓存还可以存储处理资源110所请求或预测处理资源110所需要的任何经压缩页面和/或处理资源110频繁使用的任何经压缩页面。
在一些示例中,指令136可以(至少部分地)基于与读取请求相关联的地址来搜索数据高速缓存。在一些这样的示例中,指令136可以搜索与经压缩的高速缓存相关联的索引、表格或其它组织结构以确定写入数据是否位于经压缩的高速缓存中。如果写入数据位于经压缩的高速缓存内,可以针对请求实体检索和解压缩写入数据,完成读取请求。
(至少部分地)基于确定写入数据没有位于经压缩的高速缓存中,指令138可以定位和解压缩写入数据。在一些示例中,指令138可以经由虚拟页面表格和压缩元数据来定位写入数据。例如,在一些这样的示例中,读取请求104可以包括用于写入数据的虚拟页面地址或虚拟页面编号。(至少部分地)基于虚拟页面地址或虚拟页面编号,指令138可以标识与该地址相关联的虚拟页面表格以及虚拟页面表格内的虚拟页面表格条目。如上文关于图1A所述,虚拟页面表格条目可以将虚拟页面地址与物理页面地址或物理页面编号相关联。虚拟页面表格条目可以附加地包括压缩索引,所述压缩索引标识经压缩页面内的虚拟页面。(至少部分地)基于来自虚拟页面表格条目的页面地址,指令138可以定位写入数据位于其内的经压缩页面。在一些示例中,经压缩页面然后可以被读取(即,检索)并且存储在经压缩的高速缓存内。指令138可以进一步(至少部分地)基于虚拟页面表格条目的压缩索引和压缩元数据的经压缩页面偏移来定位经压缩页面内的写入数据。
一旦定位到经压缩页面内的写入数据,指令138可以解压缩写入数据并且将该数据发送给请求实体。在一些示例中,指令138可以从压缩元数据确定压缩算法和压缩算法版本以辅助于解压缩写入数据。在其它示例中,指令138可以检查压缩元数据内的虚拟页面地址以确认写入数据已经在解压缩之前被定位。在一些示例中,经解压缩的写入数据可以在它被发送给请求实体之前存储在数据高速缓存中。
在一些示例中,指令122、124、126、128、130、132、134、136和138可以是安装包的部分,所述安装包在安装时可以由处理资源110执行以便实现以上描述的功能性。在这样的示例中,存储介质120可以是便携式介质,诸如CD、DVD或闪速驱动、或者由服务器维护的存储器,可以从所述服务器对安装包进行下载和安装。在其它示例中,指令122、124、126、128、130、132、134、136和138可以是已经安装在包括处理资源110的设备100上的一个应用、多个应用或者(多个)组件的部分。在这样的示例中,存储介质120可以包括存储器,诸如硬驱动、固态驱动等。在一些示例中,本文中关于图1B中的任一个描述的功能性可以与本文中关于图1A、图1C和图2-5中任一描述的功能性组合地提供。
在本文中关于图1C描述另外的示例,图1C是包括指令的示例机器可读存储介质的框图,所述指令用来接收修改写入数据的读取-修改-写入请求并且应用页面重新适应进程来确定经修改的写入数据是否将适应在经压缩页面中。图1C的示例包括设备100、处理资源110以及包含指令122、124、126、128和130的机器可读存储介质120,如上文关于图1A所描述。图1C的示例还包括机器可读存储介质120,所述机器可读存储介质120包括由处理资源110可执行以便实现本文中关于图1C描述的功能性的指令140、142、144、146和148。
在一些示例中,存储介质120可以包括附加的指令。在其它示例中,本文中关于指令122、124、126、128、130、142、144、146、148以及本文中关于存储介质120描述的任何附加指令所描述的功能性可以至少部分地实现在电子电路中(例如,经由包括硬件和编程的任何组合以便实现本文描述的功能性的组件)。在一些示例中,设备100可以是用于存储平台的控制器节点或者可以位于用于存储平台的控制器节点内。在一些示例(没有在图1C中示出)中,存储介质120可以位于设备100的外部。在这样的示例中,设备100可以经由计算机网络(例如,因特网、局域网(LAN)、广域网(WAN)等)与存储介质120通信。
处理资源110可以获取、解码和执行存储在存储介质120上的指令以便执行上文关于指令122、124、126、128、130、142、144、146和148描述的功能性。在其它示例中,存储介质120的指令中的任一个的功能性可以以电子电路的形式、以编码在机器可读存储介质上的可执行指令的形式、或者其组合而实现。在图1C的示例中,存储介质120可以通过一个机器可读存储介质或者多个机器可读存储介质来实现。
如上文关于图1A所述,指令122可以接收包含写入数据的写入请求102。指令124可以从写入请求102接收写入数据并且将写入数据存储在数据高速缓存中。指令126可以分析数据高速缓存中的数据(包括写入数据),并且向写入数据应用页面适应进程。指令128可以引起用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目的生成。如上文关于图1A和4所述,虚拟页面表格条目可以包括压缩索引和页面地址。指令130可以执行经处理写入数据的内联压缩以便将经处理写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处。如上文关于图1A和5所述,经压缩页面可以包括经压缩数据和压缩元数据,所述压缩元数据可以包括参考计数、经压缩页面偏移和虚拟页面地址。
在图1C的示例中,指令140可以接收读取-修改-写入(RWM)请求以便修改写入数据并且重新写入经修改的写入数据。如本文中描述的读取-修改-写入请求可以是指检索(即,读取)并且重新写入或修改之前写入的数据的消息或命令。在一些示例中,RMW请求106可以从用户被接收(例如,保存之前保存的文件)。在其它示例中,RMW请求106可以作为较大事务或操作的部分而从进程或任务来接收。在一些示例中,RMW请求106可以包括用于要修改的写入数据的虚拟页面地址。
在一些示例中,如上文关于图1B所述,写入数据的位置可以经由虚拟页面表格和压缩元数据来确定。在一些这样的示例中,用于写入数据的虚拟页面地址可以用于标识虚拟页面表格内的适当虚拟页面表格条目。(至少部分地)基于在虚拟页面表格中标识的页面地址,写入数据位于其内的经压缩页面可以被标识和检索。使用在虚拟页面表格条目中标识的压缩索引,以及经压缩页面的压缩元数据,可以确定经压缩页面内的写入数据的位置。(至少部分地)基于经压缩页面的压缩元数据内的经压缩页面偏移,可以确定写入数据的经压缩的大小。
指令142可以从RMW请求106接收经修改的写入数据并且将经修改的写入数据存储在数据高速缓存中。指令144可以分析经修改的写入数据并且向经修改的写入数据应用页面重新适应进程以便确定经修改的写入数据是否将在压缩索引处适应于经压缩页面中。在一些示例中,页面重新适应进程可以经由虚拟页面表格条目和/或压缩元数据来确定经压缩的写入数据的大小。在其它示例中,页面重新适应进程可以接收该信息。页面重新适应进程还可以估计或预测压缩之后经修改的写入数据的大小。在一些示例中,页面重新适应进程可以基于一个或多个压缩算法来估计该大小。(至少部分地)基于经压缩的写入数据的大小与经修改的写入数据的所估计的大小的比较,页面重新适应进程可以确定经修改的写入数据是否将在压缩索引处适应于经压缩页面中。
在已经应用页面重新适应进程之后,指令146可以从数据高速缓存接收或以其它方式获得经修改的写入数据(以及要重新存储在经压缩页面中的任何其它数据)。(至少部分地)基于经修改的写入数据将在压缩索引处适应于经压缩页面中的确定,指令146可以执行经修改的写入数据的内联压缩以便将经修改的写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处。在一些示例中,在执行内联压缩之前,可以首先定位和检索经压缩页面,如上文关于图1B所描述。在一些这样的示例中,经压缩页面可以存储在经压缩的高速缓存中。经压缩页面还可以被解压缩,并且其数据可以存储在数据高速缓存中,如上文关于图1B所描述。在一些示例中,内联压缩可以使用数个适当压缩算法中的任一个来实现,包括(但不限于)
Figure GDA0002545278060000171
(LZO)、
Figure GDA0002545278060000172
Figure GDA0002545278060000173
经修改的写入数据可以在经压缩页面中存储在与用于写入数据的页面压缩表格条目中的压缩索引相关联的位置处。例如,如果写入数据位于经压缩页面内的首个虚拟页面处(例如,在压缩索引“0”处),经修改的写入数据将在经压缩页面内的相同字节位置处开始。(至少部分地)基于经修改的写入数据在经压缩页面中适应于与压缩索引相关联的位置处的确定,压缩元数据和虚拟页面表格条目可以不需要被修改。经压缩页面在上文关于图5更加详细地描述。
如果页面重新适应进程确定经修改的写入数据将没有在经压缩页面中适应于与压缩索引相关联的位置处,在一些示例中,页面适应进程可以应用于经修改的写入数据。在一些示例中,页面适应进程可以分析数据高速缓存中的经修改的写入数据以及数据高速缓存中的其它数据以便确定针对新的经压缩页面中的数据的最佳适应。在一些这样的示例中,页面适应进程可以基于一种或多种压缩算法来估计数据高速缓存内的数据的大小。(至少部分地)基于经修改的写入数据的所估计的大小以及数据高速缓存内的其它数据的(多个)所估计的大小,页面适应进程可以查明具有“最佳适应”的新的经压缩页面,其具有适当数目的虚拟数据页面并且以适当的次序组织。在一些示例中,页面适应进程可以分析在查明要将哪个数据包括在新的经压缩页面中时是否可以一起访问经修改的写入数据和数据高速缓存内的其它数据。在其它示例中,页面适应进程可以分析在确定要将哪个数据包括在新的经压缩页面中时可以有多频繁地或者不频繁地访问数据。在一些这样的示例中,非常频繁访问的数据可以不包括在经压缩页面中。页面适应进程可以附加地在一些示例中针对经修改的写入数据和新的经压缩页面内的其它数据来生成或确定压缩索引和页面地址。页面适应进程还可以生成或确定用于新的经压缩页面内的数据的压缩元数据。
(至少部分地)基于经修改的写入数据将没有在经压缩页面中适应于与压缩索引相关联的位置处的确定,指令148可以引起用于经修改的写入数据的虚拟页面表格中的新虚拟页面表格条目的生成。新虚拟页面表格条目可以包括新压缩索引和新页面地址。在一些示例中,指令146可以从页面适应进程接收新压缩索引和/或新页面地址。
如上文关于图1A和1B所述,虚拟页面表格可以是指包括一个或多个虚拟页面表格条目的表格或其它适当数据结构。如同样在上文关于图1A和1B所述,虚拟页面表格条目可以是指辅助于借助压缩元数据将虚拟存储器地址与物理存储器地址相关联的虚拟页面表格的行、线或其它适当部分。同样地,类似于以上描述的虚拟页面表格条目,新的虚拟页面表格条目可以与虚拟页面编号或虚拟页面地址相关联,并且可以包括新压缩索引和新页面地址。
与以上关于图1A-B和4描述的压缩索引相似,新压缩索引可以是指经压缩页面内的特定虚拟页面。类似地,新压缩索引可以是指具有新的经压缩页面的特定虚拟页面。与上文关于图1A-B和4描述的页面地址相似,新页面地址可以是指物理页面。在一些这样的示例中,新页面地址可以是用于新的经压缩页面的物理页面地址。在其它这样的示例中,新页面地址可以是从其可以针对新的经压缩页面生成物理页面地址的物理页面编号。
(至少部分地)基于经修改的写入数据将没有适应于经压缩页面中的确定,指令148可以进一步从数据高速缓存接收或以其它方式获得要存储在新的经压缩页面中的数据,包括经修改的写入数据。与上文关于图1A-B和5描述的经压缩页面相似,新的经压缩页面可以包括经压缩数据和压缩元数据。在一些示例中,指令148可以接收或者以其它方式获得要压缩到新的经压缩页面中的数据的一个或多个虚拟页面,包括经修改的写入数据。在一个这样的示例中,经修改的写入数据可以是要压缩到单个新的经压缩页面中的若干虚拟页面中的一个(或多个)。指令148可以执行经修改的写入数据(以及要存储在新的经压缩页面中的任何其它数据)的内联压缩以便作为经压缩经修改的写入数据而将经修改的写入数据存储在新的经压缩页面中。内联压缩可以使用数种适当压缩算法中的任一种来实现,包括(但不限于)
Figure GDA0002545278060000181
(LZO)、
Figure GDA0002545278060000182
Figure GDA0002545278060000183
经修改的写入数据可以在新的经压缩页面中存储在与新页面压缩表格条目中的新压缩索引相关联的位置处。例如,新压缩索引“0”可以指示经修改的写入数据定位为新的经压缩页面内的首个虚拟页面。类似地,新压缩索引“1”可以指示经修改的写入数据定位为新的经压缩页面内的第二个虚拟页面。在这样的示例中,首个虚拟页面可以被其它数据占用。在一些示例中,新的经压缩页面可以存储在次存储器、第三级存储器、或者离线或外部存储器中。
除新的经压缩页面内的经压缩数据之外,新的经压缩页面可以包括与经压缩数据相关联的新压缩元数据。在一些示例中,指令148可以从用于新的经压缩页面的页面适应进程接收新压缩元数据。与以上关于图1A-B和5描述的压缩元数据相似,新压缩元数据可以是指经压缩页面内的数据,所述数据提供关于(新的)经压缩页面中的经压缩数据的信息。在一些示例中,指令148可以执行新压缩元数据连同经修改的写入数据与要存储在新的经压缩页面中的任何其它数据的内联压缩。在其它示例中,指令148可以执行仅仅经修改的写入数据(以及要存储在经压缩页面中的任何其它数据)的内联压缩,并且新压缩数据可以以未经压缩的格式存储在新的经压缩页面中。
类似于以上关于图1A-B和5描述的压缩元数据,除其它之外,新压缩元数据可以包括新参考计数、新的经压缩页面偏移和新虚拟页面地址。新参考计数、新的经压缩页面偏移和新虚拟页面地址中的每一个可以表示由一个或多个位构成的分离字段,所述一个或多个位提供关于新的经压缩页面以及新的经压缩页面内的经压缩数据的信息。
与以上关于图1A-B和5描述的参考计数相似,新参考计数可以是指经压缩页面内的虚拟页面的数目。例如,对于包括两个虚拟页面的新的经压缩页面,新参考计数可以包括值“2”或者可以以其它方式指示新的经压缩页面包括两个虚拟页面。类似地,对于包括8个虚拟页面的新的经压缩页面,新参考计数可以包括值“8”或者可以以其它方式指示新的经压缩页面包括八个虚拟页面。
与以上关于图1A-B和5描述的经压缩页面偏移相似,新的经压缩页面偏移可以是指指定与经压缩页面中的每一个虚拟页面相关联的数据在该经压缩页面内位于哪里的偏移。在一些这样的示例中,新的经压缩页面内的每一个虚拟页面可以与其自身的新的经压缩页面偏移相关联。相应地,持有若干虚拟页面的新的经压缩页面可以具有若干不同的新的经压缩页面偏移字段。新的经压缩页面偏移可以由字节编号表示。在其中经修改的写入数据可以存储在新的经压缩页面内的首个虚拟页面中的一个示例中,用于经修改的写入数据的新的经压缩页面偏移可以为“0”。在其中经修改的写入数据可以存储在新的经压缩页面内的首个虚拟页面中但是新的经压缩页面以新的压缩元数据开始的另一个示例中,用于经修改的写入数据的新的经压缩页面偏移可以是反映新压缩元数据的大小的字节值。类似地,在其中经修改的写入数据可以存储为新的经压缩页面内的第二个虚拟页面的示例中,用于经修改的写入数据的新的经压缩页面偏移可以是反映首个虚拟页面中的数据的大小的字节值。用于新的经压缩页面内的每一个虚拟页面的新的经压缩页面偏移可以允许虚拟页面的大小的容易计算。
与上文关于图1A-B和5描述的虚拟页面地址相似,新虚拟页面地址可以是指虚拟页面。在一些这样的示例中,新虚拟页面地址可以是用于虚拟页面的地址。在其它这样的示例中,新虚拟页面地址可以是从其可以针对虚拟页面生成虚拟页面地址的虚拟页面编号。在一些示例中,新的经压缩页面内的每一个虚拟页面可以与其自身的虚拟页面地址相关联。新虚拟页面地址可以允许在必要的时候虚拟页面的对应新虚拟页面表格条目的高效查找。
与上文关于图1A-B和5描述的压缩元数据相似,新压缩元数据也可以包括附加元数据,诸如算法和版本标识符或者未使用空间标识符。算法和版本标识符以及未使用空间标识符可以表示由一个或多个位构成的分离字段,所述一个或多个位提供关于新的经压缩页面以及新的经压缩页面内的经压缩数据的附加信息。在一些示例中,算法和版本标识符可以标识用于压缩数据的压缩算法以及压缩算法的版本。在一些这样的示例中,这可以辅助于新的经压缩页面内的数据的解压缩。
在一些示例中,未使用空间标识符可以标识新的经压缩页面的结尾处未使用空间的量。在一些示例中,未使用空间标识符可以辅助于确定存储在新的经压缩页面中的最末虚拟页面的大小。在其它示例中,未使用空间标识符可以替代地是已使用长度标识符。
(至少部分地)基于确定经修改的写入数据将不会在经压缩页面中适应于与压缩索引相关联的位置处,指令148可以进一步访问并且更新经压缩页面的压缩元数据。在一个示例中,指令148可以更新压缩元数据的参考计数以反映经压缩页面包括一个或更少的虚拟页面。在另一个示例中,指令148可以利用空位值或字符来更新虚拟页面地址以反映不再在经压缩页面内找到虚拟页面。在一些示例中,还可以修改用于经处理写入数据的虚拟页面表格条目。在一个示例中,可以移除虚拟页面表格条目。在另一个示例中,虚拟页面表格条目可以填入“0”或其它字符或值以指示它是空余条目。在又其它的示例中,用于经处理写入数据的虚拟页面表格条目可以简单地被标识为要重新写入的可用条目。在其它示例中,用于经修改的写入数据的新虚拟页面表格条目可以被写入到用于经处理写入数据的虚拟页面表格条目的位置中。
在一些示例中,效率进程可以分析并且检阅存储器内的每一个经压缩页面的压缩元数据以便确定两个或者更多经压缩页面是否可以合并。在一些示例中,效率进程可以检阅每一个经压缩页面的参考计数和/或未使用空间字段以确定若干页面是否应当合并。例如,如果若干经压缩页面不再包含最大数目的可允许虚拟页面和/或具有某一百分比或字节数目的未使用空间,类似于以上描述的页面适应进程,效率进程可以确定用于经压缩页面内的虚拟页面的“最佳适应”。在这样的示例中,效率进程可以将经压缩页面例如合并到单个经压缩页面中。在一些示例中,当可能需要附加空间时,效率进程可以动态地分析和检阅经压缩页面的压缩元数据。在其它示例中,效率进程可以连续地分析和检阅经压缩页面的压缩元数据。在又其它的示例中,在用于数个经压缩页面的参考计数跌至某一数目之下的情况下,或者,当用于数个经压缩页面的未使用空间超过某一数量时,可以激活效率进程。
在一些示例中,指令122、124、126、128、130、140、142、144、146和148可以是安装包的部分,所述安装包在安装时可以由处理资源110执行以实现以上描述的功能性。在这样的示例中,存储介质120可以是便携式介质,诸如CD、DVD或闪速驱动、或者由服务器维护的存储器,从该服务器可以对安装包进行下载和安装。在其它示例中,指令122、124、126、128、130、140、142、144、146和148可以是已经安装在包括处理资源110的设备100上的一个应用、多个应用、或者(多个)组件的部分。在这样的示例中,存储介质120可以包括存储器,诸如硬驱动、固态驱动等。在一些示例中,本文关于图1C描述的功能性可以与本文关于图1A-B和图2-5中的任一描述的功能性组合地提供。
图2A是具有数据高速缓存260和经压缩的高速缓存270的示例设备200的框图。如上文关于图1A-C所述,数据高速缓存260可以是指这样的任何组件,其存储数据使得相比于将该数据存储在较慢的数据源(诸如远程服务器)中的情况而言可以更快速地服务或完成未来针对该数据的请求。如上文关于图1B所述的经压缩的高速缓存270可以是指这样的任何组件,其存储经压缩页面使得相比于要将经压缩页面存储在较慢的数据源(诸如远程服务器)中的情况而言可以更快速地服务或完成未来针对经压缩页面的请求。
设备200还包括处理资源210并且可以是适用于执行以下描述的功能性的任何联网或计算设备。如本文中使用的,设备可以是桌面型计算机、膝上型(或笔记本)计算机、工作站、平板计算机、移动电话、智能电视、开关、路由器、服务器、刀片机箱、或者包括处理资源的任何其它处理设备或仪器。
如在图2A中所描绘的,设备200还可以包括机器可读存储介质220,所述机器可读存储介质220包括(例如,编码有)可由处理资源210执行以实现本文关于图2A描述的功能性的指令222、224、226、228和230。在一些示例中,存储介质220可以包括附加的指令。在其它示例中,本文关于指令222、224、226、228、230以及本文关于存储介质220描述的任何附加指令所描述的功能性可以至少部分地实现在电子电路中(例如,经由包括硬件和编程的任何组合以实现本文描述的功能性的组件)。在一些示例中,设备200可以是用于存储平台的控制器节点或者可以位于用于存储平台的控制器节点内。
如本文中使用的,机器可读存储介质可以是包含或存储信息的任何电子、磁性、光学或其它物理存储装置,所述信息诸如可执行指令、数据等。例如,本文描述的任何机器可读存储介质可以是随机存取存储器(RAM)、易失性存储器、非易失性存储器、闪速存储器、存储驱动(例如,硬驱动)、固态驱动、任何类型的存储盘(例如,压缩盘、DVD等)等中的任一或其组合。另外,本文描述的任何机器可读存储介质可以是非暂时性的。
在本文描述的示例中,处理资源可以例如包括一个处理器或者被包括在单个设备中或跨多个设备分布的多个处理器。如本文中使用的,处理器可以是中央处理单元(CPU)、基于半导体的微处理器、图形处理单元(GPU)、配置为检索和执行指令的现场可编程门阵列(FPGA)、适用于检索和执行存储在机器可读存储介质上的指令的其它电子电路中的至少一个或其组合。处理资源210可以获取、解码和执行存储在存储介质220上的指令以执行上文关于指令222、224、226、228和230描述的功能性。在其它示例中,存储介质220的指令中的任一条的功能性可以以电子电路的形式、以编码在机器可读存储介质上的可执行指令的形式或其组合而实现。在图2A的示例中,存储介质220可以通过一个机器可读存储介质或者多个机器可读存储介质实现。
指令222可以接收包含写入数据的写入请求,如上文关于图1A中的指令122所描述。指令224可以将写入数据存储在数据高速缓存260中,如上文关于图1A的指令124所描述。指令226可以向写入数据应用页面适应进程,如上文关于图1A中的指令126所描述。如上文所述,页面适应进程还可以生成针对经压缩页面的压缩元数据。在一些示例中,压缩元数据可以包括参考计数、经压缩页面偏移和虚拟页面地址,如上文关于图1A-C和图5所描述。在其它示例中,压缩元数据还可以包括附加字段,诸如算法和版本标识符以及未使用空间标识符,如上文关于图1A-C和图5所描述。
指令228可以引起针对经处理写入数据生成虚拟页面表格中的虚拟页面表格条目,如上文关于图1A的指令128所描述。如上文所述,虚拟页面表格可以是指包括一个或多个虚拟页面表格条目的表格或其它适合的数据结构。如上文所述,虚拟页面表格条目可以是指虚拟页面表格的行、线或其它合适部分,其通过压缩元数据而辅助于将虚拟存储器地址与物理存储器地址相关联。虚拟页面表格条目可以包括压缩索引和页面地址,如上文关于图1A和图4所描述。如上文所述,压缩索引可以是指包含经压缩页面内的经处理写入数据的特定虚拟页面,并且页面地址可以引用到物理页面。在一些示例中,页面地址可以是经压缩页面的物理页面地址。在其它示例中,页面地址可以是从其可以生成针对经压缩页面的物理页面地址的物理页面编号。虚拟页面表格条目可以附加地包括其它适合的字段。虚拟页面表格条目内的数据或信息可以称为元数据。
再次参照图2A,指令230可以执行对经处理写入数据的内联压缩以将写入数据压缩并且存储在经压缩页面中与压缩索引相关联的位置处,如上文关于图1A的指令130所描述。如上文关于图1A-C和5所述,经压缩页面可以包括具有参考计数、经压缩页面偏移和虚拟页面地址的压缩元数据。
在一些示例中,指令222、224、226、228和230可以是安装包的部分,所述安装包在安装时可以由处理器210执行以便实现以上描述的功能性。在这样的示例中,存储介质220可以是便携式介质,诸如CD、DVD或闪速驱动、或者由服务器维护的存储器,从该服务器可以对安装包进行下载和安装。在其它示例中,指令222、224、226、228和230可以是已经安装在包括处理器210的计算设备200上的一个应用、多个应用或者(多个)组件的部分。在这样的示例中,存储介质220可以包括存储器,诸如硬驱动、固态驱动等。在一些示例中,本文关于图2A描述的功能性可以与本文关于图1、图2B-C和图3-5中的任一描述的功能性组合地提供。
本文中关于图2B描述了另外的示例,图2B是示例设备200的框图,该设备200具有数据高速缓存260、经压缩的高速缓存270以及包括指令以接收读取请求的机器可读存储介质。图2B的示例包括设备200、处理资源210、数据高速缓存260、经压缩的高速缓存270以及包括指令222、224、226、228和230的机器可读存储介质220,如上文关于图2A所描述。如上文所述,数据高速缓存260可以是指这样的任何组件,其存储数据使得相比于要将该数据存储在较慢的数据源(诸如远程服务器)中的情况而言可以更快速地服务或完成未来针对该数据的请求。如上文所述,经压缩的高速缓存270可以是指这样的任何组件,其存储经压缩数据使得相比于要将经压缩数据存储在较慢的数据源(诸如远程服务器)中的情况而言可以更快速地服务或完成未来针对经压缩数据的请求。图2B的示例还包括机器可读存储介质220,所述机器可读存储介质220包括可由处理资源210执行以实现本文关于图2B描述的功能性的指令232、234、236和238。
在一些示例中,存储介质220可以包括附加的指令。在其它示例中,本文关于指令222、224、226、228、230、232、234、236、238以及本文关于存储介质220描述的任何附加指令所描述的功能性可以至少部分地实现在电子电路中(例如,经由包括硬件和编程的任何组合以实现本文描述的功能性的组件)。在一些示例中,设备200可以是用于存储平台的控制器节点或者可以位于用于存储平台的控制器节点内。
如本文中使用的,机器可读存储介质可以是包含或存储信息的任何电子、磁性、光学或其它物理存储装置,所述信息诸如可执行指令、数据等。例如,本文描述的任何机器可读存储介质可以是随机存取存储器(RAM)、易失性存储器、非易失性存储器、闪速存储器、存储驱动(例如,硬驱动)、固态驱动、任何类型的存储盘(例如,压缩盘、DVD等)等中的任一或者其组合。另外,本文描述的任何机器可读存储介质可以是非暂时性的。
在本文描述的示例中,处理资源可以例如包括一个处理器或者被包括在单个设备中或跨多个设备分布的多个处理器。如本文中所使用,处理器可以是中央处理单元(CPU)、基于半导体的微处理器、图形处理单元(GPU)、配置为检索和执行指令的现场可编程门阵列(FPGA)、适用于检索和执行存储在机器可读存储介质上的指令的其它电子电路中的至少一种或其组合。处理资源210可以获取、解码和执行存储在存储介质220上的指令以便执行上文关于指令222、224、226、228、230、232、234、236和238描述的功能性。在其它示例中,存储介质220的指令中的任一条的功能性可以以电子电路的形式、以编码在机器可读存储介质上的可执行指令的形式或其组合而实现。在图2B的示例中,存储介质220可以通过一个机器可读存储介质或者多个机器可读存储介质而实现。
指令222可以接收包含写入数据的写入请求,如上文关于图2A所描述。指令224可以将写入数据存储在数据高速缓存260中,如上文关于图2A所描述。指令226可以向写入数据应用页面适应进程,如上文关于图2A所描述。如上文所述,页面适应进程可以生成针对经压缩页面的压缩元数据。在一些示例中,压缩元数据可以包括参考计数、经压缩页面偏移和虚拟页面地址,如上文关于图2A所描述。在其它示例中,压缩元数据还可以包括附加字段,诸如算法和版本标识符以及未使用空间标识符,如上文关于图2A所描述。
指令228可以引起针对经处理写入数据生成虚拟页面表格中的虚拟页面表格条目,如上文关于图2A和4所描述。如上文所述,虚拟页面表格可以是指包括一个或多个虚拟页面表格条目的表格或其它适合的数据结构。如上文所述,虚拟页面表格条目可以是虚拟页面表格的行、线或其它合适部分,其指辅助于通过压缩元数据而将虚拟存储器地址与物理存储器地址相关联。虚拟页面表格条目可以包括压缩索引和页面地址,如上文关于图2A所描述。压缩索引可以引用到包含经压缩页面内的经处理写入数据的特定虚拟页面,并且页面地址可以引用到物理页面。在一些示例中,页面地址可以是用于经压缩页面的物理页面地址。在其它示例中,页面地址可以是物理页面编号,从所述物理页面编号可以生成针对经压缩页面的物理页面地址。虚拟页面表格条目可以附加地包括其它适合的字段。虚拟页面表格条目内的数据或信息可以称为元数据。
指令230可以执行对经处理写入数据的内联压缩以将写入数据压缩并且存储在经压缩页面中与压缩索引相关联的位置处,如上文关于图2A所描述。如上文所述,经压缩页面可以包括具有参考计数、经压缩页面偏移和虚拟页面地址的压缩元数据。
指令232可以接收针对写入数据的读取请求,如上文关于图1B的指令132所描述。如上文所述,在一些示例中,读取请求可以包括针对写入数据的虚拟页面地址。指令234可以确定写入数据是否位于数据高速缓存260中,如上文关于图1B的指令134所描述。如上文关于图1B所述,如果写入数据位于数据高速缓存260中,写入请求可以例如通过检索并且向请求实体发送写入数据而完成。(至少部分地)基于写入数据没有位于数据高速缓存中的确定,指令236可以确定写入数据是否位于经压缩的高速缓存270中,如上文关于图1B的指令136所描述。如上文关于图1B所述,如果写入数据位于经压缩的高速缓存270中,写入数据可以例如通过检索、解压缩以及向请求实体发送写入数据而完成。(至少部分地)基于写入数据没有位于经压缩的高速缓存中的确定,指令238可以定位和解压缩写入数据,如上文关于图1B的指令138所描述。如上文所述,指令238可以经由虚拟页面表格和压缩元数据来定位和检索写入数据。
在一些示例中,指令222、224、226、228、230、232、234、236和238可以是安装包的部分,所述安装包在安装时可以由处理器210执行以便实现上文描述的功能性。在这样的示例中,存储介质220可以是便携式介质,诸如CD、DVD或闪速驱动、或者由服务器维护的存储器,从该服务器可以对安装包进行下载和安装。在其它示例中,指令222、224、226、228、230、232、234、236和238可以是已经安装在设备200上的一个应用、多个应用或者(多个)组件的部分,所述设备200包括处理资源210。在这样的示例中,存储介质220可以包括存储器,诸如硬驱动、固态驱动等。在一些示例中,本文中关于图2B描述的功能性可以与本文中关于图1、图2A、图2C和图3-5中的任一描述的功能性组合地提供。
在本文中关于图2C描述了另外的示例,图2C是示例设备200的框图,设备200具有数据高速缓存260、经压缩的高速缓存270以及包括用于接收读取-修改-写入请求的指令的机器可读存储介质。图2C的示例包括设备200、处理资源210、数据高速缓存260、经压缩的高速缓存270以及包括指令222、224、226、228和230的机器可读存储介质,如上文关于图2A所描述。如上文所述,数据高速缓存260可以是指这样的任何组件,其存储数据使得相比于将该数据存储在较慢的数据源(诸如远程服务器)中的情况而言可以更快速地服务或完成未来针对该数据的请求。如上文所述,经压缩的高速缓存270可以是指这样的任何组件,其存储经压缩页面使得相比于要将经压缩页面存储在较慢的数据源(诸如远程服务器)中的情况而言可以更快速地服务或完成未来针对经压缩页面的请求。图2C的示例还包括机器可读存储介质220,所述机器可读存储介质220包括可由处理资源210执行以实现本文关于图2C描述的功能性的指令240、242、244和246。
在一些示例中,存储介质220可以包括附加指令。在其它示例中,本文关于指令222、224、226、228、230、240、242、244、246以及本文关于存储介质220描述的任何附加指令所描述的功能性可以至少部分地实现在电子电路中(例如,经由包括硬件和编程的任何组合以实现本文描述的功能性的组件)。在一些示例中,设备200可以是用于存储平台的控制器节点或者可以位于用于存储平台的控制器节点内。
如本文中使用的,机器可读存储介质可以是包含或存储信息的任何电子、磁性、光学或其它物理存储装置,所述信息诸如可执行指令、数据等。例如,本文描述的任何机器可读存储介质可以是随机存取存储器(RAM)、易失性存储器、非易失性存储器、闪速存储器、存储驱动(例如,硬驱动)、固态驱动、任何类型的存储盘(例如,压缩盘、DVD等)等中的任一个或者其组合。另外,本文描述的任何机器可读存储介质可以是非暂时性的。
在本文描述的示例中,处理资源可以例如包括一个处理器或者被包括在单个设备中或跨多个设备分布的多个处理器。如本文中所使用,处理器可以是中央处理单元(CPU)、基于半导体的微处理器、图形处理单元(GPU)、配置为检索和执行指令的现场可编程门阵列(FPGA)、适用于检索和执行存储在机器可读存储介质上的指令的其它电子电路中的至少一个或其组合。处理资源210可以获取、解码和执行存储在存储介质220上的指令以执行上文关于指令222、224、226、228、230、240、242、244和246描述的功能性。在其它示例中,存储介质220的指令中的任一条的功能性可以以电子电路的形式、以编码在机器可读存储介质上的可执行指令的形式或其组合而实现。在图2C的示例中,存储介质220可以通过一个机器可读存储介质或者多个机器可读存储介质而实现。
指令222可以接收包含写入数据的写入请求,如上文关于图2A所描述。指令224可以将写入数据存储在数据高速缓存260中,如上文关于图2A所描述。指令226可以向写入数据应用页面适应进程,如上文关于图2A所描述。如上文所述,页面适应进程可以生成针对经压缩页面的压缩元数据。在一些示例中,压缩元数据可以包括参考计数、经压缩页面偏移和虚拟页面地址,如上文关于图2A所描述。在其它示例中,压缩元数据还可以包括附加字段,诸如算法和版本标识符以及未使用空间标识符,如上文关于图2A所描述。
指令228可以引起针对经处理写入数据生成虚拟页面表格中的虚拟页面表格条目,如上文关于图2A和4所描述。如上文所述,虚拟页面表格可以是指包括一个或多个虚拟页面表格条目的表格或其它适当的数据结构。如上文所述,虚拟页面表格条目可以是指虚拟页面表格的行、线或其它合适部分,其辅助于通过压缩元数据的方式将虚拟存储器地址与物理存储器地址相关联。虚拟页面表格条目可以包括如以上关于图2A所述的压缩索引和页面地址。压缩索引可以引用到包含经压缩页面内的经处理写入数据的特定虚拟页面,并且页面地址可以引用到物理页面。在一些示例中,页面地址可以是针对经压缩页面的物理页面地址。在其它示例中,页面地址可以是物理页面编号,从所述物理页面编号可以生成针对经压缩页面的物理页面地址。虚拟页面表格条目可以附加地包括其它适当的字段。虚拟页面表格条目内的数据或信息可以称为元数据。
指令230可以执行对经处理写入数据的内联压缩以便将写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处,如上文关于图2A所描述。如上文所述,经压缩页面可以包括压缩元数据,所述压缩元数据可以包括参考计数、经压缩页面偏移和虚拟页面地址。
指令240可以接收RMW请求以修改写入数据并且重新写入经修改的写入数据,如上文关于图1C的指令140所描述。如上文所述,在一些示例中,RMW请求可以包括用于要修改的写入数据的虚拟页面地址。指令242可以将经修改的写入数据存储在数据高速缓存260中,如上文关于图1C的指令142所描述。指令244可以向经修改的写入数据应用页面重新适应进程以确定经修改的写入数据是否将在经压缩页面中适应于与压缩索引相关联的位置处,如上文关于图1C的指令144所描述。如上文所述,在一些示例中,页面重新适应进程可以估计或预测经修改的写入数据的大小。页面重新适应进程还可以经由压缩元数据确定经压缩的写入数据的大小。(至少部分地)基于经压缩的写入数据的大小与所估计的经修改写入数据大小的比较,页面重新适应进程可以确定经修改的写入数据是否将在经压缩页面中适应于压缩索引处。
(至少部分地)基于确定经修改的写入数据将适应,指令246可以执行对经修改的写入数据的内联压缩以将经修改的写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处,如上文关于图1C的指令146所描述。
在一些示例中,指令222、224、226、228、230、240、242、244和246可以是安装包的部分,所述安装包在安装时可以由处理器210执行以便实现以上描述的功能性。在这样的示例中,存储介质220可以是便携式介质,诸如CD、DVD或闪速驱动、或者由服务器维护的存储器,可以从所述服务器对安装包进行下载和安装。在其它示例中,指令222、224、226、228、230、240、242、244和246可以是已经安装在包括处理器210的设备200上的一个应用、多个应用或者(多个)组件的部分。在这样的示例中,存储介质220可以包括存储器,诸如硬驱动、固态驱动等。在一些示例中,本文中关于图2C描述的功能性可以与本文中关于图1、图2A-2B和图3-5中任一项描述的功能性组合地提供。
图3A是用于管理存储器的示例方法300的流程图,包括接收包含写入数据的写入请求,向写入数据应用页面适应进程,以及执行内联压缩以将经处理写入数据压缩和存储在具有压缩元数据的经压缩页面中。尽管在下文参照图2A的设备200描述方法300的执行,但是可以利用用于方法300的执行的其它适当的系统(例如,图1A的设备100)。附加地,方法300的实现不限于这样的示例。
在图3A的示例中,方法300可以是设备200的方法。在方法300的302处,指令222可以在设备200处接收包含写入数据的写入请求。该接收可以如上文关于图2A的指令222描述的那样来执行。在304处,指令224可以在设备200处将写入数据存储在数据高速缓存260中,如上文关于图2A的指令224所描述。在306处,指令226可以将页面适应进程应用于写入数据,如上文关于图2A的指令226所描述。
在308处,指令228可以针对经处理写入数据生成虚拟页面表格中的虚拟页面表格条目,如上文关于图2A的指令228所描述。如上文所述,虚拟页面表格条目可以包括压缩索引和页面地址。在310处,指令230可以执行对经处理写入数据的内联压缩以将经处理写入数据压缩和存储在经压缩页面中与压缩索引相关联的位置处,如上文关于图2A的指令230所描述。如上文所述,经压缩页面可以包括压缩元数据,所述压缩元数据具有算法和版本标识符、参考计数、经压缩页面偏移、虚拟页面地址和未使用空间标识符。
尽管图3A的流程图示出了某些功能性的具体执行次序,但是方法300不限于该次序。例如,在流程图中接连示出的功能性可以以不同的次序执行,可以并发地或者以部分并发性执行,或其组合。在一些示例中,本文关于图3A描述的功能性可以与本文关于图1-2、图3B-C和图4-5中任一描述的功能性组合地提供。
图3B是用于管理存储器的示例方法315的流程图,包括接收针对写入数据的读取请求,确定写入数据的位置,以及基于该位置而解压缩写入数据。尽管下文参照图2B的设备200描述方法315的执行,但是可以利用用于方法315的执行的其它适合的系统(例如,图1B的设备100)。附加地,方法315的实现不限于这样的示例。
在图3B的示例中,方法315可以是设备200的方法并且可以紧随图3A的方法300。在方法315的320处,指令232可以在设备200处接收针对写入数据的读取请求。该接收可以如上文关于图2B的指令232描述的那样来执行。在322处,指令234可以确定写入数据是否位于数据高速缓存260中,如上文关于图2B的指令234所描述。如果确定写入数据位于数据高速缓存260中,可以检索写入数据并且将它发送给请求实体,从而完成读取请求,如上文关于图2B所描述。然而,如果做出写入数据没有位于数据高速缓存260中的确定,方法315可以进行到324。
在324处,指令236可以确定写入数据是否位于经压缩的高速缓存270中,如上文关于图2B的指令236所描述。如果在324处确定写入数据没有位于经压缩的高速缓存260中,方法315可以进行到326。在326处,指令238可以经由虚拟页面表格和压缩元数据来定位和检索写入数据,如上文关于图2B的指令238所描述。在328处,写入数据可以基于压缩元数据的算法和版本标识符进行解压缩。在一些示例中,一旦已经在其经压缩页面内定位写入数据,就可以分析压缩元数据来确定用于压缩写入数据的压缩算法和压缩算法版本。基于压缩算法和压缩算法版本,包括写入数据的经压缩页面可以使用对应的解压缩算法进行解压缩。在一些示例中,在解压缩经压缩页面之前,经压缩页面可以首先存储在经压缩的高速缓存270中。在一些这样的示例中,经解压缩的数据然后可以在被发送给请求实体以完成读取请求之前存储在数据高速缓存260中。如果在324处确定写入数据位于经压缩的高速缓存260中,方法315可以进行到328并且写入数据可以被解压缩。
尽管图3B的流程图示出了某些功能性的具体执行次序,但是方法315不限于该次序。例如,在流程图中接连示出的功能性可以以不同的次序执行,可以并发地或者以部分并发性执行,或者其组合。在一些示例中,本文关于图3B描述的功能性可以与本文关于图1-2、3A、3C和4-5中任一个描述的功能性组合地提供。
图3C是用于管理存储器的示例方法340的流程图,包括接收修改写入数据的读取-修改-写入请求并且应用页面重新适应进程以便确定经修改的写入数据是否将适应于经压缩页面中,以及基于该确定而对经压缩页面执行内联压缩或者对新的经压缩页面执行内联压缩。尽管下面参照图2C的设备200和图1C的设备100描述方法340的执行,但是可以利用用于方法340的执行的其它适当系统。附加地,方法340的实现不限于这样的示例。
在图3C的示例中,方法340可以是设备100和设备200的方法并且可以跟随在图3A的方法300之后。在方法340的342处,图1C的指令140和图2C的指令240可以分别在设备100和200处接收读取-修改-写入请求以便修改写入数据并且重新写入经修改的写入数据。这种接收可以如上文关于图1C的指令140和图2C的指令240描述的那样执行。在344处,指令142和指令242可以分别将经修改的写入数据存储在设备100处以及设备200处的数据高速缓存260中,如上文关于图1C的指令142和图2C的指令242描述的那样。在346处,指令144和指令244可以向经修改的写入数据应用页面重新适应进程以便确定经修改的写入数据是否将在经压缩页面中适应于与压缩索引相关联的位置处,如上文分别关于图1C和2C所描述。
(至少部分地)基于经修改的写入数据将适应的确定,方法340可以进行到348。在348处,指令146和指令246将执行经修改的写入数据的内联压缩以便将经修改的写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处,如上文分别关于图1C和2C所描述。
如果确定经修改的写入数据将不适应,方法340可以进行到350。在350处,指令148可以生成用于经修改的写入数据的虚拟页面表格中的新虚拟页面表格条目,如上文关于图1C的指令148所描述。新虚拟页面表格条目可以包括新压缩索引和新页面地址,如上文关于图1C和图2C所描述。在352处,(至少部分地)基于经修改的写入数据将没有适应的确定,指令148可以执行经修改的写入数据的内联压缩以便将经修改的写入数据压缩和存储在新的经压缩页面中,如上文关于图1C的指令148所描述。如上文所述,新的经压缩页面可以包括新压缩元数据,所述新压缩元数据具有新算法和版本标识符、新参考计数、新的经压缩页面偏移、新虚拟页面地址和新的未使用空间标识符。在354处,(至少部分地)基于经修改的写入数据将没有适应的确定,指令148可以进一步更新经压缩页面的压缩元数据,如上文关于图1C的指令148所描述。
尽管图3C的流程图示出了某些功能性的具体执行次序,但是方法340不限于该次序。例如,在流程图中接连示出的功能性可以以不同的次序执行,可以并发地或者以部分并发性执行,或者其组合。在一些示例中,本文关于图3C描述的功能性可以与本文关于图1-2、3A-B和4-5中任一个描述的功能性组合地提供。

Claims (11)

1.一种非暂时性机器可读存储介质,包括指令,所述指令能由设备的处理资源执行以便:
接收包含写入数据的写入请求;
将所述写入数据存储在数据高速缓存中;
将页面适应进程应用至所述写入数据;
引起用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目的生成,其中虚拟页面表格条目包括压缩索引和页面地址;
执行经处理写入数据的内联压缩以便将经处理写入数据在经压缩页面中压缩和存储在与压缩索引相关联的位置处,其中经压缩页面包括具有参考计数、经压缩页面偏移和虚拟页面地址的压缩元数据;
接收读取-修改-写入请求以便修改所述写入数据和重新写入经修改的写入数据;
将所述经修改的写入数据存储在数据高速缓存中;
将页面重新适应进程应用至所述经修改的写入数据以便确定所述经修改的写入数据是否将在经压缩页面中适应于与压缩索引相关联的位置处;以及
基于确定所述经修改的写入数据将在经压缩页面中适应于与压缩索引相关联的位置处,执行所述经修改的写入数据的内联压缩以便将所述经修改的写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处。
2.如权利要求1所述的存储介质,其中所述指令还包括用于以下各项的指令:
接收针对所述写入数据的读取请求;
确定所述写入数据是否位于数据高速缓存中;
基于确定所述写入数据没有位于数据高速缓存中,确定所述写入数据是否位于经压缩的高速缓存中;以及
基于确定所述写入数据没有位于经压缩的高速缓存中,
经由虚拟页面表格和压缩元数据来定位所述写入数据;以及
解压缩所述写入数据。
3.如权利要求1所述的存储介质,其中所述指令还包括用于以下各项的指令:
基于确定所述经修改的写入数据将不会在经压缩页面中适应于与压缩索引相关联的位置处,
引起用于所述经修改的写入数据的虚拟页面表格中的新虚拟页面表格条目的生成,其中新虚拟页面表格条目包括新压缩索引和新页面地址,
执行所述经修改的写入数据的内联压缩以便将所述经修改的写入数据压缩和存储在新的经压缩页面中,其中新的经压缩页面包括具有新参考计数、新的经压缩页面偏移和新虚拟页面地址的新压缩元数据,以及
更新经压缩页面的压缩元数据。
4.如权利要求1所述的存储介质,其中页面适应进程在经压缩页面中适应高达数据的八个虚拟页面。
5.如权利要求4所述的存储介质,其中页面适应进程生成压缩元数据,所述压缩元数据具有参考计数、用于高达八个页面中的每一个的经压缩页面偏移、以及用于高达八个页面中的每一个的虚拟页面地址。
6.如权利要求1所述的存储介质,其中压缩元数据具有算法和版本标识符以及未使用空间标识符。
7.如权利要求1所述的存储介质,其中页面适应进程基于数据高速缓存中的数据集合来确定用于经压缩页面中的经压缩数据的最佳适应,其中数据集合包括写入请求的写入数据。
8.一种用于管理存储器的设备,包括:
处理资源;
数据高速缓存;
经压缩的高速缓存;以及
如权利要求1-7中任一项所述的非暂时性机器可读存储介质。
9.一种用于管理存储器的方法,其中所述方法包括:
在设备处接收包含写入数据的写入请求;
在所述设备处将所述写入数据存储在数据高速缓存中;
将页面适应进程应用至所述写入数据;
生成用于经处理写入数据的虚拟页面表格中的虚拟页面表格条目,其中虚拟页面表格条目包括压缩索引和页面地址;
执行经处理写入数据的内联压缩以便将经处理写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处,其中经压缩页面包括具有算法和版本标识符、参考计数、经压缩页面偏移、虚拟页面地址和未使用空间标识符的压缩元数据;
在所述设备处接收读取-修改-写入请求以便修改所述写入数据并且重新写入经修改的数据;
在所述设备处将所述经修改的写入数据存储在数据高速缓存中;
将页面重新适应进程应用至所述经修改的写入数据以便确定所述经修改的写入数据是否将在经压缩页面中适应于与压缩索引相关联的位置处;以及
基于确定所述经修改的写入数据将在经压缩页面中适应于与压缩索引相关联的位置处,执行所述经修改的写入数据的内联压缩以便将所述经修改的写入数据在经压缩页面中压缩和存储于与压缩索引相关联的位置处。
10.如权利要求9所述的方法,其中所述方法还包括:
在所述设备处接收针对所述写入数据的读取请求;
确定所述写入数据是否位于数据高速缓存中;
基于确定所述写入数据没有位于数据高速缓存中,确定所述写入数据是否位于经压缩的高速缓存中;以及
基于确定所述写入数据没有位于经压缩的高速缓存中,
经由虚拟页面表格和压缩元数据来定位经处理数据,以及
基于算法和版本标识符来解压缩所述写入数据。
11.如权利要求9所述的方法,其中所述方法还包括:
基于确定所述经修改的写入数据将不会在经压缩页面中适应于与压缩索引相关联的位置处,
生成用于所述经修改的写入数据的虚拟页面表格中的新虚拟页面表格条目,其中新虚拟页面表格条目包括新压缩索引和新页面地址,
执行所述经修改的写入数据的内联压缩以便将所述经修改的写入数据压缩和存储于新的经压缩页面中,其中新的经压缩页面包括具有新算法和版本标识符、新参考计数、新的经压缩页面偏移、新虚拟页面地址和新的未使用空间标识符的新压缩元数据,以及
更新经压缩页面的压缩元数据。
CN201680022837.3A 2016-04-29 2016-04-29 用于管理存储器的设备和方法以及存储介质 Active CN107548491B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2016/030082 WO2017188985A1 (en) 2016-04-29 2016-04-29 Compressed pages having data and compression metadata

Publications (2)

Publication Number Publication Date
CN107548491A CN107548491A (zh) 2018-01-05
CN107548491B true CN107548491B (zh) 2020-10-16

Family

ID=60160983

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680022837.3A Active CN107548491B (zh) 2016-04-29 2016-04-29 用于管理存储器的设备和方法以及存储介质

Country Status (4)

Country Link
US (1) US10963377B2 (zh)
EP (1) EP3278229B1 (zh)
CN (1) CN107548491B (zh)
WO (1) WO2017188985A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10203897B1 (en) 2016-12-02 2019-02-12 Nutanix, Inc. Dynamic data compression
US11030149B2 (en) * 2018-09-06 2021-06-08 Sap Se File format for accessing data quickly and efficiently
CN110968528B (zh) * 2018-09-30 2024-05-28 北京忆恒创源科技股份有限公司 应用统一缓存架构为非易失存储介质组装数据
US11455326B2 (en) * 2019-07-21 2022-09-27 Microsoft Technology Licensing, Llc Efficient storage and retrieval of textual data
CN115803720A (zh) * 2021-05-13 2023-03-14 辉达公司 数据压缩应用程序编程接口
US11816215B2 (en) * 2022-02-16 2023-11-14 Uab 360 It System and method for archive AM scanning

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060212672A1 (en) * 2002-09-18 2006-09-21 Sashikanth Chandrasekaran Method and mechanism for on-line data compression and in-place updates
CN102708067A (zh) * 2011-03-21 2012-10-03 微软公司 组合具有相同内容的存储器页面
US8700865B1 (en) * 2006-11-02 2014-04-15 Nvidia Corporation Compressed data access system and method
US20150100736A1 (en) * 2013-08-20 2015-04-09 International Business Machines Corporation Hardware managed compressed cache
CN105474180A (zh) * 2013-06-13 2016-04-06 微软技术许可有限责任公司 基于页面的压缩存储管理

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU1447295A (en) * 1993-12-30 1995-08-01 Connectix Corporation Virtual memory management system and method using data compression
US5696927A (en) * 1995-12-21 1997-12-09 Advanced Micro Devices, Inc. Memory paging system and method including compressed page mapping hierarchy
US6658549B2 (en) * 2001-05-22 2003-12-02 Hewlett-Packard Development Company, Lp. Method and system allowing a single entity to manage memory comprising compressed and uncompressed data
US8140744B2 (en) 2004-07-01 2012-03-20 Seagate Technology Llc Method and system for increasing data storage reliability and efficiency via compression
US7840877B2 (en) 2006-10-31 2010-11-23 Hewlett-Packard Development Company, L.P. Mass storage system and method
US20080307174A1 (en) 2007-06-08 2008-12-11 Apple Inc. Dual Use Memory Management Library
US7987161B2 (en) 2007-08-23 2011-07-26 Thomson Reuters (Markets) Llc System and method for data compression using compression hardware
US8583893B2 (en) 2009-05-28 2013-11-12 Marvell World Trade Ltd. Metadata management for virtual volumes
US8190850B1 (en) 2009-10-01 2012-05-29 Emc Corporation Virtual block mapping for relocating compressed and/or encrypted file data block blocks
US8627041B2 (en) 2009-10-09 2014-01-07 Nvidia Corporation Efficient line and page organization for compression status bit caching
US8364929B2 (en) 2009-10-23 2013-01-29 Seagate Technology Llc Enabling spanning for a storage device
US8832142B2 (en) 2010-08-30 2014-09-09 Oracle International Corporation Query and exadata support for hybrid columnar compressed data
CN101739359B (zh) * 2009-12-17 2011-12-28 华为终端有限公司 存储装置、移动终端及数据访问方法、调频方法
US9401967B2 (en) 2010-06-09 2016-07-26 Brocade Communications Systems, Inc. Inline wire speed deduplication system
US8694703B2 (en) 2010-06-09 2014-04-08 Brocade Communications Systems, Inc. Hardware-accelerated lossless data compression
US20120110239A1 (en) * 2010-10-27 2012-05-03 Seagate Technology Llc Causing Related Data to be Written Together to Non-Volatile, Solid State Memory
US8838890B2 (en) 2011-04-14 2014-09-16 International Business Machines Corporation Stride based free space management on compressed volumes
US8788788B2 (en) 2011-08-11 2014-07-22 Pure Storage, Inc. Logical sector mapping in a flash storage array
US20130282676A1 (en) 2012-03-28 2013-10-24 Quantum Corporation Garbage collection-driven block thinning
US8615500B1 (en) 2012-03-29 2013-12-24 Emc Corporation Partial block allocation for file system block compression using virtual block metadata
US9026740B1 (en) 2012-06-13 2015-05-05 Emc Corporation Prefetch data needed in the near future for delta compression
US20150242432A1 (en) 2014-02-21 2015-08-27 Microsoft Corporation Modified Memory Compression

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060212672A1 (en) * 2002-09-18 2006-09-21 Sashikanth Chandrasekaran Method and mechanism for on-line data compression and in-place updates
US8700865B1 (en) * 2006-11-02 2014-04-15 Nvidia Corporation Compressed data access system and method
CN102708067A (zh) * 2011-03-21 2012-10-03 微软公司 组合具有相同内容的存储器页面
CN105474180A (zh) * 2013-06-13 2016-04-06 微软技术许可有限责任公司 基于页面的压缩存储管理
US20150100736A1 (en) * 2013-08-20 2015-04-09 International Business Machines Corporation Hardware managed compressed cache

Also Published As

Publication number Publication date
EP3278229A4 (en) 2018-11-21
WO2017188985A1 (en) 2017-11-02
US10963377B2 (en) 2021-03-30
EP3278229A1 (en) 2018-02-07
US20190138446A1 (en) 2019-05-09
EP3278229B1 (en) 2020-09-16
CN107548491A (zh) 2018-01-05

Similar Documents

Publication Publication Date Title
CN107548491B (zh) 用于管理存储器的设备和方法以及存储介质
US9996466B2 (en) Apparatus, system and method for caching compressed data
US9798655B2 (en) Managing a cache on storage devices supporting compression
JP6316974B2 (ja) フラッシュメモリ圧縮
CN107250991B (zh) 透明硬件辅助存储器解压缩
US9164676B2 (en) Storing multi-stream non-linear access patterns in a flash based file-system
CN110832590A (zh) 在基于相变存储器的存储设备中减轻写入放大的方法和系统
KR102459964B1 (ko) 가상 메모리 용량을 제공하는 메모리 모듈 및 그것의 동작 방법
CN107665095B (zh) 存储器空间管理的设备、方法及可读存储介质
US9811419B2 (en) Validation bits and offsets to represent logical pages split between data containers
US20170004069A1 (en) Dynamic memory expansion by data compression
US10310984B2 (en) Storage apparatus and storage control method
US10445012B2 (en) System and methods for in-storage on-demand data decompression
CN102792296B (zh) 移动终端中请求页面调度方法、控制器以及移动终端
US11914527B2 (en) Providing a dynamic random-access memory cache as second type memory per application process
US20230176734A1 (en) Adaptive mapping for transparent block device level compression
KR101113894B1 (ko) 반도체 메모리 시스템 및 이의 제어 방법

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