CN104081362A - 使用多级单元的版本存储器 - Google Patents
使用多级单元的版本存储器 Download PDFInfo
- Publication number
- CN104081362A CN104081362A CN201280068632.0A CN201280068632A CN104081362A CN 104081362 A CN104081362 A CN 104081362A CN 201280068632 A CN201280068632 A CN 201280068632A CN 104081362 A CN104081362 A CN 104081362A
- Authority
- CN
- China
- Prior art keywords
- data
- storage
- level
- level unit
- version
- 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
- 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
-
- 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/1405—Saving, restoring, recovering or retrying at machine instruction level
- G06F11/1407—Checkpointing the instruction stream
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- 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/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1072—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in multilevel memories
-
- 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/1435—Saving, restoring, recovering or retrying at system level using file system or storage system metadata
-
- 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/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
- G06F11/1451—Management of the data involved in backup or backup restore by selection of backup contents
-
- 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/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- 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
-
- 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/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/7209—Validity control, e.g. using flags, time stamps or sequence numbers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/56—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
- G11C11/5621—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C2211/00—Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C2211/56—Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
- G11C2211/564—Miscellaneous aspects
- G11C2211/5641—Multilevel memory having cells with different number of storage levels
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Library & Information Science (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明公开了使用多级单元(MLC)的版本存储器。示例性方法包括比较全局存储器版本与块存储器版本,全局存储器版本对应于多个存储块,块存储器版本对应于多个存储块中的一个存储块。示例性方法包括基于该比较来确定多个存储块中的这一个存储块的多级单元中的哪一级存储检查点数据。
Description
背景技术
高性能计算(HPC)系统一般用于复杂数学和/或科学信息的计算。这样的计算可包括化学相互作用的模拟、信号分析、结构分析的模拟等。由于计算的复杂性,HPC系统可能花费延长的时间段(例如小时、天、星期等)来完成这些计算。诸如硬件故障、应用程序漏洞、存储器毁坏、系统故障等的错误可能在计算期间出现,并将所计算的数据保持在毁坏和/或不一致的状态。当这样的错误出现时,HPC系统重新开始计算,这可明显增加完成计算的处理时间。
为了缩短重新计算的处理时间,利用检查点在计算期间存储在不同点处所计算的数据的版本。当错误出现时,计算系统恢复最近的检查点,并从恢复的检查点重新开始计算。以这种方式,检查点可用于缩短重新计算的处理时间。
附图说明
图1描绘示例性多级单元(MLC)非易失性随机存取存储器(NVRAM)配置。
图2是使用图1的MLC NVRAM的示例性存储块的方框图。
图3是可用于使用图2的示例性存储块来实现版本存储器的示例性存储控制器的方框图。
图4是代表在示例性计算期间使用图2的示例性存储块的示例性存储状态的方框图。
图5是代表可被执行来实现图3的示例性存储控制器以执行示例性操作序列的示例性机器可读指令的流程图。
图6是代表可被执行来实现图3的示例性存储控制器的示例性机器可读指令的流程图。
图7是代表可被执行来实现图3的示例性存储控制器以执行读操作的示例性机器可读指令的流程图。
图8是代表可被执行来实现图3的示例性存储控制器以执行写操作的示例性机器可读指令的流程图。
图9是能够执行图5、6、7和/或8的示例性机器可读指令以实现图3的示例性存储控制器的示例性处理器平台的方框图。
具体实施方式
本文公开的示例性方法、装置和制品能够使用多级单元(MLC)非易失性随机存取存储器(NVRAM)来实现版本存储器。为了实现版本存储器,本文公开的例子利用全局存储器版本号和每块版本号来确定应从多级存储单元中的哪一级读取数据和/或应向多级存储单元中的哪一级写入数据。本文公开的示例性版本存储技术可用于在NVRAM中实现快速检查点检查和/或快速的、强大的和一致的数据管理。
更新的NVRAM存储技术(例如相变存储器(PCRAM)、忆阻器等)比传统的存储技术具有更高的存储密度。这样的较高密度NVRMA存储技术被预期用在较新的计算系统中。然而,设计者、工程师和用户面临着由于诸如存储器泄漏、系统故障、应用程序漏洞等的错误产生的NVRAM毁坏的风险。因此,本文公开的例子将NVRAM中的数据恢复到稳定的状态,以消除或实质上减小(例如最小化)毁坏的风险。
以前的系统使用多版本数据结构、检查点日志过程等来实现从错误中恢复。然而,这样的多版本数据结构是被设计成使用那些多版本数据结构的软件应用程序所特有的。因此,这些数据结构的使用限于具有这样特别设计的软件应用程序的计算系统。在一些已知的系统中,检查点日志过程依赖于将存储器拷贝到第二位置以创建检查点的能力。然而,拷贝存储器可能花费很长一段时间,且可能易于发生错误,这是因为要利用很多存储操作来创建检查点。在一些例子中,写前日志(在更新主要数据之前创建新添加的数据的日志)或撤销日志(在用新数据重写原始数据之前创建原始数据的日志)用于安全地更新数据。然而,这些机制引起性能和能力的相当大的开销。
本文公开的示例性方法、装置和制品在高性能计算(HPC)系统中实现检查点,并在NVRAM中提供一致、持久的数据对象。本文公开的例子通过使全局存储器版本号递增来实现示例性检查点操作。全局存储器版本号与每块版本号比较,以确定存储块是否已被修改(例如自前一检查点操作以来被修改)。在一些例子中,当存储块还没有被修改时,检查点数据被存储在MLC NVRAM的第一层中。在一些例子中,当存储块已被修改时,检查点数据被存储在MLC NVRAM的第二层中。
图1描绘示例性多级单元(MLC)非易失性随机存取存储器(NVRAM)配置。第一示例性NVRMA单元110使用表示布尔值“0”(例如状态S0)的第一电阻范围(例如低电阻值)和表示布尔值“1”(例如状态S1)的第二电阻范围(例如高电阻值),来在每个单元存储一个位(例如具有位b0的单级NVRAM单元)。通过将NVRAM单元分成如示例性MLC NVRAM单元120和130所示的较小的电阻范围,更多的信息可被存储,从而产生较高密度的存储器。示例性NVRAM单元120在每个单元存储两个位(例如代表位b1和b0的四个电阻范围),且示例性NVRAM单元130在每个单元使用三个位(例如代表位b2、b1和b0的八个电阻范围)。在图1的所示例子中,每个MLC NVRAM单元120和130通过使用单元电阻的较细粒度量化来存储多个位。因此,MLC NVRAM用于增加存储密度,这是因为更多的位被存储在相同数量的NVRAM单元中。
与其它类型的存储器(例如动态随机存取存储器(DRAM))不同,NVRAM具有非对称操作特性。具体地,向NVRAM写入比从NVRAM读取更耗费时间和能量。此外,与单级单元(例如第一示例性NVRAM单元110)比较,读和写操作在使用MLC NVRAM时使用更多的存储周期。在MLC NVRAM中,读使用多个步骤来准确地解析存储在NVRAM单元中的电阻级。此外,读MLC(例如单元120和130)的最高有效位花费较少的时间,这是因为读电路不需要以读MLC的最低有效位所需的精确度确定单元电阻。类似地,向MLC NVRAM单元写入比单级单元花费更长的时间,这是因为写使用一系列读操作来验证正确的值已被写入NVRAM单元。
图2是被显示有具有四个存储单元的示例性存储块208的示例性检查点配置200,其中一个存储单元以附图标记215示出。在所示例子中,使用图1的两位每单元MLC NVRAM(例如NVRAM单元120)来实现存储块208的单元。图2的示例性检查点配置200包括对应于存储块208和未示出的其它存储块的单元的全局标识符(GID)205。所示例子的GID 205存储代表存储在存储块208和其它存储块中的数据的最后一个检查点版本的全局存储器版本号(例如串行版本号)。在所示例子中,GID 205是系统状态的一部分。也就是说,GID 205在存储器中作为系统控制操作的部分被管理、更新和/或使用。在本文公开的所示例子中,GID 205用于指示检查点何时出现。检查点是指在存储器的操作期间用于从错误、故障和/或毁坏中恢复的检查点数据被保存在存储器中时的点。所示例子的GID 205基于来自使用存储块208执行计算的应用程序的检查点指令不时地(例如周期性地和/或非周期性地)被更新,以指示新检查点何时被存储。此外或可替代地,可使用触发检查点的创建的任何其它周期性和/或非周期性方法。例如,可在每个读和/或写操作之后创建检查点,可在阈值量的时间(例如一分钟、15分钟、一小时等)之后创建检查点。
在所示例子中,关于存储块208示出单个GID 205。然而,在一些例子中,可利用多个GID 205来例如代表不同存储区的版本号(例如不同的GID可用于一个或多个虚拟地址空间,例如用于不同的进程,用于一个或多个虚拟机,等等)。此外,在所示例子中,示出单个存储块208。然而,具有更少或更多的级数相同、更少或更多的存储单元的任何数量的存储块可与GID 205或不同的相应GID相关联。
在所示例子中,块标识符(BID)210与存储块208相关联。BID 210代表相应的存储块208的版本号(例如串行版本号)。在所示例子中,BID 210作为元数据被存储在单独的存储对象中。在所示例子中,存储对象是存储数据(例如版本号)的一个或多个存储块和/或位置。在一些例子中,与不同的存储块相关联的BID可被存储在同一存储对象中。
如上所述,示例性存储块208包括四个多级单元215,其中一个多级单元以附图标记215示出。然而,在其它例子中,存储块208可包括任何数量的多级单元。所示例子的多级单元215是具有第一级220(例如最高有效位(MSB))和第二级230(例如最低有效位(LSB))的两位每单元MLC(例如图1的NVRAM单元120)。虽然多级单元215被示为两位每单元MLC,但本文公开的例子可关于具有多于两位每单元的MLC来实现。此外,虽然在所示例子中第一级220由MSB代表而第二级230由LSB代表,但可利用任何其它级代表MSB和/或LSB。例如,级可反转。
在所示例子中,BID 210相对于GID 205的值指示存储在存储块208中的数据是否已被修改。例如,BID 210可与GID 205比较,以确定存储在第一级220(MSB)或第二级230(例如LSB)中的数据是否代表检查点数据。
在所示例子中,GID 205和BID 210使用64位计数器来实现,以代表串行版本号。当GID 205和/或BID 210递增而超出其最大值时,它们回滚到0。虽然64位计数器在计算期间不太可能递增而超出其最大值(例如翻转事件)(例如将不可能有多于2的64次方(264)个检查点),但当使用较小的计数器(例如8位计数器、16位计数器、32位计数器等)时,由于较小的计数器到达其最大值而更可能出现翻转事件。在所示例子中,为了防止翻转引起来自GID 205和BID 210之间的比较的不准确的结果,翻转由存储控制器检测。以这种方式,在翻转的情况下,存储控制器可将GID 205和BID 210重置到0。在一些例子中,在翻转之后,GID 205和BID 210被设置为不同的相应值(例如GID 205被设置为1,而BID 210被设置为0),以维持检查点状态的准确状态。
图3是可用于使用图2的示例性存储块208来实现版本存储器的示例性存储控制器305的方框图。图1的所示例子的存储控制器305包括版本管理处理器310、存储器读取器320、存储器写入器330、全局标识符存储库340和块标识符存储库340。
图3的示例性版本管理处理器310由执行指令的处理器实现,但此外或可替代地,其可由专用集成电路(ASIC)、可编程逻辑器件(PLD)和/或现场可编程逻辑器件(FPLD)和/或其它电路实现。所示例子的版本管理处理器310在读和写操作期间比较相应的MLC NVRAM单元的GID 205与BID 210,以确定从相应的MLC NVRAM单元的哪一级读取和/或写相应的MLC NVRAM单元的哪一级。在本文公开的例子中,当GID 205大于BID 210时,在存储在相应的MLC NVRAM单元的第一级中的数据被写入相应的MLC NVRAM单元的第二级之后,写操作写相应的MLC NVRAM单元的第一级。当GID 205不大于BID 210时,写操作写相应的MLC NVRAM单元的第一级。当GID 205大于或等于BID 210时,读操作读取存储在相应的MLC NVRAM单元的第一级中的数据。当GID不大于或不等于BID 210时,读操作读取存储在相应的MLC NVRAM单元的第二级中的数据。
图3的示例性存储器读取器320由执行指令的处理器实现,但此外或可替代地,其可由ASIC、DSP、FPGA和/或其它电路实现。在一些例子中,示例性存储器读取器320由与版本管理处理器310相同的物理处理器实现。在所示例子中,示例性存储器读取器320基于相应存储块208的GID 205和BID 210的比较从相应存储块208的MSB 220或LSB 230读取。
图3的示例性存储器写入器330由执行指令的处理器实现,但此外或可替代地,其可以由ASIC、DSP、FPGA和/或其它电路实现。在一些例子中,示例性存储器写入器330由与存储器读取器320和版本管理处理器310相同的物理处理器实现。在所示例子中,示例性存储器写入器330基于相应存储块208的GID 205和BID 210的比较写相应存储块208的MSB 220或LSB 230。
图3的示例性全局标识符存储库340可由用于存储数据的任何有形机器可访问存储介质(例如NVRAM闪存、磁性介质、光学介质等)来实现。GID 205可使用任何数据格式(例如二进制数据、以逗号分割的数据、以制表符分割的数据、结构化查询语言(SQL)结构等)存储在全局标识符存储库340中。在所示例子中,全局标识符存储库340是用于存储GID 205的64位计数器。然而,此外或可替代地,可以使用任何其它大小的计数器和/或数据结构。虽然在所示例子中,全局标识符存储库340被示为单个数据结构,但全局标识符存储库340可以可替代地由任何数量和/或类型的数据结构实现。例如,如上面讨论的,可能有与不同的存储区相关联的多个GID 205,每个GID 205存储在相同的全局标识符存储库340和/或一个或多个不同的全局标识符存储库中。
图3的示例性块标识符存储块350可由用于存储数据的任何有形机器可访问存储介质(例如NVRAM闪存、磁性介质、光学介质等)实现。数据可使用任何数据格式(例如二进制数据、以逗号分割的数据、以制表符分割的数据、结构化查询语言(SQL)结构等)存储在块标识符存储库350中。在所示例子中,块标识符存储库350是用于存储BID 210的64位计数器。然而,此外或可替代地,可以使用任何其它大小的计数器和/或数据结构。虽然在所示例子中,块标识符存储库350被示为单个数据结构,但块标识符存储库350可以可替代地由任何数量和/或类型的数据结构实现。
图4是代表在存储和/或更新存储在存储块208中的数据的计算的示例性执行时期期间图2的存储块208的示例性存储状态450、460、470、480和490的方框图。虽然在图4的所示例子中,示例性存储状态450、460、470、480和490示出如示例性时间线494(时间从附图的顶部向下进展)所表示的随时间的进展,但在不同状态之间的持续时间可以相同或可以不同。
所示例子的示例性存储状态450示出存储块208的初始存储状态。在所示例子中,GID 205和BID 210被设置为0,且所示存储单元(例如图2的存储单元215)的MSB 220存储0-0-0-0的示例性数据。在所示例子中,所示存储单元的LSB 230是空白的,指示任何数据可存储在LSB 230中(例如在LSB 230的数据存储库是逻辑无关的)。
示例性存储状态460显示执行时段的开始,在该执行时段期间,GID 205响应于执行时段的开始而递增为1。在所示例子中,LSB 230保持空白(例如不存储有效数据),指示任何数据可存储在LSB 230中(例如,在LSB 230中的数据存储库是逻辑无关的)。
所示例子的示例性存储状态470显示将1-0-1-0的示例性数据值写入存储块208的MSB 220的第一写操作的结果。在所示例子中,因为在当写操作被发起时在以前的存储状态460下GID 205大于BID 210,因此在存储状态460期间存储在MSB 220中的数据(例如0-0-0-0)被写入LSB 230,如在存储状态470所示的。来自在存储状态460发起的写操作的新数据(例如1-0-1-0)接着被写入MSB 220中,如在存储状态470所示的。因此,LSB 230存储检查点数据412(例如0-0-0-0),且MSB 220存储新写入的数据(例如1-0-1-0)。在写操作期间,BID 210被设置为GID 205的值,从而防止随后的在下一检查点之前出现(如由GID 205和BID 210的比较指示的)的写入会重写检查点数据412。
所示例子的示例性存储状态480显示将示例性数据1-1-0-0写入MSB 220的第二写操作的结果。在所示例子中,因为在写操作开始时GID 205等于BID 210,因此示例性数据1-1-0-0被写入MSB 220,如在存储状态480所示的,重写以前的数据1-0-1-0。因此,LSB 230没有被修改。当写操作在存储状态480完成时,BID 210被设置为GID 205的值。检查点数据412在LSB 230中保持与以前的存储状态470相同。
所示例子的示例性存储状态490示出检查点操作的结果。在所示例子中,检查点操作出现在图4的执行时段末尾。然而,检查点操作可出现在执行时段期间的一点处(例如在中间计算完成之后)。检查点操作使GID 205递增。紧接着在检查点操作之前存储在MSB 220中的数据代表最近的数据(例如在计算期间写入的数据)。因此,当GID 205大于BID 210时,检查点数据412由MSB 220表示。LSB 230存储来自以前的检查点的过时数据。在检查点操作中使用的存储器修改更新一个值——GID 205。有利地,更新GID 205是快速和强大的(例如一个存储器值被修改),而不需要将检查点数据412存储到另一位置。
虽然在图3中示出实现存储控制器305的示例性方法,但图3所示的元件、过程和/或设备中的一个或多个可以用任何其它方式组合、划分、重新布置、省略、消除和/或实现。此外,示例性版本管理处理器310、示例性存储器读取器320、示例性存储器写入器330、示例性全局标识符存储库340、示例性块标识符存储库350和/或更一般地图3的示例性存储控制器305可由硬件、软件、固件和/或硬件、软件和/或固件的任何组合实现。因此,例如示例性版本管理处理器310、示例性存储器读取器320、示例性存储器写入器330、示例性全局标识符存储库340、示例性块标识符存储库350和/或更一般地图3的示例性存储控制器305中的任意一个可由一个或多个电路、可编程处理器、专用集成电路(ASIC)、可编程逻辑器件(PLD)和/或现场可编程逻辑器件(FPLD)等实现。当本专利的装置或系统权利要求中的任一个被理解为涵盖纯软件和/或固件实现时,示例性版本管理处理器310、示例性存储器读取器320、示例性存储器写入器330、示例性全局标识符存储库340和/或示例性块标识符存储库350中的至少一个特此被明确地定义为包括用于存储软件和/或固件的有形计算机可读存储介质,例如存储器、DVD、CD、蓝光盘等。仍然进一步地,图3的示例性存储控制器305除了或代替图3所示的元件、过程和/或设备,还可包括一个或多个元件、过程和/或设备,和/或可包括任何或全部所示元件、过程和/或设备中的多于一个。
代表用于实现图3的存储控制器305的示例性机器可读指令的流程图在图5、6、7和/或8中示出。在这些例子中,机器可读指令包括待由处理器(例如在下面关于图9讨论的示例性计算机900中示出的处理器912)执行的一个或多个程序。程序可嵌入在存储在有形计算机可读存储介质(例如CD-ROM、软盘、硬盘驱动器、数字通用盘(DVD)、蓝光盘或与处理器912相关联的存储器)上的软件中,但整个程序和/或其部分可以可替代地由除了处理器912以外的设备执行和/或嵌入在固件或专用硬件中。此外,虽然关于在图5、6、7和/或8中所示的流程图描述了示例性程序,但可以可替代地使用用于实现示例性存储控制器305的很多其它方法。例如,块的执行顺序可改变,和/或所描述的一些块可改变、消除或组合。
如上面提到的,可使用存储在有形计算机可读介质上的编码指令(例如计算机可读指令)来实现图5、6、7和/或8的示例性过程,有形计算机可读介质例如为硬盘驱动器、闪存、只读存储器(ROM)、光盘(CD)、数字通用盘(DVD)、高速缓冲存储器、随机存取存储器(RAM)和/或信息被存储任何持续时间(例如延长的时间段、永久地、短暂时刻,用于信息的临时缓冲和/或缓存)的任何其它存储介质。如在本文使用的,术语“有形计算机可读存储介质”被明确地定义为包括任何类型的机器可读存储器且不包括传播信号。此外或可替代地,可使用存储在非临时计算机可读介质上的编码指令(例如计算机可读指令)来实现图5、6、7和/或8的示例性过程,非临时计算机可读介质例如为硬盘驱动器、闪存、只读存储器、光盘、数字通用盘、高速缓冲存储器、随机存取存储器和/或信息被存储任何持续时间(例如延长的时间段、永久地、短暂时刻,用于信息的临时缓冲和/或缓存)的任何其它存储介质。如在本文使用的,术语“非临时计算机可读介质”被明确地定义为包括任何类型的计算机可读介质且不包括传播信号。如在本文使用的,当短语“至少”用作权利要求的前序中的过渡词时,它以与术语“包括”是开放的相同的方式是开放的。因此,在前序中使用“至少”作为过渡词的权利要求可包括除了在该权利要求中明确记载的那些元件以外的元件。
图5是代表可被执行来实现图3的示例性存储控制器305以执行存储器访问和检查点操作的示例性机器可读指令的流程图。在图5的所示例子中,圈住的附图标记表示在执行时段期间在不同点处的各种示例性存储状态(例如图4的示例性存储状态)。示例性操作序列500在块520开始。在所示例子中,在块520之前,存储块208处于图4的存储状态450,在该状态下没有检查点出现。因为检查点还没有出现,因此图2和4的GID 205和BID 210为0。
最初,图3的版本管理处理器310初始化GID 205和BID 210(块510)。在所示例子中,GID 205和BID 210被设置为0,然而可使用任何其它值。代表初始化的GID 205和BID 210的示例性存储状态在图4的示例性存储状态450中示出。
版本管理处理器310使GID 205递增(块520)。通过使GID 205递增,对存储块208的随后的写操作使存储在MSB 220中的数据存储在LSB 230中作为图4的检查点数据412。代表在读和/或写操作之前的递增的GID 205的示例性存储状态在图4的示例性存储状态460中示出。
存储控制器305对存储块208执行所请求的读和/或写操作(块540)。关于图7更详细讨论了读操作。关于图8更详细讨论了写操作。
在所示例子中,第一写请求被接收并处理。第一写请求的结果在图4的示例性存储状态470中示出。在所示例子中,第一写请求指示新数据(例如1-0-1-0)待写入。基于GID 205和BID 210的比较,版本管理处理器310使存储器读取器320读MSB 220并使存储器写入器330将从MSB 220读取的数据写入LSB 230。存储器写入器330接着将该新数据写入MSB 220。版本管理处理器310将BID 210设置为等于GID 205。
版本管理处理器310确定是否应创建检查点(块550)。在所示例子中,响应于所接收的检查点请求而创建检查点。在一些例子中,版本管理处理器310从块540的请求读和/或写操作的应用程序接收用于创建检查点的请求。此外或可替代地,可使用触发检查点的创建的任何其它周期性和/或非周期性方法。例如,版本管理处理器310可在每个读和/或写操作之后创建检查点,版本管理处理器310可在一时间(例如一分钟、15分钟、一小时等)之后创建检查点。
如果版本管理处理器310没有创建检查点,则控制返回到块540,在块540处存储控制器305对存储块208执行所请求的另一读和/或写操作(块540)。在所示例子中,第二写请求被接收并处理(块540)。第二写请求的结果在图4的示例性存储状态480中示出。在所示例子中,第二写请求指示新数据(例如1-1-0-0)待写入。因为第一写操作将BID 210设置为等于GID 205,因此版本管理处理器310使存储器写入器330将数据写入MSB 220。LSB 230未被修改。版本管理处理器310将BID 210设置为等于GID 205。
返回到块550,当创建检查点时,版本管理处理器310使GID 205递增(块560)。GID 205递增的示例性结果在图4的示例性存储状态490中示出。控制接着继续进行到块540,在块540处第一随后的(例如下一)写操作使存储控制器305将该数据从MSB 220拷贝到LSB 230(例如,如在470的示例性存储状态中的),以作为图4的检查点数据412继续存在。
图6是代表可被执行来实现图3的示例性存储控制器以从错误(例如故障、失误等)恢复的示例性机器可读指令600的流程图。当版本管理处理器310检测到错误指示(块610)时,图6的示例性过程600开始。在所示例子中,从对存储块208中的数据执行计算的应用程序接收错误指示。然而,此外或可替代地,可以使用检测错误指示的任何其它方式,例如检测系统错误何时出现,检测应用程序崩溃,等等。
当检测到错误指示时,版本管理处理器310使GID 205(例如以前的GID值)递(块620)。虽然在所示例子中GID 205被设置为0,但此外或可替代地,可以响应于错误而使用任何其它值。版本管理处理器310接着检查与每个存储块208相关联的BID 210,并将每个BID 210(其值大于GID 205(在递减之后))设置为最大值(例如264-1)(块630)。然而,BID 210可被设置为任何其它值。
在版本管理处理器330重新设置GID 205和BID 210之后,随后的读操作从LSB 230读数据。随后的写操作将数据写入MSB 220,并将BID 210设置为GID 205的值。
图7是代表可被执行来实现图3的示例性存储控制器305以对图2的存储块208执行读操作的示例性机器可读指令700的流程图。当版本管理处理器310接收到对特定的存储块208的读请求(块705)时,示例性过程700开始。版本管理处理器310确定GID 205(块710)。在所示例子中,版本管理处理器310通过从全局标识符存储库340读GID 205来确定GID 205。版本管理处理器310确定与存储块208相关联的BID 210(块715)。在所示例子中,版本管理处理器310通过从块标识符存储库350读BID 210来确定BID 210。
版本管理处理器310比较GID 205与BID 210,以识别存储块208的哪一级应被读取(块720)。在所示例子中,当BID 210小于或等于GID 205时,版本管理处理器310确定存储块208的第一层(例如MSB 220)应被读取。存储器读取器320接着读取存储在第一层中的数据(块730)。如果版本管理处理器310确定BID210大于GID 215,则存储器读取器320读取存储在第二层(例如LSB 230)中的数据(块725)。
一旦存储器读取器320从适当的层读取了数据,存储器读取器320就使用数据来回复读请求(块735)。
图8是代表可被执行来实现图3的示例性存储控制器以对图2的存储块208执行读操作的示例性机器可读指令800的流程图。当版本管理处理器310接收到对特定的存储块208的写请求(块810)时,示例性过程800开始。写请求包括存储块208的地址和将被写入存储块208的数据。版本管理处理器310确定GID 205(块815)。在所示例子中,版本管理处理器310通过从全局标识符存储库340读GID 205来确定GID 205。版本管理处理器310确定与存储块208相关联的BID 210(块820)。在所示例子中,版本管理处理器310通过从块标识符存储库350读BID 210来确定BID 210。版本管理处理器310比较GID 205与BID 210,以识别所接收的数据应被写入存储块208的哪一级(块825)。
在所示例子中,如果BID 210小于GID 205,则存储器读取器320从存储块208的第一层(例如MSB 220)读取当前数据(块835)。存储器写入器330接着将从第一层读取的当前数据写入存储块208的第二层(例如LSB 230)(块840)。存储器写入器330接着将所接收的数据写入存储块208的第一层(例如MSB 220)(块850)。
返回到块825,如果BID 210大于或等于GID 205,则存储器写入器330将所接收的数据写入存储块208的第一层(例如MSB 220)(块830)。
在将所接收的数据写入适当的层之后,版本管理处理器310将与存储块208相关联的BID 210设置为GID 205的值(块860)。因此,在所示例子中,在检查点操作之后与第一写操作结合来执行块835、840和850。在所示例子中,与随后的写操作结合来执行块830。版本管理处理器310接着确认写请求(块870)。
图9是能够执行图5、6、7和/或8的示例性机器可读指令以实现图3的示例性存储控制器的示例性计算机900的方框图。计算机900可以是例如服务器、个人计算机、移动电话(例如蜂窝电话)、个人数字助理(PDA)、互联网器具或任何其它类型的计算设备。
本例的系统900包括处理器912。例如,处理器912可由来自任何期望系列或制造商的一个或多个微处理器或控制器实现。
处理器912包括本地存储器913(例如高速缓冲存储器)并经由总线918与包括易失性存储器914和非易失性存储器916的主存储器通信。易失性存储器914可由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、RAMBUS动态随机存取存储器(RDRAM)和/或任何其它类型的随机存取存储器设备实现。所示例子的非易失性存储器916由多级单元(MLC)非易失性随机存取存储器(NVRAM)实现。非易失性存储器916可由任何其它期望类型的存储器设备(例如闪存、相变存储器(PCRAM)、忆阻器等)实现。对主存储器914、916的访问由存储控制器305控制。在所示例子中,存储控制器305经由总线918与处理器912通信。在一些例子中,存储控制器305经由处理器912实现。在一些例子中,存储控制器305经由非易失性存储器916实现。易失性存储器914和/或非易失性存储器916可实现全局标识符存储库340和/或块标识符存储库350。
计算机900还包括接口电路920。接口电路920可通过任何类型的接口标准(例如以太网接口、通用串行总线(USB)和/或PCI express接口)来实现。
一个或多个输入设备922连接到接口电路920。输入设备922允许用户将数据和命令输入到处理器912中。输入设备可由例如键盘、鼠标、触摸屏、轨迹板、轨迹球、isopoint和/或语音识别系统实现。
一个或多个输出设备924也连接到接口电路920。输出设备924可由例如显示设备(例如液晶显示器、阴极射线管显示器(CRT)、打印机和/或扬声器)实现。接口电路920因此一般包括图形驱动卡。
接口电路920还包括例如调制解调器或网络接口卡的通信设备,以便于经由网络926(例如以太网连接、数字用户线(DSL)、电话线、同轴电缆、蜂窝电话系统等)与外部计算机交换数据。
计算机900还包括用于存储软件和数据的一个或多个大容量存储设备928。这样的大容量存储设备928的例子包括软盘驱动器、硬盘驱动器、光盘驱动器和数字通用盘(DVD)驱动器。大容量存储设备928可实现全局标识符存储库340和/或块标识符存储库350。
图5、6、7和/或8的编码指令932可存储在大容量存储设备928中、易失性存储器914中、非易失性存储器916中、本地存储器913中和/或可移动存储介质(例如CD或DVD)上。
从前文中,将认识到,上面公开的方法、装置和制品使用多级(MLC)非易失性随机存取存储器(NVRAM)来实现版本存储器。有利地,使用最少的存储管理操作来实现版本管理。因此,检查点在NVRAM中实现快速且强大/一致的数据管理。此外,从错误(例如存储器毁坏、系统崩溃等)恢复是快速的,这是因为最小数量的存储位置在恢复期间被修改。
虽然本文描述了某些示例性方法、装置和制品,但本专利的涵盖范围不限于此。相反,本专利涵盖完全落在本专利的权利要求的范围内的所有方法、装置和制品。
Claims (14)
1.一种使用多级单元实现版本存储器的方法,所述方法包括:
使用处理器比较全局存储器版本与块存储器版本,所述全局存储器版本对应于多个存储块,所述块存储器版本对应于所述多个存储块中的一个存储块;以及
基于所述比较,确定所述多个存储块中的所述一个存储块的多级单元中的哪一级存储检查点数据。
2.如权利要求1所述的方法,进一步包括当所述多级单元的第二级存储所述检查点数据时,将所接收的数据写入所述多级单元的第一级。
3.如权利要求1所述的方法,进一步包括:
将存储在所述多级单元的第一级中的第一数据写入所述多级单元的第二级;
在将所述第一数据写入所述多级单元的所述第二级之后,将所接收的数据写入所述多级单元的所述第一级;以及
设置所述块存储器版本,使得随后的比较指示所述多级单元的所述第二级存储所述检查点数据。
4.如权利要求1所述的方法,进一步包括:
检测存储在所述多级单元中的数据的错误状态;以及
读取存储在所述多级单元的检查点级中的数据,以从所述错误状态恢复。
5.一种使用多级单元实现版本存储器的装置,所述装置包括:
全局标识符存储库,用于存储全局存储器版本,所述全局存储器版本对应于多个存储块;
块标识符存储库,用于存储全局存储器版本,所述块存储器版本对应于所述多个存储块中的一个存储块;以及
版本管理处理器,用于比较所述全局存储器版本与所述全局存储器版本,以确定所述多个存储块中的所述一个存储块的多级单元中的哪一级用于存储检查点数据。
6.如权利要求5所述的装置,进一步包括存储器写入器,所述存储器写入器用于当存储在所述多级单元的第一级中的数据存储所述检查点数据时:
将存储在所述多级单元的第一级中的第一数据写入所述多级单元的第二级;
在将所述第一数据写入所述多级单元的所述第二级之后,将所接收的数据写入所述多级单元的所述第一级中;以及
设置所述块标识符,使得由所述版本管理处理器进行的随后的比较指示存储在所述多级单元的所述第二级中的所述数据存储所述检查点数据。
7.如权利要求5所述的装置,进一步包括存储器写入器,所述存储器写入器用于当存储在所述多级单元的第一级中的数据不存储所述检查点数据时将所接收的数据写入所述多级单元的第一级。
8.如权利要求5所述的装置,其中所述版本管理处理器用于比较所述块标识符与所述全局标识符,以确定与存储在所述多级单元的第一级中的第一数据相关的计算错误是否出现。
9.如权利要求8所述的装置,进一步包括存储器读取器,所述存储器读取器用于当所述计算错误出现时从所述多级单元的第二级读取第二数据。
10.如权利要求8所述的装置,进一步包括存储器读取器,所述存储器读取器用于当所述计算错误没有出现时从所述多级单元的所述第一级读取所述第一数据。
11.一种有形计算机可读存储介质,所述有形计算机可读存储介质包括指令,所述指令在被执行时使计算机:
使用处理器比较全局存储器版本与块存储器版本,所述全局存储器版本对应于多个存储块,所述块存储器版本对应于所述多个存储块中的一个存储块;以及
基于所述比较,确定所述多个存储块中的所述一个存储块的多级单元中的哪一级存储检查点数据。
12.如权利要求11所述的机器可读介质,进一步存储使所述计算机在所述多级单元的第二级存储所述检查点数据时将所接收的数据写入所述多级单元的第一级的指令。
13.如权利要求11所述的机器可读介质,进一步存储使所述计算机至少执行下列操作的指令:
将存储在所述多级单元的第一级中的第一数据写入所述多级单元的第二级;
在将所述第一数据写入所述多级单元的所述第二级之后,将所接收的数据写入所述多级单元的所述第一级;以及
设置所述块存储器版本,使得随后的比较指示所述多级单元的所述第二级存储所述检查点数据。
14.如权利要求11所述的机器可读介质,进一步存储使所述计算机至少执行下列操作的指令:
检测存储在所述多级单元中的数据的错误状态;以及
读取存储在所述多级单元的检查点级中的数据,以从所述错误状态恢复。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2012/027565 WO2013130106A1 (en) | 2012-03-02 | 2012-03-02 | Versioned memories using a multi-level cell |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104081362A true CN104081362A (zh) | 2014-10-01 |
CN104081362B CN104081362B (zh) | 2017-06-23 |
Family
ID=49083129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280068632.0A Expired - Fee Related CN104081362B (zh) | 2012-03-02 | 2012-03-02 | 使用多级单元实现版本存储器的方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20150074456A1 (zh) |
EP (1) | EP2820548B1 (zh) |
KR (1) | KR101676932B1 (zh) |
CN (1) | CN104081362B (zh) |
WO (1) | WO2013130106A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2842036B1 (en) * | 2012-04-27 | 2019-07-03 | Hewlett-Packard Enterprise Development LP | Local checkpointing using a multi-level cell |
WO2015116078A1 (en) | 2014-01-30 | 2015-08-06 | Hewlett-Packard Development Company, L.P. | Memory data versioning |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4459658A (en) * | 1982-02-26 | 1984-07-10 | Bell Telephone Laboratories Incorporated | Technique for enabling operation of a computer system with a consistent state of a linked list data structure after a main memory failure |
US5008786A (en) * | 1985-09-11 | 1991-04-16 | Texas Instruments Incorporated | Recoverable virtual memory having persistant objects |
US5410685A (en) * | 1990-06-12 | 1995-04-25 | Regents Of The University Of Michigan | Non-intrinsive method and system for recovering the state of a computer system and non-intrusive debugging method and system utilizing same |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5210685A (en) | 1985-03-08 | 1993-05-11 | Westinghouse Electric Corp. | Uninterruptible power supply system and load transfer static switch for such a system |
US5923830A (en) * | 1997-05-07 | 1999-07-13 | General Dynamics Information Systems, Inc. | Non-interrupting power control for fault tolerant computer systems |
US9213609B2 (en) * | 2003-12-16 | 2015-12-15 | Hewlett-Packard Development Company, L.P. | Persistent memory device for backup process checkpoint states |
US7366826B2 (en) * | 2004-12-16 | 2008-04-29 | Sandisk Corporation | Non-volatile memory and method with multi-stream update tracking |
US8452929B2 (en) * | 2005-04-21 | 2013-05-28 | Violin Memory Inc. | Method and system for storage of data in non-volatile media |
US7516267B2 (en) * | 2005-11-03 | 2009-04-07 | Intel Corporation | Recovering from a non-volatile memory failure |
WO2008085323A2 (en) * | 2006-12-29 | 2008-07-17 | Sandisk Corporation | Method and apparatus for launching a program application |
US7818610B2 (en) | 2007-09-27 | 2010-10-19 | Microsoft Corporation | Rapid crash recovery for flash storage |
EP2271987A4 (en) * | 2008-05-01 | 2011-04-20 | Hewlett Packard Development Co | STORING CONTROL POINT DATA IN NON-VOLATILE MEMORY |
US7979626B2 (en) | 2008-05-13 | 2011-07-12 | Microsoft Corporation | Flash recovery employing transaction log |
US8332578B2 (en) | 2009-07-31 | 2012-12-11 | Intel Corporation | Method and system to improve the performance of a multi-level cell (MLC) NAND flash memory |
US9753877B2 (en) * | 2009-11-30 | 2017-09-05 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Memory read-channel with signal processing on general purpose processor |
US8661213B2 (en) * | 2010-01-06 | 2014-02-25 | Vmware, Inc. | Method and system for frequent checkpointing |
US9558080B2 (en) * | 2013-10-31 | 2017-01-31 | Microsoft Technology Licensing, Llc | Crash recovery using non-volatile memory |
-
2012
- 2012-03-02 WO PCT/US2012/027565 patent/WO2013130106A1/en active Application Filing
- 2012-03-02 US US14/374,812 patent/US20150074456A1/en not_active Abandoned
- 2012-03-02 CN CN201280068632.0A patent/CN104081362B/zh not_active Expired - Fee Related
- 2012-03-02 KR KR1020147020610A patent/KR101676932B1/ko active IP Right Grant
- 2012-03-02 EP EP12869720.8A patent/EP2820548B1/en not_active Not-in-force
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4459658A (en) * | 1982-02-26 | 1984-07-10 | Bell Telephone Laboratories Incorporated | Technique for enabling operation of a computer system with a consistent state of a linked list data structure after a main memory failure |
US5008786A (en) * | 1985-09-11 | 1991-04-16 | Texas Instruments Incorporated | Recoverable virtual memory having persistant objects |
US5410685A (en) * | 1990-06-12 | 1995-04-25 | Regents Of The University Of Michigan | Non-intrinsive method and system for recovering the state of a computer system and non-intrusive debugging method and system utilizing same |
Also Published As
Publication number | Publication date |
---|---|
US20150074456A1 (en) | 2015-03-12 |
EP2820548A1 (en) | 2015-01-07 |
WO2013130106A1 (en) | 2013-09-06 |
EP2820548A4 (en) | 2015-10-07 |
CN104081362B (zh) | 2017-06-23 |
EP2820548B1 (en) | 2016-12-14 |
KR20140106739A (ko) | 2014-09-03 |
KR101676932B1 (ko) | 2016-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8645749B2 (en) | Systems and methods for storing and recovering controller data in non-volatile memory devices | |
US9645924B2 (en) | Garbage collection scaling | |
US10068661B2 (en) | Post package repair (PPR) data in non-volatile memory | |
CN111026326B (zh) | 存储器控制器、存储装置及管理元数据的方法 | |
CN102057358B (zh) | 用于对卷的改变进行跟踪的系统与方法 | |
US20110029728A1 (en) | Methods and apparatus for reducing input/output operations in a raid storage system | |
CN106716395B (zh) | 事务处理的方法、装置及计算机系统 | |
CN105045525A (zh) | 存储控制器、存储系统及操作存储控制器的方法 | |
CN109086425B (zh) | 用于数据库的数据处理方法和装置 | |
CN104583978A (zh) | 与针对两级存储器系统的读取和写入窗口预算相关联的技术 | |
US20120324161A1 (en) | Electronic device and method for performing data backup and recovery | |
US9710335B2 (en) | Versioned memory Implementation | |
US10970167B2 (en) | Memory device | |
CN103984506A (zh) | 闪存存储设备数据写的方法和系统 | |
CN111324549B (zh) | 一种存储器及其控制方法和装置 | |
CN108073471A (zh) | 链接的存储系统和主机系统错误校正码 | |
US9910747B2 (en) | Parallel mirrored copying with write consistency | |
CN106258006A (zh) | 使用状态信息恢复系统 | |
CN104081357A (zh) | 使用多级单元设置本地检查点 | |
CN104081362A (zh) | 使用多级单元的版本存储器 | |
US20170031791A1 (en) | Maintaining a parity-inconsistent table to identify stripes affected by a write hole effect | |
CN104572350B (zh) | 一种元数据处理方法及装置 | |
CN107797885A (zh) | 电子设备及其控制方法 | |
US20240302971A1 (en) | System and method of preparing a solid state drive for reuse | |
CN117406910A (zh) | 数据存储方法、存储装置及计算机可读存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20160829 Address after: American Texas Applicant after: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP Address before: American Texas Applicant before: Hewlett-Packard Development Company, Limited Liability Partnership |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170623 Termination date: 20180302 |