CN101923499B - 执行防电源故障高速缓存而无需原子元数据的技术 - Google Patents
执行防电源故障高速缓存而无需原子元数据的技术 Download PDFInfo
- Publication number
- CN101923499B CN101923499B CN2010101580398A CN201010158039A CN101923499B CN 101923499 B CN101923499 B CN 101923499B CN 2010101580398 A CN2010101580398 A CN 2010101580398A CN 201010158039 A CN201010158039 A CN 201010158039A CN 101923499 B CN101923499 B CN 101923499B
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- metadata
- cache line
- cache lines
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1441—Resetting or repowering
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- 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/1032—Reliability improvement, data loss prevention, degraded operation etc
-
- 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/22—Employing cache memory using specific memory technology
- G06F2212/222—Non-volatile memory
-
- 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/60—Details of cache memory
- G06F2212/601—Reconfiguration of cache memory
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
一种方法和系统允许将永久存储设备中的数据防电源故障地回写或直写高速缓存入高速缓存设备的一个或多个高速缓存行。当存储设备中的数据被高速缓存时,没有与任一高速缓存行关联的元数据被原子地写至高速缓存设备。如此,在高速缓存数据期间不需要专门的高速缓存硬件来允许元数据的原子写入。
Description
发明领域
本发明涉及高速缓存,更具体但非排他地涉及非易失介质中的防电源故障回写或直写高速缓存。
背景描述
存储子系统是计算机系统最慢的子系统之一,尤其是当存储子系统利用例如硬盘驱动器(HDD)的存储介质时。由于读/写头需要机械移动至HDD盘组上的特定位置以读/写数据,HDD需要相对长的存取时间。
为了提高HDD的性能,非易失高速缓存存储器可用来保留最近从HDD读取和写至HDD的结果。通过对HDD数据进行高速缓存,计算机系统的性能得以提高,且HDD可在更长的周期内保持停止运作(spun down)以减少计算机系统的功耗。
然而,如果计算机系统的供电被始料未及地断开,则非易失高速缓存存储器中的数据必须再次与HDD关联以防止数据败坏。通过高速缓存数据写入支持原子元数据写入的专用高速缓存硬件可用来确保这种恢复准确地完成,但这增加了计算机系统的成本。
附图简述
本发明的实施例的特征和优点将从下面对主题事项的详细说明中得以明暸,其中:
图1示出根据本发明一个实施例的用于实现本文描述的方法的系统;
图2示出根据本发明一个实施例的I/O控制器的方框图;
图3示出根据本发明一个实施例的操作系统中的模块的方框图;
图4示出根据本发明一个实施例的高速缓存设备的配置;
图5示出根据本发明一个实施例的直写高速缓存方案的流程图;
图6A示出根据本发明一个实施例的回写高速缓存方案的流程图;
图6B示出根据本发明一个实施例的回写高速缓存方案的流程图;
图6C示出根据本发明一个实施例的回写高速缓存方案的流程图;
图7示出根据本发明一个实施例的将数据插入高速缓存行的方法的流程图;以及
图8A和8B示出根据本发明一个实施例的实现回写高速缓存方案的伪代码。
详细说明
本文描述的本发明实施例是通过示例示出的而不是在附图中作出限定。为了解说的简单和清楚,附图中示出的要素不一定按比例绘出。例如,一些要素的尺寸可相对于其它要素放大以清楚表示。此外,在认为合适的情形下,在附图中重复出现的许多附图标记用来指示相应或相似的要素。说明书中对本发明“一个实施例”或“一实施例”的引述表示结合该实施例描述的具体特征、结构或特点包含在本发明的至少一个实施例中。因此,在说明书中多处出现的短语“在一个实施例中”不一定全部指向同一实施例。
本发明的实施例提供一种方法和系统,允许在永久存储设备中将数据防电源故障回写或直写高速缓存入高速缓存设备的一条或多条高速缓存行,该高速缓存设备不要求原子元数据。当存储设备中的数据被高速缓存时,没有与任意高速缓存行关联的元数据原子地写入高速缓存设备。如此,就不需要在高速缓存数据的过程中原子地写入元数据的专门的高速缓存硬件。
在本发明的一个实施例中,与高速缓存行关联的元数据包括但不局限于:数据在经过高速缓存的存储设备上的位置,例如数据的逻辑块地址(LBA);序列号;高速缓存行状态,例如数据是干净的还是腐败的;存储设备的高速缓存LBA的牵制(pin)信息等。存储设备包括但不局限于固态驱动器(SSD)、HDD、独立盘卷的冗余(RAID)组盘、磁带驱动器、压缩盘(CD)、软盘、通用串行总线(USB)闪存驱动器或任意其它形式的非易失或永久计算机数据存储介质。高速缓存设备包括但不局限于非易失介质、SSD、NAND闪存、相变存储器或任意其它形式的非易失或永久计算机数据存储介质。
图1示出用于实现根据本发明一个实施例在本文中披露的方法的系统100。系统100包括但不局限于台式计算机、膝上计算机、笔记簿计算机、上网本计算机、个人数字助理(PDA)、服务器、工作站、蜂窝电话、移动计算设备、互联网设施或任意其它类型的计算设备。在另一实施例中,用来实现本文描述方法的系统100可以是芯片系统上(SOC)的系统。
系统100包括存储器/图形控制器120和I/O控制器150。存储器/图形控制器120一般提供存储器和I/O管理功能,还有可由处理器110访问或使用的许多通用和/或专用寄存器、定时器等。处理器110可使用一个或多个处理器实现或使用多核处理器实现。根据本发明的一个实施例,I/O控制器150允许将存储设备160中的数据防电源故障回写或直写高速缓存入高速缓存设备170或非易失存储器144的一条或多条高速缓存行。
存储器/图形控制器120执行多种功能,以使处理器110访问包含易失存储器142和/或非易失存储器144的主存储器140并与之通信。在本发明的另一实施例中,另一易失存储器142(图1未示出)内嵌在存储设备160中以对存储设备160的数据进行高速缓存。根据本发明的另一实施例,存储器/图形控制器120可取代I/O控制器150而允许将存储设备160中的数据防电源故障回写或直写高速缓存入高速缓存设备170的一条或多条高速缓存行。
易失存储器142包括但不局限于同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、RAMBUS DRAM(RDRAM)和/或任意其它类型的随机存取存储器设备。非易失存储器144包括但不局限于NAND闪存、只读存储器(ROM)、电可擦除可编程ROM(EEPROM)和/或任意其它要求类型的存储器设备。主存储器140存储由处理器110执行的信息和指令。在处理器110执行指令的同时,主存储器140也可存储临时变量或其它中间信息。在本发明的另一实施例中,存储器/图形控制器120是处理器110的一部分。
存储器/图形控制器120连接于显示设备130,该显示设备130包括但不局限于液晶显示器(LCD)、阴极射线管(CRT)显示器或任何其它形式的视频显示设备。I/O控制器150耦合于但不局限于存储设备160、高速缓存设备170、网络接口180和键盘/鼠标190。具体地说,I/O控制器150执行多种功能以使处理器110与存储设备160、高速缓存设备170、网络接口180和键盘/鼠标190通信。在一个实施例中,高速缓存设备170可以是存储设备160的一部分。
网络接口180是使用任意类型的公知网络接口标准实现的,包括但不局限于以太网接口、USB接口、外围组件互连(PCI)直通接口、无线接口和/或任意其它合适类型的接口。无线接口根据但不局限于电气和电子工程师协会(IEEE)无线标准族802.11、家用插头AV(HPAV)、超宽带(UWB)、蓝牙、WiMax或任意其它形式的无线通信协议而工作。
在本发明的一个实施例中,图1所示的总线是由与之相连的全部组件共享的通信链路。在本发明的另一实施例中,图1所示总线是彼此连接的多对组件之间的点对点通信链路。尽管图1示出的组件作为系统100中的分立模块予以描述,然而由这些模块中的一些实现的功能可集成在单个半导体电路中或使用两个或更多分立集成电路来实现。例如,尽管存储器/图形控制器120和I/O控制器150表示为分立模块,然而本领域内技术人员很容易理解存储器/图形控制器120和I/O控制器150可集成在单个半导体电路中。
图2示出根据本发明一个实施例的I/O控制器150的方框图200。I/O控制器150具有复原控制器212和运行控制器214。在本发明的一个实施例中,运行控制器214具有基于探试的高速缓存策略以确定存储设备160的数据是被高速缓存还是从高速缓存设备170中逐出。探试包括但不局限于最近访问的LBA、LBA的牵制(pin)信息等。在本发明的一个实施例中,运行控制器214也执行高速缓存方案,例如检测高速缓存命中或高速缓存未命中以及高速缓存或逐出命令的队列化。
在本发明的一个实施例中,运行控制器214利用高速缓存设备170的完整数据容量以高速缓存存储设备160的数据。在本发明的另一实施例中,运行控制器214利用高速缓存设备170完整数据容量的一部分以高速缓存存储设备160的数据。例如,在本发明的一个实施例中,运行控制器214利用高速缓存设备170的一半完整数据容量来高速缓存存储设备160的数据并将高速缓存设备170的另一半完整数据容量用作存储介质。
在本发明的一个实施例中,复原控制器212和运行控制器214允许将存储设备160中的数据防电源故障回写或直写高速缓存入高速缓存设备170。相关领域技术人员很容易理解,也可采用其它的高速缓存方案而不会影响本发明的工作。在本发明的一个实施例中,在系统100出故障的情形下,复原控制器212和运行控制器214保持存储设备160中的数据和高速缓存设备170中高速缓存的数据的完整性或一致性。系统100的故障事件包括但不局限于,功率丢失故障、操作系统(OS)崩溃故障、系统100的不正当停止运作以及不在系统100正常操作状态下的其它事件。
在本发明一个实施例中,复原控制器212在已发生故障事件后复原高速缓存设备170中的高速缓存行的高速缓存状态。在本发明的其它实施例中,复原控制器212处理其它事件,包括但不局限于分离检测和处理、在运行控制器214初始化前处理全部I/O数据等。尽管复原控制器212和运行控制器214描述为图2中I/O控制器150的一部分,然而这并不构成限制。复原控制器212和运行控制器214可一同实现在同一硬件或软件模块中或在不同硬件或软件模块中单独实现。
在本发明的一个实施例中,复原控制器212和运行控制器214是存储器/图形控制器120的一部分。在本发明的另一实施例中,复原控制器212和运行控制器214也可合并为单个控制器。相关领域内技术人员很容易理解可采用不同配置的复原控制器212和运行控制器214而不会影响本发明的工作。例如,在本发明的一个实施例中,复原控制器212实现为存储在系统100的供选ROM中的固件,而运行控制器214实现在系统100上执行的OS的块存储驱动器中。
图3示出根据本发明一个实施例的OS中的模块的方框图300。OS具有应用层310和文件系统320。应用层310能访问由文件系统320组织的文件。OS还具有存储驱动器堆栈330和块驱动器340。根据本发明的一个实施例,块驱动器340具有运行/复原控制器344。块驱动器340可包括运行控制器、复原控制器或运动控制器和复原控制器两者。
运行/复原控制器344耦合于存储设备160和高速缓存设备170并且将存储设备160中的数据高速缓存入高速缓存设备170。在高速缓存存储设备160中的数据的过程中,没有与高速缓存设备170的任何高速缓存行关联的状态信息或元数据原子地存储在高速缓存设备170中。在本发明的一个实施例中,OS利用回写高速缓存方案,其中要写至存储设备160的任何数据首先被写至高速缓存设备170。OS系统在写将数据至高速缓存设备170后不是立即将该数据写至存储设备160,而是等待适宜时间才将数据写至存储设备。如此,存储设备160的数据访问被最小化并且OS在执行其它指令前不需要等待将数据写至存储设备160。由于高速缓存设备170的数据访问速率高于存储设备160的数据访问速率,回写高速缓存方案有利于加速系统100的存储子系统。
当利用回写高速缓存方案时,存储设备160中的数据可与高速缓存设备170中的高速缓存数据不同步。在本发明的一个实施例中,当系统100的处理器110、存储设备160或高速缓存设备170的利用率是正被使用时,运行/复原控制器344使高速缓存设备170中的高速缓存数据与存储设备160中的数据同步。例如,在本发明的一个实施例中,运行/复原控制器344确定系统100中处理器110的利用率低于某一阈值就使高速缓存设备170中尚未同步的高速缓存数据与存储设备160中的数据同步。相关领域内技术人员很容易理解可采用其它方案或策略以执行高速缓存设备170中的数据的背景同步而不会影响本发明的工作。
OS可将定期刷新命令发布给I/O控制器150以确保所有之前写入的数据是非易失的。在本发明的一个实施例中,当刷新命令结束时,I/O控制器150确保数据和元数据更新在存储设备160和高速缓存设备170中是非易失的,并且即使出现例如系统100电源故障的不当停止运作,也能恢复全部之前写入的数据。
在本发明的另一实施例中,OS利用直写高速缓存方案,这种情况下存储设备160中的数据和高速缓存设备170中高速缓存的数据永远是同步的。当OS执行写操作时,高速缓存设备170和存储设备160被写入同一数据。
由于不需要专门的高速缓存硬件来启用防电源故障直写和回写高速缓存,因此本发明的实施例允许降低系统100的研发成本。例如,在本发明的一个实施例中,使用相对小尺寸的SSD来高速缓存一个或多个大尺寸硬盘驱动器而不需要专门的高速缓存硬件。
图4示出根据本发明一个实施例的高速缓存设备170的配置400。高速缓存设备170的配置400示出分组的元数据401的逻辑段以及高速缓存行402的另一逻辑段。高速缓存设备170的块宽度405表示高速缓存设备170的数据位宽度。在本发明的另一实施例中,高速缓存设备170的配置400也可包括针对例如数据存储或数据索引的其它目的的其它逻辑段(图4中未示出)。
作为示例,高速缓存行402的逻辑段示出具有八个高速缓存行(高速缓存行0-7),它们用来高速缓存存储设备160的数据。高速缓存行402的逻辑段不包含与任意高速缓存行402关联的任何元数据。本领域内技术人员很容易理解,高速缓存设备170可具有多于八个高速缓存行以高速缓存存储设备160的数据。在本发明的一个实施例中,高速缓存设备170的每个高速缓存行存储存储设备160的紧邻数据。在本发明的另一实施例中,高速缓存设备170的每个高速缓存行不存储存储设备160的紧邻数据。块宽度405不局限于特定的位宽度。在本发明的一个实施例中,块宽度405是高速缓存设备和运行/复原控制器344之间的通信链路的总线宽度。例如,在本发明的一个实施例中,如果高速缓存设备和运行/复原控制器344之间的通信链路的总线宽度为64位,则块宽度405可设置成等于64位的倍数的位宽度。在本发明的另一实施例中,块宽度405可设置成存储存储设备160的LBA的倍数。例如,高速缓存设备的每个高速缓存行被设置成能存储存储设备160的四个LBA的块宽度405。
在本发明的一个实施例中,分组的元数据401的逻辑段具有以分组方式存储的元数据0-7因而多个元数据彼此紧邻地存储,每个元数据与一个不同的高速缓存行关联。例如,元数据0 410关联于高速缓存行0 450,元数据1 411关联于高速缓存行1 415,依此类推。在本发明的一个实施例中,分组的元数据401针对每个元数据块具有一个完整性标记。元数据0-3 410、411、412和413具有完整性标记1 430而元数据4-7 414、415、416和417具有完整性标记2 440。完整性标记430、440防止系统100始料未及的停止运作或故障事件而破坏数据结构。在本发明的一个实施例中,分组元数据401的逻辑段紧邻地位于高速缓存设备170中以加快对分组元数据401的访问。在本发明的另一实施例中,分组元数据401的逻辑段不紧邻地位于高速缓存设备170中。在又一实施例中,完整性标记430和440未被存储在分组元数据401的逻辑段中。
在本发明一个实施例中,为了促成高速缓存设备170中的回写或直写高速缓存,OS维持易失存储器142中的高速缓存行的信息。该高速缓存行的信息包括但不局限于未经使用或不留有存储设备160的任何数据的高速缓存行的清单、具有存储设备160中的数据或LBA和存储该数据或LBA的高速缓存设备170中的高速缓存行之间的链接信息的高速缓存表、高速缓存设备170中能以分组形式或不同形式存储的全部高速缓存行的元数据、易失存储器142中仍要写至高速缓存设备170的元数据的各个元数据的高速缓存行的列表等。在本发明的一个实施例中,OS保留易失存储器142中的高速缓存设备170的分组元数据401的逻辑段的副本以利于高速缓存设备170中的回写或直写。在本发明的一个实施例中,高速缓存表可实现为散列表、树形表或任意其它搜索数据结构。
图5示出根据本发明一个实施例的直写高速缓存方案的流程图500。在步骤510中,运行控制器检查故障事件是否发生。在本发明的一个实施例中,运行控制器检查寄存器或标志是否指示故障事件已发生。在本发明的一个实施例中,步骤510检查系统100是否不当地断电。在本发明的另一实施例中,步骤510检查OS是否已崩溃或出故障。如果存在故障事件,则在步骤512运行控制器将高速缓存设备170复位。
流程在步骤512将高速缓存设备170复位后回到步骤510。在本发明的一个实施例中,运行控制器通过将高速缓存设备170的全部高速缓存行添加至空闲或未使用的高速缓存行的清单而将高速缓存设备170复位。高速缓存行的清单告知运行控制器清单中的高速缓存行可用于高速缓存存储设备160的数据。在本发明的另一实施例中,运行控制器通过将高速缓存设备170的全部高速缓存行著录或标记为未使用而将高速缓存设备170复位。
如果不存在故障事件,运行控制器在步骤520检查是否存在正当地使系统100断电的请求。系统100的正当断电或停止运作指OS向系统100发布例如但不局限于重启命令、停止运作命令、休眠命令、待机命令或使系统100断电的任意命令的事件。如果存在正当地使系统100断电的请求,则运行控制器在步骤522将与高速缓存设备170的全部高速缓存行关联的分组元数据从易失存储器142复制至高速缓存设备170。在本发明的一个实施例中,运行控制器将与高速缓存设备170的全部高速缓存行关联的分组元数据从易失存储器142复制至分组元数据401的逻辑段。在可选步骤524,运行控制器将高速缓存表从易失存储器142复制至高速缓存设备170且流程500回到步骤510。
如果不存在正当地使系统100断电的请求,则运行控制器在步骤530中检查是否存在更新数据或将数据插入高速缓存设备170的高速缓存行的请求。例如,在本发明的一个实施例中,当OS想要将数据写至存储设备160中的特定地址位置时,运行控制器检查高速缓存表以判断存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果存在高速缓存命中,即在该特定地址位置的数据被高速缓存在高速缓存设备170中,则运行控制器接收一请求以更新存储特定地址位置数据的匹配高速缓存行。如果存在高速缓存未命中,即特定地址位置的数据不被高速缓存在高速缓存设备170中,则运行控制器接收一请求以将特定地址位置的数据插入高速缓存设备170的高速缓存行。
如果存在更新数据或将数据插入高速缓存设备170的高速缓存行的请求,则运行控制器在步骤532基于要写入的新数据,在易失存储器142中更新与高速缓存行关联的分组元数据或状态信息。在步骤534,运行控制器用新数据更新高速缓存行和存储设备160。当步骤534结束时,高速缓存设备170和存储设备160中的数据是同步的。
如果没有请求更新数据或将数据插入高速缓存设备170的高速缓存行,则复原控制器在步骤540检查是否存在任何系统100的上电通知。如果是,则复原控制器在步骤542恢复高速缓存设备170中经分组的元数据或将其复制入易失存储器142。在可选步骤544,如果高速缓存表已在系统100停止运转之前被保存,则复原控制器恢复高速缓存设备170中的高速缓存表或将其复制至易失存储器142,随后流程500返回到步骤510。
如果不是,运行控制器在步骤550检查是否存在从高速缓存设备170读取数据的请求。例如,在本发明的一个实施例中,当OS想要从存储设备160中的特定地址位置读取数据时,运行控制器接收请求以从高速缓存设备170读取数据。如果存在从高速缓存设备170读取数据的请求,则运行控制器在步骤552检查高速缓存表以判断在存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果不存在从高速缓存设备170读取数据的请求,则流程返回到步骤510。
在步骤554,运行控制器检查是否存在高速缓存命中,即存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果是,运行控制器在步骤556从高速缓存设备170读取数据并将数据返回给OS,然后流程500回到步骤510。如果不是,运行控制器在步骤558将高速缓存未命中发送给OS。在本发明的一个实施例中,当存在高速缓存未命中时,运行控制器在步骤558访问存储设备160中特定地址位置的数据并将数据返回给OS,然后流程500返回到步骤510。
在本发明的一个实施例中,当利用直写高速缓存方案时,运行控制器不在运行过程中在高速缓存设备170中写入或更新分组数据。由于存储设备160和高速缓存设备170中的数据永远是同步的,当例如功率丢失事件的故障事件发生时,可将高速缓存设备170复位。由于即使在功率丢失事件中也能维持存储设备160中的数据完整,因此系统100是防电源故障的。
图6A示出根据本发明一个实施例的回写高速缓存方案的流程图600。在步骤610中,运行控制器检查是否存在更新高速缓存设备170的高速缓存行的请求。如果存在更新高速缓存行的请求,则运行控制器在步骤612用新数据更新相关的高速缓存行。在步骤614,运行控制器基于要写入到易失存储器142中的新数据更新与高速缓存行关联的分组元数据或状态数据。在步骤616,运行控制器基于要写入高速缓存设备170的新数据更新与高速缓存行关联的分组元数据或状态信息。在本发明的另一实施例中,运行控制器在步骤616将易失存储器142中与高速缓存行关联的分组元数据或状态信息复制入与高速缓存设备170的分组元数据401的逻辑段中的高速缓存行关联的相关分组元数据中。流程600在步骤616结束后返回到步骤610。
如果不存在更新高速缓存行的请求,则运行控制器在步骤620检查是否存在请求以正当地使系统100的断电。如果存在正当地使系统100掉电的请求,则运行控制器在可选步骤624将高速缓存表从易失存储器142复制至高速缓存设备170,然后流程600返回到步骤610。如果不存在正当地使系统100的断电的请求,则运行控制器在步骤630检查OS是否已发布刷新命令。如果OS已发布刷新命令,则运行控制器在步骤632刷新存储设备160和高速缓存设备170两者中的任意易失数据。
如果OS尚未发布刷新命令,则复原控制器在步骤640检查是否存在任何系统100的上电通知。如果是,则复原控制器在步骤642恢复高速缓存设备170中的分组元数据并将其复制入易失存储器142。在可选步骤644中,如果高速缓存表已在系统100停止运转之前被保存,则复原控制器恢复高速缓存设备170中的高速缓存表或将其复制至易失存储器142,然后流程600返回到步骤610。
如果不是,运行控制器在步骤650检查是否存在从高速缓存设备170读取数据的请求。如果存在从高速缓存设备170读取数据的请求,则运行控制器在步骤652检查高速缓存表以判断存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果不存在从高速缓存设备170读取数据的请求,则流程返回到步骤610。
在步骤654,运行控制器检查是否存在高速缓存命中,即存储设备160中特定地址位置的数据被高速缓存入高速缓存设备170。如果是,运行控制器在步骤656从高速缓存设备170读取数据并将数据返回给OS,然后流程600回到步骤610。如果不是,运行控制器在步骤658将高速缓存未命中发送给OS。在本发明的一个实施例中,当存在高速缓存未命中时,运行控制器在步骤658访问存储设备160中特定地址位置的数据并将数据返回给OS,随后流程600回到步骤610。图6A的回写高速缓存方案要求对高速缓存设备170附加写入操作,以对新数据的每次高速缓存行写操作更新与这些高速缓存行关联的分组元数据。
图6B示出根据本发明一个实施例的回写高速缓存方案的流程图660。在步骤610中,运行控制器检查是否存在更新高速缓存设备170的高速缓存行的请求。如果存在更新高速缓存行的请求,则运行控制器在步骤612用新数据更新相关高速缓存行。在步骤614,运行控制器基于要写入的新数据在易失存储器142更新与高速缓存行关联的分组元数据或状态信息。在步骤615,运行控制器基于高速缓存设备170中的新数据将高速缓存行标记为等待与高速缓存行关联的分组元数据的更新。在本发明的一个实施例中,运行控制器通过将高速缓存行添加至等待元数据写入的易失存储器142中的清单而对高速缓存行作出标记。等待元数据写入的清单包括具有在易失存储器142和高速缓存设备170之间没有同步的关联的分组元数据的高速缓存行。
如果不存在更新高速缓存行的请求,则运行控制器在步骤620检查是否存在正当地使系统100断电的请求。如果存在正当地使系统100断电的请求,则运行控制器将易失存储器142中全部等待的分组元数据写入高速缓存设备170中的分组元数据。在本发明的一个实施例中,运行控制器从等待元数据写入的清单确定要更新或写入哪个元数据。在可选步骤624中,运行控制器将高速缓存表从易失存储器142复制至高速缓存设备170,然后流程660回到步骤610。
如果不存在正当地使系统100断电的请求,则运行控制器在步骤630检查OS是否已发布刷新命令。如果已发布刷新命令,则运行控制器在步骤631将易失存储器142中的全部等待的分组元数据更新为高速缓存设备170中的分组元数据。在本发明的另一实施例中,运行控制器在步骤631的一次连续写操作中将全部分组元数据从易失存储器142更新或复制至高速缓存设备170。在步骤632,运行控制器刷新存储设备160和高速缓存设备170中的任何易失数据。
如果没有发布刷新命令,复原控制器在步骤640检查是否存在任何系统100的上电通知。如果是,复原控制器在步骤642将高速缓存设备170中的分组元数据恢复或复制入易失存储器142。在可选步骤644中,如果在系统100停止运转之前已保存高速缓存表,则复原控制器将高速缓存设备170中的高速缓存表恢复或复制至易失存储器142,流程660回到步骤610。
如果不是,运行控制器在步骤650检查是否存在从高速缓存设备170读取数据的请求。如果存在从高速缓存设备170读取数据的请求,则运行控制器在步骤652检查高速缓存表以判断在存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果不存在从高速缓存设备170读取数据的请求,则流程660返回到步骤610。
在步骤654,运行控制器检查是否存在高速缓存命中,即存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果是,运行控制器在步骤656从高速缓存设备170读取数据并将数据返回给OS,然后流程660回到步骤610。如果不是,运行控制器在步骤658将高速缓存未命中发送给OS。在本发明的一个实施例中,当存在高速缓存未命中时,运行控制器在步骤658访问存储设备160中特定地址位置的数据并将数据返回给OS,然后流程660返回到步骤610。图6B的回写高速缓存方案需要对高速缓存设备170的可选附加写入,以对应每次刷新或断电事件更新与高速缓存行关联的分组元数据。
图6C示出根据本发明一个实施例的回写高速缓存方案的流程图680。图6C是结合图6B讨论的,因为流程680是流程660的变化形式。除了步骤631,流程660中的所有步骤均适用于流程680,并且不再对这些步骤予以重复说明。在流程680中,在步骤630从OS接收刷新命令后,运行控制器在步骤662检查等待的元数据写入清单中是否存在邻近的等待写入。作为示例,假设等待元数据写入清单具有针对七个高速缓存行(高速缓存行5、6、7、9、12、13和45)的等待元数据写入。
在假定的场景中,由于高速缓存行5、6、7是紧邻的且高速缓存行12和13也是紧邻的,流程680进至步骤664。在步骤664中,运行控制器将针对高速缓存行5、6和7的元数据写入合并为一次元数据写入。另外将针对高速缓存行12和13的元数据写入合并为另一次元数据写入。因此,运行控制器具有四次元数据写入(5、6和7、9的合并写入,12、13和45的合并写入)而不是原始的七次元数据写入。在步骤670,运行控制器执行步骤664的四次元数据写入。
在另一示例中,假设等待元数据写入的列表具有针对五个高速缓存行(高速缓存行3、9、11、14和45)的等待元数据写入。在假定的场景中,流程680进至步骤662以检查在等待高速缓存行要写入的地址位置是否存在小间隔。在本发明的一个实施例中,如果一起写入高速缓存行所花费的时间短于将这些高速缓存行单独写入所花费的时间,则认为高速缓存行之间的间隔小。例如,如果更新与高速缓存行9、10、11关联的元数据所需的时间短于单独更新与高速缓存行9、11关联的元数据所需的时间,则认为高速缓存行9、11之间的间隔小。在本发明的一个实施例中,即便不需要更新与高速缓存行10关联的元数据,将高速缓存行的元数据更新结合起来仍然减少了更新高速缓存行所需的时间。
在假定的场景中,高速缓存行9、11之间的间隔以及高速缓存行11、14之间的间隔假设为小并且流程进至步骤668。在步骤668,运行控制器将其间具有小间隔的高速缓存行合并为一个大的元数据高速缓存写。例如,在假定的场景中,运行控制器将针对高速缓存行9、11和14的元数据更新结合为针对高速缓存行9-14的一次元数据更新,即便高速缓存行10、12和13不需要修正。在步骤670,运行控制器执行步骤664中的组合元数据写入并且流程进至流程660中的步骤634。步骤664和668优化操作以更新高速缓存设备170中等待的分组元数据。在流程680,在本发明的另一实施例中,只执行步骤662、664和步骤666、668中的一个步骤。相关领域内技术人员很容易理解可进行其它优化以减少更新高速缓存设备170中等待的元数据更新的时间而不会影响本发明的工作。
图6A、6B和6C所示的回写高速缓存方案不解释为限定。相关领域内技术人员很容易理解可实现步骤的多种组合或修正而不影响本发明工作。系统100的用户可确定利用图6A、6B和6C中三个回写高速缓存方案中的一个并也可利用图6A、6B和6C的三个回写高速缓存方案的任意组合形式。
图7示出根据本发明一个实施例的将数据插入高速缓存设备170的高速缓存行的方法的流程图700。在步骤710,运行控制器检查是否存在将数据插入高速缓存设备170的高速缓存行的请求。例如在本发明的一个实施例中,当OS想要将数据写至存储设备160的特定地址位置时,运行控制器检查高速缓存表以判断存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果不存在高速缓存命中,即特定地址位置的数据未高速缓存在高速缓存设备170中,则运行控制器可接收请求以将数据插入高速缓存设备170的高速缓存行。
如果不存在将数据插入高速缓存行的请求,流程结束。如果存在将数据插入高速缓存行的请求,则运行控制器在步骤720检查高速缓存设备170中是否存在任何空闲的高速缓存行。在本发明的一个实施例中,高速缓存设备170中全部未使用的高速缓存行被著录或标记为空闲的高速缓存行。在本发明的另一实施例中,高速缓存设备170中未使用的高速缓存行的固定部分被著录或标记为空闲高速缓存行。例如在一个实施例中,运行控制器可将高速缓存设备170的五个高速缓存行标记为空闲高速缓存行。如果不存在空闲高速缓存行,则运行控制器在步骤722基于逐出策略选择高速缓存设备170要被逐出的一个或多个高速缓存行。逐出策略包括但不局限于逐出最近很少使用的高速缓存行、逐出高速缓存设备170的第一高速缓存行等。
在步骤724,所选择的高速缓存行被运行控制器逐出。在本发明的一个实施例中,运行控制器通过将所选高速缓存行中已高速缓存的数据(如果其尚未同步)写至存储设备160而逐出所选择的高速缓存行。在步骤726,运行控制器将逐出的高速缓存行著录或标记为空闲高速缓存行并且流程进至步骤730。如果存在空闲的高速缓存行,则运行控制器在步骤730选择高速缓存设备170的一个或多个空闲的高速缓存行以高速缓存要写入的数据。空闲高速缓存行的选择策略包括但不局限于,首先可用的空闲高速缓存行、最近很少使用的空闲高速缓存行等。在步骤740,运行控制器将数据写至选定的空闲高速缓存行。
在步骤750,运行控制器基于新数据更新易失存储器142中与所选高速缓存行关联的分组元数据或状态信息。在步骤750后,如果利用流程660或680的回写高速缓存方案,流程700执行可选步骤760,其中运行控制器基于新数据将高速缓存设备170中的高速缓存行标记为等待更新与高速缓存行关联的分组元数据,或如果利用流程600的回写高速缓存方案,则执行可选步骤770,其中运行控制器基于新数据更新与高速缓存设备170中的所选高速缓存行关联的分组元数据或状态信息。流程在可选步骤760或770完成后结束。
由于例如系统100电源故障的故障事件可能导致存储设备160和高速缓存设备170中的数据完整性问题,高速缓存行的逐出需要立即更新与高速缓存设备170中的高速缓存行关联的分组元数据。如此,高速缓存行的逐出在每次逐出后都需要与高速缓存设备170中的高速缓存行关联的元数据写入。然而,在高速缓存行每次逐出后执行附加的元数据写入引发开销。为了避免开销,图7展示的将数据插入高速缓存设备170的高速缓存行的方法包括将新数据插入空闲的高速缓存行而不是具有高速缓存数据的高速缓存行。
例如,为了便于说明,假设运行控制器接收对存储设备160的LBA1插入数据的请求。假设高速缓存行4从存储设备160的LBA5开始存储数据。如果在用来自存储设备160的LBA1的数据写入高速缓存行4之后但在更新与高速缓存行4关联的元数据之前发生故障事件,系统100一旦重启或重引导事件发生就会看到高速缓存行4具有基于与高速缓存行4关联的元数据的来自LBA5的数据。然而这是错误的,由于高速缓存行4已用来自存储设备160的LBA1的数据予以更新。
通过如图7的流程700所述地将新数据插入空闲高速缓存行,发生的故障事件不影响存储设备160和高速缓存设备170的数据完整性。例如,为了便于说明,当运行控制器接收将来自存储设备160的LBA1的数据插入高速缓存设备170的请求时,运行控制器选择空闲的高速缓存行以高速缓存来自存储设备160的LBA1的数据。如果故障事件发生在用来自存储设备160的LBA1的数据更新空闲高速缓存行之后但发生在更新与空闲高速缓存行关联的元数据之前,则故障事件不影响存储设备160和高速缓存设备170的数据完整性。由于发生的是故障事件而不是刷新事件,因此可丢弃新数据而不会影响系统100。
直写高速缓存方案不局限于图5所示的算法。在本发明的另一实施例中,直写高速缓存方案可利用图6A、6B和6C所示的回写高速缓存算法之一。回写高速缓存方案可利用图6A、6B和6C所示的回写高速缓存算法以及图7的算法之一。如果直写高速缓存方案利用图6A、6B和6C所示回写高速缓存算法和图7所示算法之一,则直写高速缓存在不当地停止运作期间也能保持激活。
图8A和8B示出用于实现本发明一个实施例的回写高速缓存方案的伪代码800和850。为了便于说明,将HDD作为存储设备160的例示并将SSD作为高速缓存设备170的例示。相关领域内技术人员很容易理解伪代码800、850的工作机理并不再对其进行详细说明。
尽管已描述了所披露的主题事项的实施例示例,然而本领域内技术人员很容易理解可代替地使用实现所披露主题事项的许多其它方法。在前面的描述中已记载了所披露主题事项的多个方面。为了便于说明,给出具体的数目、系统和配置以提供对主题事项的透彻理解。然而,本领域内技术人员可从实践本公开明确主题事项得益而无需具体细节。在其它情形下,将公知的特征、组件或模块省去、简化、组合或分割以不混淆所披露的主题事项。
术语“可作用”在本文中表示设备、系统、协议等当处于掉电状态时可作用或可适应地实现其想要的功能。所披露主题事项的各个实施例可实现为硬件、固件、软件或其组合,或参照或结合例如指令、功能、进程、数据结构、逻辑、应用程序、当由机器访问时致使机器执行任务和定义关键数据类型或低层硬件背景或产生结果的设计的模拟、模仿和制作的设计表示或格式的程序代码进行描述。
附图中示出的技术可使用在例如通用计算机或计算设备的一个或多个计算设备上存储和执行的代码和数据来实现。这些计算设备存储并传输(在内部或与网络上的其它计算设备)代码和数据,例如运用机器可读存储介质(例如磁盘、光盘、随机存取存储器、只读存储器、闪存设备、相变存储器)和计算机可读通信介质(例如电、光、声或其它形式的传播信号——例如载波、红外信号、数字信号等)。
尽管已结合示例性实施例对所披露的主题事项进行了说明,然而这种说明不应当解释成限定的意思。本领域内技术人员所熟知的主题事项的示例性实施例以及其它实施例的多种修正形式视为落在所披露主题事项的范围内。
Claims (29)
1.一种用于执行防电源故障高速缓存而无需原子元数据的方法,包括:
将第一设备的数据高速缓存入第二设备的多个高速缓存行中的一个或多个,包括:从关联于所述多个高速缓存行的状态信息判断所述多个高速缓存行中是否有任何高速缓存行被标记为未使用;
如果没有,则
逐出所述多个高速缓存行中的至少一个;以及
在所述状态信息中将所述至少一个被逐出的高速缓存行标记为未使用;
选择在所述状态信息中被标记为未使用的一个或多个高速缓存行;以及
将所述第一设备的所述数据高速缓存入所选择的一个或多个高速缓存行;
其中在所述数据的高速缓存期间,没有任何关联于任何所述高速缓存行的状态信息要随所述数据原子地存储在所述第二设备中。
2.如权利要求1所述的方法,其特征在于,还包括当所述第一设备的所述数据被高速缓存入所述第二设备的一个或多个高速缓存行时,将关联于所述一个或多个高速缓存行的状态信息存储在存储器中。
3.如权利要求2所述的方法,其特征在于,还包括:
当新数据要被写至所述一个或多个高速缓存行时,用所述新数据更新所述一个或多个高速缓存行中被高速缓存的数据;以及
基于所述新数据,在所述存储器中更新关联于所述一个或多个高速缓存行的所述状态信息。
4.如权利要求3所述的方法,其特征在于,还包括:
当接收到重启、停机、休眠、或待机命令中的一个时,将所述存储器中的全部状态信息复制至所述第二设备。
5.如权利要求3所述的方法,其特征在于,还包括当发生电源或系统故障时将所述第二设备复位。
6.如权利要求3所述的方法,其特征在于,所述第二设备包括与所述存储器中的所述一个或多个高速缓存行关联的状态信息的副本,所述方法还包括响应于更新所述被高速缓存的数据,基于所述第二设备中所述状态信息的副本中的所述新数据来更新与所述一个或多个高速缓存行关联的状态信息。
7.如权利要求3所述的方法,其特征在于,所述第二设备包括与所述存储器中所述一个或多个高速缓存行关联的状态信息的副本,所述方法还包括响应于更新所述被高速缓存的数据,基于所述第二设备中所述状态信息的副本中的所述新数据来将所述一个或多个高速缓存行标记为等待与所述一个或多个高速缓存行关联的状态信息的更新。
8.如权利要求7所述的方法,其特征在于,还包括当接收到刷新、重启、停机、休眠或待机命令之一时,更新所述第二设备中的所述状态信息的副本中与所述一个或多个标记的高速缓存行关联的状态信息。
9.如权利要求3所述的方法,其特征在于,还包括当接收到刷新命令时,将所述存储器中与所述一个或多个高速缓存行关联的状态信息复制到所述第二设备。
10.如权利要求9所述的方法,其特征在于,将所述存储器中与所述一个或多个高速缓存行关联的状态信息复制到所述第二设备包括优化复制操作的次数。
11.一种用于执行防电源故障高速缓存而无需原子元数据的装置,包括:
NAND闪存,其具有多个高速缓存行的第一逻辑段以及多个元数据的第二逻辑段,每个元数据关联于所述多个高速缓存行中相应的一个,其中所述第一逻辑段不具有任何元数据;以及
控制器,用来将存储设备的数据高速缓存入一个或多个高速缓存行,并进一步用来:
确定是否所有的空闲高速缓存行被使用;
如果是,
逐出一个或多个选择的高速缓存行,所述选择基于逐出策略;
将逐出的一个或多个选择的高速缓存行添加至空闲高速缓存行;且其中用于将所述存储设备的数据高速缓存入所述一个或多个高速缓存行的控制器用于将所述存储设备的数据高速缓存入所述一个或多个空闲的高速缓存行。
12.如权利要求11所述的装置,其特征在于,所述第二逻辑段的每个元数据在其关联的对应高速缓存行中包括被高速缓存的数据的序列号、逻辑块地址、状态信息、和牵制信息中的至少一个。
13.如权利要求11所述的装置,其特征在于,还包括用于存储多个元数据的存储器,其中所述控制器进一步用来:
当新数据要被写至所述一个或多个高速缓存行时,用所述新数据更新所述一个或多个高速缓存行的被高速缓存的数据;以及
基于存储器中的新数据更新与所述一个或多个高速缓存行关联的元数据。
14.如权利要求13所述的装置,其特征在于,所述控制器进一步用来:
用所述新数据更新所述存储设备;以及
当所述装置要被重引导、停机、或置于休眠状态时,用所述存储器中与所述一个或多个高速缓存行关联的元数据覆写所述NAND闪存中与所述一个或多个高速缓存行关联的元数据。
15.如权利要求13所述的装置,其特征在于,所述存储器进一步存储高速缓存表,所述高速缓存表包含所述存储设备中的数据与所述多个高速缓存行之间的链接信息,并且当所述装置要被重引导、刷新、停机、或置于休眠状态时,所述控制器进一步用于将所述存储器中的所述高速缓存表复制至所述NAND闪存。
16.如权利要求13所述的装置,其特征在于,当新数据要被写至所述一个或多个高速缓存行时,响应于更新被高速缓存的数据,所述控制器基于所述NAND闪存中的新数据更新与所述一个或多个高速缓存行关联的元数据。
17.如权利要求13所述的装置,其特征在于,所述控制器进一步将所述一个或多个高速缓存行添加至清单,所述清单用来指示所述NAND闪存中与所述一个或多个高速缓存行关联的元数据正在等待用与所述存储器中的所述一个或多个高速缓存行关联的元数据更新。
18.如权利要求17所述的装置,其特征在于,当所述装置被断电或重引导时或当所述NAND闪存要被刷新时,所述控制器进一步用所述存储器中与所述一个或多个高速缓存行关联的元数据来更新所述NAND闪存中与所述一个或多个高速缓存行关联的元数据。
19.如权利要求13所述的装置,其特征在于,当接收到操作系统OS所发布的刷新命令时,所述控制器进一步用所述存储器中的元数据覆写非易失介质中的元数据。
20.如权利要求18所述的装置,其特征在于,当所述装置要被上电或重启时,所述控制器进一步用所述NAND闪存中的元数据恢复所述存储器中的元数据。
21.如权利要求15所述的装置,其特征在于,当所述装置要被上电或重启时,所述控制器进一步将所述高速缓存表从所述NAND闪存复制至所述存储器。
22.如权利要求11所述的装置,其特征在于,所述存储设备是硬盘、磁带驱动器、压缩盘、zip盘、闪存和固态驱动器中的一个。
23.如权利要求11所述的装置,其特征在于,所述控制器是块存储驱动器。
24.一种用于执行防电源故障高速缓存而无需原子元数据的方法,包括:
将存储设备的数据回写或直写高速缓存入高速缓存设备的多个高速缓存行中的一个或多个,包括:
确定所述多个高速缓存行中是否有任何高速缓存行被标记为未使用;
如果没有,
逐出所述多个高速缓存行中的至少一个;以及
将所述至少一个逐出的高速缓存行标记为未使用;
选择一个或多个标记为未使用的高速缓存行;以及
将所述存储设备的数据高速缓存入所选择的一个或多个高速缓存行;
其中当所述数据被高速缓存时没有任何关联于任何所述高速缓存行的元数据要被原子地写入所述高速缓存设备。
25.如权利要求24所述的方法,其特征在于,数据的直写高速缓存包括:
确定所述高速缓存设备的所述一个或多个高速缓存行要用新数据更新;
用所述新数据更新所述一个或多个确定的高速缓存行;
在存储器中至少基于所述新数据来更新与所述一个或多个确定的高速缓存行关联的元数据;以及
用所述新数据来更新所述存储设备。
26.如权利要求24所述的方法,其特征在于,所述数据的回写高速缓存包括:
确定所述高速缓存设备的所述一个或多个高速缓存行要用新数据更新;
在存储器中至少基于所述新数据来更新与所述一个或多个确定的高速缓存行关联的元数据;
用所述新数据来更新所述一个或多个确定的高速缓存行;以及
标记所述一个或多个确定的高速缓存行,其中所述标记用于指示与所述高速缓存设备中的所述一个或多个确定的高速缓存行关联的元数据是要用所述存储器中与所述一个或多个确定的高速缓存行关联的元数据来更新的。
27.如权利要求24所述的方法,其特征在于,所述数据的回写高速缓存还包括:
当接收到断电、重引导或刷新命令时,用所述存储器中与所述一个或多个确定的高速缓存行关联的元数据来更新所述高速缓存设备中与所述一个或多个确定的高速缓存行关联的元数据。
28.一种用于执行防电源故障高速缓存而无需原子元数据的系统,包括:
NAND闪存,其具有多个高速缓存行的第一逻辑段和多个元数据的第二逻辑段,每个元数据关联于所述多个高速缓存行中对应的一个,其中所述第一逻辑段不具有任何元数据;以及
存储器控制器,用来将存储介质的数据回写或直写高速缓存入所述NAND闪存的所述第一逻辑段的一个或多个高速缓存行,并进一步用来确定是否所有的空闲高速缓存行被使用;
如果是,
逐出一个或多个选择的高速缓存行,所述选择基于逐出策略;
将逐出的一个或多个选择的高速缓存行添加至空闲高速缓存行;且其中用于将所述存储设备的数据高速缓存入所述一个或多个高速缓存行的控制器用于将所述存储设备的数据高速缓存入所述一个或多个空闲的高速缓存行,并且其中当所述数据被高速缓存时没有任何元数据要被原子地写入所述第一逻辑段。
29.如权利要求28所述的系统,其中所述第二逻辑段的每个元数据在其关联的对应高速缓存行中包括被高速缓存的数据的序列号、逻辑块地址、状态信息和牵制信息中的至少一个。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/414,385 | 2009-03-30 | ||
US12/414,385 US8195891B2 (en) | 2009-03-30 | 2009-03-30 | Techniques to perform power fail-safe caching without atomic metadata |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101923499A CN101923499A (zh) | 2010-12-22 |
CN101923499B true CN101923499B (zh) | 2013-11-06 |
Family
ID=42228567
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101580398A Active CN101923499B (zh) | 2009-03-30 | 2010-03-29 | 执行防电源故障高速缓存而无需原子元数据的技术 |
Country Status (5)
Country | Link |
---|---|
US (5) | US8195891B2 (zh) |
CN (1) | CN101923499B (zh) |
DE (1) | DE102010013263A1 (zh) |
GB (1) | GB2469193B (zh) |
TW (2) | TWI556104B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9703502B2 (en) | 2011-12-29 | 2017-07-11 | Intel Corporation | Multi-level memory with direct access |
Families Citing this family (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8082384B2 (en) | 2008-03-26 | 2011-12-20 | Microsoft Corporation | Booting an electronic device using flash memory and a limited function memory controller |
US8751760B2 (en) * | 2009-10-01 | 2014-06-10 | Dell Products L.P. | Systems and methods for power state transitioning in an information handling system |
JP4966418B1 (ja) * | 2011-01-26 | 2012-07-04 | 株式会社東芝 | 情報処理装置及び書き込み制御方法 |
US9183128B2 (en) | 2011-02-23 | 2015-11-10 | St-Ericsson Sa | Device controller for a memory device |
WO2012117451A1 (en) * | 2011-03-03 | 2012-09-07 | Hitachi, Ltd. | Storage controller and method of controlling storage controller |
KR20120112965A (ko) * | 2011-04-04 | 2012-10-12 | 삼성전자주식회사 | 비휘발성 메모리 장치, 이를 스왑 메모리로 이용하는 데이터 처리 장치, 및 이를 이용한 스왑 방법 |
CN102184145B (zh) * | 2011-05-13 | 2013-04-17 | 杭州华三通信技术有限公司 | 重启数据不丢失方法及装置 |
US8631190B2 (en) * | 2011-07-22 | 2014-01-14 | International Business Machines Corporation | Prefetching data tracks and parity data to use for destaging updated tracks |
GB2510760B (en) * | 2011-12-20 | 2020-05-20 | Intel Corp | Dynamic partial power down of memory-side cache in a 2-level memory hierarchy |
CN103999067A (zh) * | 2011-12-21 | 2014-08-20 | 英特尔公司 | 以多个非易失性存储器为特征的高性能存储结构和系统 |
US8930947B1 (en) | 2011-12-30 | 2015-01-06 | Emc Corporation | System and method for live migration of a virtual machine with dedicated cache |
US9104529B1 (en) * | 2011-12-30 | 2015-08-11 | Emc Corporation | System and method for copying a cache system |
US9158578B1 (en) | 2011-12-30 | 2015-10-13 | Emc Corporation | System and method for migrating virtual machines |
US9009416B1 (en) | 2011-12-30 | 2015-04-14 | Emc Corporation | System and method for managing cache system content directories |
US9235524B1 (en) * | 2011-12-30 | 2016-01-12 | Emc Corporation | System and method for improving cache performance |
US9053033B1 (en) | 2011-12-30 | 2015-06-09 | Emc Corporation | System and method for cache content sharing |
US8627012B1 (en) | 2011-12-30 | 2014-01-07 | Emc Corporation | System and method for improving cache performance |
US9779027B2 (en) * | 2012-10-18 | 2017-10-03 | Oracle International Corporation | Apparatus, system and method for managing a level-two cache of a storage appliance |
US9772949B2 (en) * | 2012-10-18 | 2017-09-26 | Oracle International Corporation | Apparatus, system and method for providing a persistent level-two cache |
US9754648B2 (en) | 2012-10-26 | 2017-09-05 | Micron Technology, Inc. | Apparatuses and methods for memory operations having variable latencies |
US9274956B1 (en) * | 2012-10-31 | 2016-03-01 | Amazon Technologies, Inc. | Intelligent cache eviction at storage gateways |
US9268652B1 (en) | 2012-10-31 | 2016-02-23 | Amazon Technologies, Inc. | Cached volumes at storage gateways |
US9535836B2 (en) | 2013-03-13 | 2017-01-03 | Hewlett Packard Enterprise Development Lp | Non-volatile memory update tracking |
US8812744B1 (en) | 2013-03-14 | 2014-08-19 | Microsoft Corporation | Assigning priorities to data for hybrid drives |
US9734097B2 (en) | 2013-03-15 | 2017-08-15 | Micron Technology, Inc. | Apparatuses and methods for variable latency memory operations |
US9626126B2 (en) | 2013-04-24 | 2017-04-18 | Microsoft Technology Licensing, Llc | Power saving mode hybrid drive access management |
US9946495B2 (en) | 2013-04-25 | 2018-04-17 | Microsoft Technology Licensing, Llc | Dirty data management for hybrid drives |
US20150019822A1 (en) * | 2013-07-11 | 2015-01-15 | Lsi Corporation | System for Maintaining Dirty Cache Coherency Across Reboot of a Node |
US9563565B2 (en) | 2013-08-14 | 2017-02-07 | Micron Technology, Inc. | Apparatuses and methods for providing data from a buffer |
US9727493B2 (en) | 2013-08-14 | 2017-08-08 | Micron Technology, Inc. | Apparatuses and methods for providing data to a configurable storage area |
US9317421B2 (en) * | 2013-09-27 | 2016-04-19 | Intel Corporation | Memory management |
US9589606B2 (en) * | 2014-01-15 | 2017-03-07 | Samsung Electronics Co., Ltd. | Handling maximum activation count limit and target row refresh in DDR4 SDRAM |
US9898414B2 (en) * | 2014-03-28 | 2018-02-20 | Oracle International Corporation | Memory corruption detection support for distributed shared memory applications |
US10101917B1 (en) * | 2014-09-25 | 2018-10-16 | EMC IP Holding Company LLC | Evaluating and selecting data caching techniques |
US9430396B2 (en) | 2014-12-22 | 2016-08-30 | Intel Corporation | Updating persistent data in persistent memory-based storage |
US9690716B2 (en) * | 2015-02-13 | 2017-06-27 | Intel Corporation | High performance persistent memory for region-centric consistent and atomic updates |
US20160283385A1 (en) * | 2015-03-27 | 2016-09-29 | James A. Boyd | Fail-safe write back caching mode device driver for non volatile storage device |
US10120818B2 (en) | 2015-10-01 | 2018-11-06 | International Business Machines Corporation | Synchronous input/output command |
US10063376B2 (en) | 2015-10-01 | 2018-08-28 | International Business Machines Corporation | Access control and security for synchronous input/output links |
US10068000B2 (en) | 2015-10-01 | 2018-09-04 | International Business Machines Corporation | Synchronous input/output replication of data in a persistent storage control unit |
US9715352B2 (en) | 2015-10-01 | 2017-07-25 | International Business Machines Corporation | Synchronous input/output using a low latency storage controller connection |
US10175903B2 (en) | 2016-03-31 | 2019-01-08 | Intel Corporation | N plane to 2N plane interface in a solid state drive (SSD) architecture |
US10289549B1 (en) * | 2016-06-28 | 2019-05-14 | EMC IP Holding Company LLC | Checkpointing cache status information |
US10783146B2 (en) | 2016-07-19 | 2020-09-22 | Sap Se | Join operations in hybrid main memory systems |
US10698732B2 (en) | 2016-07-19 | 2020-06-30 | Sap Se | Page ranking in operating system virtual pages in hybrid memory systems |
US10452539B2 (en) * | 2016-07-19 | 2019-10-22 | Sap Se | Simulator for enterprise-scale simulations on hybrid main memory systems |
US10540098B2 (en) | 2016-07-19 | 2020-01-21 | Sap Se | Workload-aware page management for in-memory databases in hybrid main memory systems |
US10474557B2 (en) | 2016-07-19 | 2019-11-12 | Sap Se | Source code profiling for line-level latency and energy consumption estimation |
US10437798B2 (en) | 2016-07-19 | 2019-10-08 | Sap Se | Full system simulator and memory-aware splay tree for in-memory databases in hybrid memory systems |
US10387127B2 (en) | 2016-07-19 | 2019-08-20 | Sap Se | Detecting sequential access data and random access data for placement on hybrid main memory for in-memory databases |
US10552341B2 (en) | 2017-02-17 | 2020-02-04 | International Business Machines Corporation | Zone storage—quickly returning to a state of consistency following an unexpected event |
US10482010B2 (en) * | 2017-06-29 | 2019-11-19 | Intel Corporation | Persistent host memory buffer |
US11010379B2 (en) | 2017-08-15 | 2021-05-18 | Sap Se | Increasing performance of in-memory databases using re-ordered query execution plans |
CN109426623A (zh) * | 2017-08-29 | 2019-03-05 | 深圳市中兴微电子技术有限公司 | 一种读取数据的方法及装置 |
US10430305B2 (en) * | 2017-09-01 | 2019-10-01 | International Business Machine Corporation | Determine whether to rebuild track metadata to determine whether a track format table has a track format code for the track format metadata |
CN107797769A (zh) * | 2017-11-06 | 2018-03-13 | 长沙曙通信息科技有限公司 | 一种存储虚拟化系统缓存管理策略实现方法 |
TWI649652B (zh) * | 2017-12-29 | 2019-02-01 | 國科美國研究實驗室 | Fast and safe data storage device and method |
JP2019185350A (ja) | 2018-04-09 | 2019-10-24 | 東芝メモリ株式会社 | メモリシステム及びメモリシステムの制御方法 |
CN109558274B (zh) * | 2018-10-24 | 2023-08-15 | 大唐微电子技术有限公司 | 一种信息处理方法、装置及计算机可读存储介质 |
US10866890B2 (en) * | 2018-11-07 | 2020-12-15 | Arm Limited | Method and apparatus for implementing lock-free data structures |
US11416148B2 (en) | 2020-01-10 | 2022-08-16 | Samsung Electronics Co., Ltd. | System and method of providing atomicity to large writes to persistent memory |
US11573937B2 (en) | 2020-10-09 | 2023-02-07 | Bank Of America Corporation | System and method for automatically resolving metadata structure discrepancies |
US11494125B2 (en) | 2020-12-17 | 2022-11-08 | Western Digital Technologies, Inc. | Storage system and method for dual fast release and slow release responses |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6219693B1 (en) * | 1997-11-04 | 2001-04-17 | Adaptec, Inc. | File array storage architecture having file system distributed across a data processing platform |
CN101099135A (zh) * | 2004-12-03 | 2008-01-02 | 英特尔公司 | 由于电源故障引起的数据丢失的防止 |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12009A (en) * | 1854-11-28 | Planing-machine | ||
US5025365A (en) * | 1988-11-14 | 1991-06-18 | Unisys Corporation | Hardware implemented cache coherency protocol with duplicated distributed directories for high-performance multiprocessors |
US5269019A (en) * | 1991-04-08 | 1993-12-07 | Storage Technology Corporation | Non-volatile memory storage and bilevel index structure for fast retrieval of modified records of a disk track |
US6021408A (en) * | 1996-09-12 | 2000-02-01 | Veritas Software Corp. | Methods for operating a log device |
US5895488A (en) * | 1997-02-24 | 1999-04-20 | Eccs, Inc. | Cache flushing methods and apparatus |
US6249889B1 (en) * | 1998-10-13 | 2001-06-19 | Advantest Corp. | Method and structure for testing embedded memories |
US8078794B2 (en) * | 2000-01-06 | 2011-12-13 | Super Talent Electronics, Inc. | Hybrid SSD using a combination of SLC and MLC flash memory arrays |
US7953931B2 (en) * | 1999-08-04 | 2011-05-31 | Super Talent Electronics, Inc. | High endurance non-volatile memory devices |
US7730213B2 (en) * | 2000-12-18 | 2010-06-01 | Oracle America, Inc. | Object-based storage device with improved reliability and fast crash recovery |
US6839812B2 (en) * | 2001-12-21 | 2005-01-04 | Intel Corporation | Method and system to cache metadata |
US20030212865A1 (en) * | 2002-05-08 | 2003-11-13 | Hicken Michael S. | Method and apparatus for flushing write cache data |
KR100484147B1 (ko) * | 2002-07-26 | 2005-04-18 | 삼성전자주식회사 | 플래시 메모리 관리 방법 |
US7130962B2 (en) * | 2003-12-18 | 2006-10-31 | Intel Corporation | Writing cache lines on a disk drive |
US20050251617A1 (en) * | 2004-05-07 | 2005-11-10 | Sinclair Alan W | Hybrid non-volatile memory system |
US20050144379A1 (en) * | 2003-12-31 | 2005-06-30 | Eschmann Michael K. | Ordering disk cache requests |
US7130956B2 (en) * | 2004-02-10 | 2006-10-31 | Sun Microsystems, Inc. | Storage system including hierarchical cache metadata |
US20110145489A1 (en) * | 2004-04-05 | 2011-06-16 | Super Talent Electronics, Inc. | Hybrid storage device |
JP2005301419A (ja) * | 2004-04-07 | 2005-10-27 | Hitachi Ltd | ディスクアレイ装置およびそのデータ処理方法 |
US7644239B2 (en) * | 2004-05-03 | 2010-01-05 | Microsoft Corporation | Non-volatile memory cache performance improvement |
US7580986B2 (en) * | 2004-05-17 | 2009-08-25 | Pixar | Dependency graph-based aggregate asset status reporting methods and apparatus |
US8745326B2 (en) * | 2005-06-02 | 2014-06-03 | Seagate Technology Llc | Request priority seek manager |
US20060294300A1 (en) * | 2005-06-22 | 2006-12-28 | Seagate Technology Llc | Atomic cache transactions in a distributed storage system |
US7797479B2 (en) | 2005-06-30 | 2010-09-14 | Intel Corporation | Technique to write to a non-volatile memory |
US7533215B2 (en) | 2005-09-15 | 2009-05-12 | Intel Corporation | Distributed and packed metadata structure for disk cache |
US8813052B2 (en) * | 2005-12-07 | 2014-08-19 | Microsoft Corporation | Cache metadata for implementing bounded transactional memory |
US7506112B2 (en) * | 2006-07-14 | 2009-03-17 | Sun Microsystems, Inc. | Reducing bitmap management overhead |
US7627714B2 (en) * | 2006-08-22 | 2009-12-01 | International Business Machines Corporation | Apparatus, system, and method for preventing write starvation in a partitioned cache of a storage controller |
KR100801015B1 (ko) * | 2006-08-30 | 2008-02-04 | 삼성전자주식회사 | 하이브리드 하드 디스크 드라이브와 데이터 저장 방법 |
US7752474B2 (en) * | 2006-09-22 | 2010-07-06 | Apple Inc. | L1 cache flush when processor is entering low power mode |
US20080082752A1 (en) * | 2006-09-29 | 2008-04-03 | Ram Chary | Method and apparatus for saving power for a computing system by providing instant-on resuming from a hibernation state |
TW200841343A (en) * | 2007-04-02 | 2008-10-16 | Apacer Technology Inc | A data storage device consisting of NAND (Not-AND) flash memory and its data storing method |
US8880775B2 (en) * | 2008-06-20 | 2014-11-04 | Seagate Technology Llc | System and method of garbage collection in a memory device |
US8843691B2 (en) * | 2008-06-25 | 2014-09-23 | Stec, Inc. | Prioritized erasure of data blocks in a flash storage device |
US9032151B2 (en) | 2008-09-15 | 2015-05-12 | Microsoft Technology Licensing, Llc | Method and system for ensuring reliability of cache data and metadata subsequent to a reboot |
US20100088459A1 (en) * | 2008-10-06 | 2010-04-08 | Siamak Arya | Improved Hybrid Drive |
US8195878B2 (en) * | 2009-02-19 | 2012-06-05 | Pmc-Sierra, Inc. | Hard disk drive with attached solid state drive cache |
TWI405209B (zh) * | 2009-04-01 | 2013-08-11 | Phison Electronics Corp | 資料管理方法及使用此方法的快閃儲存系統與控制器 |
US20120317337A1 (en) * | 2011-06-09 | 2012-12-13 | Microsoft Corporation | Managing data placement on flash-based storage by use |
-
2009
- 2009-03-30 US US12/414,385 patent/US8195891B2/en active Active
-
2010
- 2010-03-29 TW TW103132963A patent/TWI556104B/zh active
- 2010-03-29 DE DE102010013263A patent/DE102010013263A1/de active Pending
- 2010-03-29 TW TW099109305A patent/TWI465906B/zh active
- 2010-03-29 CN CN2010101580398A patent/CN101923499B/zh active Active
- 2010-03-29 GB GB1005303.1A patent/GB2469193B/en active Active
-
2012
- 2012-05-16 US US13/473,419 patent/US8700858B2/en active Active
-
2014
- 2014-02-19 US US14/184,256 patent/US9501402B2/en active Active
-
2016
- 2016-10-28 US US15/338,199 patent/US10289556B2/en active Active
-
2019
- 2019-05-07 US US16/405,918 patent/US20200034304A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6219693B1 (en) * | 1997-11-04 | 2001-04-17 | Adaptec, Inc. | File array storage architecture having file system distributed across a data processing platform |
CN101099135A (zh) * | 2004-12-03 | 2008-01-02 | 英特尔公司 | 由于电源故障引起的数据丢失的防止 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9703502B2 (en) | 2011-12-29 | 2017-07-11 | Intel Corporation | Multi-level memory with direct access |
US10241710B2 (en) | 2011-12-29 | 2019-03-26 | Intel Corporation | Multi-level memory with direct access |
Also Published As
Publication number | Publication date |
---|---|
GB2469193B (en) | 2012-11-07 |
US20120290774A1 (en) | 2012-11-15 |
TWI465906B (zh) | 2014-12-21 |
GB2469193A (en) | 2010-10-06 |
US20100250833A1 (en) | 2010-09-30 |
TW201104425A (en) | 2011-02-01 |
DE102010013263A1 (de) | 2011-01-13 |
GB201005303D0 (en) | 2010-05-12 |
US20200034304A1 (en) | 2020-01-30 |
US8195891B2 (en) | 2012-06-05 |
US10289556B2 (en) | 2019-05-14 |
CN101923499A (zh) | 2010-12-22 |
TWI556104B (zh) | 2016-11-01 |
US8700858B2 (en) | 2014-04-15 |
US20140173190A1 (en) | 2014-06-19 |
US20170161198A1 (en) | 2017-06-08 |
US9501402B2 (en) | 2016-11-22 |
TW201502783A (zh) | 2015-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101923499B (zh) | 执行防电源故障高速缓存而无需原子元数据的技术 | |
US10394710B2 (en) | Storage class memory (SCM) memory mode cache system | |
US9367469B2 (en) | Storage system and cache control method | |
US8838918B2 (en) | Information processing apparatus and data backup method | |
US20110276746A1 (en) | Caching storage adapter architecture | |
US9009407B2 (en) | System and method for performing system memory save in tiered/cached storage | |
TW201324154A (zh) | 記憶體儲存系統及其中控裝置、管理方法與斷電復原方法 | |
CN100495311C (zh) | 系统支持存储设备和计算机系统 | |
US9292204B2 (en) | System and method of rebuilding READ cache for a rebooted node of a multiple-node storage cluster | |
CN103412822A (zh) | 操作非易失性内存和数据操作的方法和相关装置 | |
TWI512493B (zh) | 本地代理器多層式非揮發性記憶體(nvm)記憶體架構 | |
WO2017107162A1 (zh) | 一种异构混合内存组件、系统及存储方法 | |
US9058274B2 (en) | System and method of selective READ cache retention for a rebooted node of a multiple-node storage cluster | |
JP2006099802A (ja) | 記憶制御装置およびキャッシュメモリの制御方法 | |
US10331385B2 (en) | Cooperative write-back cache flushing for storage devices | |
KR101864831B1 (ko) | 가상 캐시를 포함하는 메모리 및 그 관리 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |