CN111177029A - 用于管理软件定义的永久性存储器的系统及方法 - Google Patents
用于管理软件定义的永久性存储器的系统及方法 Download PDFInfo
- Publication number
- CN111177029A CN111177029A CN201911080129.7A CN201911080129A CN111177029A CN 111177029 A CN111177029 A CN 111177029A CN 201911080129 A CN201911080129 A CN 201911080129A CN 111177029 A CN111177029 A CN 111177029A
- Authority
- CN
- China
- Prior art keywords
- memory
- data
- cache
- random access
- processing unit
- 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
Images
Classifications
-
- 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/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2094—Redundant storage or storage space
-
- 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
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
-
- 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/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- 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
- 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/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2015—Redundant power supplies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/805—Real-time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/82—Solving problems relating to consistency
-
- 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/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency 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/21—Employing a record carrier using a specific recording technology
- G06F2212/214—Solid state disk
-
- 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/26—Using a specific storage system architecture
- G06F2212/261—Storage comprising a plurality of storage devices
- G06F2212/262—Storage comprising a plurality of storage devices configured as RAID
-
- 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/28—Using a specific disk cache architecture
- G06F2212/283—Plural cache memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0024—Peripheral component interconnect [PCI]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种用于管理软件定义的永久性存储器的系统。中央处理单元和外围组件互连高速交换机在与主机装置互动时仿真永久性存储器控制器。中央处理单元和外围组件互连高速交换机从主机装置接收指令,且基于指令将写入数据永久地存储在一或多个非易失性存储器快速固态驱动器中或从一或多个非易失性存储器快速固态驱动器检索读取数据,且使用随机存取存储器的至少一部分作为高速缓存以暂时地存储来自一或多个非易失性存储器快速固态驱动器的读取数据或意图永久地存储在一或多个非易失性存储器快速固态驱动器中的写入数据中的至少一个。
Description
技术领域
本揭露大体上涉及具有永久性存储器的系统及方法。
背景技术
举例来说,计算机系统可包含动态随机存取存储器(dynamic random accessmemory,DRAM)和非易失性存储装置(例如固态驱动器(solid state drive,SSD))。动态随机存取存储器允许在高速下对数据进行存取,且非易失性存储装置允许在关断电力时永久地存储数据。中央处理单元(central processing unit,CPU)经由存储器总线(例如使用双倍数据速率(double data rate,DDR)、DDR2、DDR3或DDR4协议)存取动态随机存取存储器,并经由诸如外围组件互连高速(peripheral component interconnect express,PCIe)总线的外围总线存取固态驱动器。动态随机存取存储器模块通常为字节可寻址(byte-addressable)装置,而固态驱动器通常为块可寻址(block-addressable)装置。由于动态随机存取存储器与固态驱动器之间的能力和特性不同,用于存取动态随机存取存储器的协议和用于存取固态驱动器的协议通常并不同。
包含动态随机存取存储器和非易失性存储的组合的永久性存储器模块,有可能能够在比固态驱动器更快的速度下,且以相比于动态随机存取存储器更低的每存储单元价格,提供对数据存储的存取。在一些实例中,永久性存储器模块配置成以类似于动态随机存取存储器的方式连接到系统,这允许中央处理单元以类似于存取动态随机存取存储器的方式存取永久性存储器模块。举例来说,包含动态随机存取存储器和非易失性存储(例如NAND闪存)的非易失性双列直插式存储器模块(non-volatile dual in-line memory module,NVDIMM)可安装于计算机主板的双列直插式存储器模块插槽中。这允许计算机系统在正常操作期间使用非易失性双列直插式存储器模块的动态随机存取存储器以实现较快数据存取,且在电力关闭或故障期间将数据永久地存储在非易失性双列直插式存储器模块的非易失性存储中。
发明内容
在大体方面,用于管理软件定义的永久性存储器的系统包含:中央处理单元;一或多个第一输入/输出端口,配置成容纳一或多个各自具有随机存取存储器(random accessmemory,RAM)的随机存取存储器模块,其中所述一或多个第一输入/输出端口电耦合到所述中央处理单元可存取的存储器总线;以及一或多个第二输入/输出端口,配置成容纳一或多个块可寻址非易失性存储装置。系统包含接口交换机,配置成经由一或多个第一数据链路与一或多个主机装置通信,其中所述中央处理单元和所述接口交换机配置成针对每一所述主机装置产生与对应的所述主机装置相关联的永久性存储器控制器数据结构。其中所述中央处理单元和所述接口交换机配置成在与所述主机装置互动时仿真永久性存储器控制器。所述永久性存储器控制器数据结构包含配置数据以使得所述中央处理单元和所述接口交换机能够仿真所述永久性存储器控制器。所述中央处理单元和所述接口交换机配置成从所述一或多个主机装置接收指令,且基于来自所述一或多个主机装置的所述指令而将写入数据永久地存储在所述一或多个块可寻址非易失性存储装置中或从所述一或多个块可寻址非易失性存储装置检索读取数据,且使用所述随机存取存储器的至少一部分作为高速缓存以暂时地存储来自所述一或多个块可寻址非易失性存储装置的所述读取数据或意图永久地存储在所述一或多个块可寻址非易失性存储装置中的所述写入数据中的至少一个。
所述实施方案可包含以下特征中的一或多个。来自所述主机装置的所述指令可包含设计成存取字节可寻址永久性存储器模块的指令。
所述第一数据链路可包含以下各项中的至少一个:PCIe链路、ThunderboltTM链路、NVLink、CCIX链路、OpenCAPI链路或Gen-Z链路。
所述一或多个块可寻址非易失性存储装置可经由PCIe链路、ThunderboltTM链路、NVLink、CCIX链路、OpenCAPI链路或Gen-Z链路中的至少一个与所述接口交换机或所述中央处理单元通信。
所述第一数据链路可包含PCIe链路,所述一或多个块可寻址非易失性存储装置可经由PCIe链路与所述接口交换机或所述中央处理单元通信,且所述接口交换机可包含PCIe交换机。
所述系统可包含电力故障检测器,配置成检测电力故障且产生指示电力故障的中断信号。
所述中央处理单元可配置成在接收指示电力故障的中断信号后执行紧急关机程序,所述紧急关机程序包含将所述高速缓存的所述数据清空到所述一或多个块可寻址非易失性存储装置。
所述紧急关机程序可包含停用与每一所述主机装置相关联的所述PCIe链路以防止经由所述PCIe链路从所述主机装置接收额外数据。
所述一或多个块可寻址非易失性存储装置中的至少一些块可寻址非易失性存储装置中的每一个块可寻址非易失性存储装置可具有使用随机存取存储器所实施的写入高速缓存,且所述紧急关机程序可包含停用一或多个所述写入高速缓存。
所述紧急关机程序可包含将存储器写入事务层数据包的写入数据清空到PCI存储器空间。
所述紧急关机程序可包含将所述PCI存储器空间中的所述数据清空到至少一个对应的所述块可寻址非易失性存储装置。
所述一或多个块可寻址非易失性存储装置中的至少一个中的每一个可包含使用动态随机存取存储器所实施的控制器存储缓冲器(controller memory buffer,CMB),控制器存储缓冲器的一部分配置为控制器存储缓冲器高速缓存,且所述中央处理单元和所述接口交换机配置成使用所述高速缓存和所述控制器存储缓冲器高速缓存来暂时地存储所述读取数据和/或所述写入数据。
所述紧急关机程序可包含将所述控制器存储缓冲器高速缓存中的所述数据清空到至少一个对应的所述块可寻址非易失性存储装置。
所述中央处理单元可使用PCIe链路电耦合到所述PCIe交换机。
来自所述主机装置的所述指令可包含设计成存取非易失性双列直插式存储器模块的指令。
所述系统可包含超级电容器,以在所述紧急关机程序期间向以下各项中的至少一个提供电力:所述中央处理单元、所述随机存取存储器、所述接口交换机或所述块可寻址非易失性存储装置。
所述控制器存储缓冲器可包含错误校正码存储器,且所述块可寻址非易失性存储装置可配置成在与所述控制器存储缓冲器相关联的所述资料中存在错误时向所述中央处理单元发送错误讯息事务层数据包(error message transaction layer packet)。
所述中央处理单元可在所述随机存取存储器中产生控制器存储缓冲器高速缓存数据结构,且所述控制器存储缓冲器高速缓存数据结构可包含对应的所述控制器存储缓冲器和在所述控制器存储缓冲器中存储高速缓存数据的位置的相关信息。
所述主机装置可包含以下各项中的至少一个:服务器计算机、台式计算机、膝上型计算机、平板计算机、照相机或移动电话。
所述PCIe交换机可配置成将接收自每一所述主机装置的配置、存储器或讯息请求事务层数据包(message request transaction layer packet,TLP)中的至少一种,复位向到所述中央处理单元,且所述中央处理单元配置成处理所述配置、存储器或讯息请求事务层数据包中的至少一种。
所述中央处理单元可配置成将配置完成(configuration completion)、存储器读取完成(memory read completion)或讯息请求事务层数据包(TLP)中的至少一种发送到所述一或多个主机装置。
所述中央处理单元可配置成将讯息标志中断(message signaled interrupts)发送到所述一或多个主机装置中的至少一个以告知所述主机装置对应的所述永久性存储器控制器数据结构发生了热插入或热移除。
所述永久性存储器控制器数据结构可进一步包含配置空间数据结构和存储器空间数据结构。
所述配置空间数据结构可配置成,存储所述配置写入请求事务层数据包(configuration write request transaction layer packets)的有效负载(payloads)且提供所述配置读取请求事务层数据包(configuration read request transaction layerpackets)所请求的数据。
所述存储器空间数据结构可针对给定的所述永久性存储器控制器数据结构,记录所述高速缓存于所述随机存取存储器中的位置的相关信息,而所述位置存储用于至少一个所述块可寻址非易失性存储装置的数据。
NVMe(Non-Volatile Memory Express)原子写入单元电力故障(Atomic WriteUnit Power Fail)参数可配置成大于或等于所述中央处理单元页面大小,从而让所述中央处理单元页面大小的NVM块,在发生电力故障或错误状态之后,可被完全地覆写,抑或保留旧内容。
所述中央处理单元可包含将地址空间划分为页面的存储器管理单元(memorymanagement unit,MMU),所述随机存取存储器中的所述高速缓存可划分为页面,且所述高速缓存的页面大小可与所述存储器管理单元所使用的页面大小相同。
所述中央处理单元可产生包含以下各项的所述存储器空间数据结构:最近最少使用(least-recently-used,LRU)的脏(dirty)随机存取存储器页面的列表、最近最少使用的清洁(clean)随机存取存储器页面的列表以及空闲(free)随机存取存储器页面的列表。
所述接口交换机可包含PCIe交换机。所述中央处理单元和所述PCIe交换机可配置成根据高速缓存管理程序来管理所述高速缓存,所述高速缓存管理程序包含:在确定无空闲随机存取存储器页面可用但存在至少一个清洁随机存取存储器页面后,从所述存储器空间中移除最近最少使用的清洁随机存取存储器页面并将所述随机存取存储器页面移动到所述空闲随机存取存储器页面的列表。
所述块可寻址非易失性存储装置可包含NVMe固态驱动器,且所述高速缓存管理程序可包含:在确定空闲随机存取存储器页面的数目小于或等于预定下限后,将块写入请求提交到所述NVMe固态驱动器,其中每一所述块写入请求包含从所述最近最少使用的脏随机存取存储器页面的列表移除且标记为忙(busy)的最近最少使用的脏随机存取存储器页面,且所选择的所述块写入请求的数目可使得所述忙随机存取存储器页面的数目加上空闲随机存取存储器页面的数目大于或等于预定上限。
所述高速缓存管理程序可包含:在所述块写入请求成功完成之后,将所述忙随机存取存储器页面标记为清洁,且除非所述随机存取存储器页面不再在所述存储器空间中,否则将所述随机存取存储器页面添加到所述最近最少使用的清洁随机存取存储器页面的列表的顶部,且如果所述清洁随机存取存储器页面不再在所述存储器空间中,那么将所述随机存取存储器页面添加到所述空闲随机存取存储器页面的列表。
所述接口交换机可包含PCIe交换机,块可寻址非易失性存储装置可包含NVMe固态驱动器,且所述中央处理单元和所述PCIe交换机可配置成根据高速缓存管理程序来管理所述高速缓存,所述高速缓存管理程序包含:接收存储器请求事务层数据包(memory requesttransaction layer packet);基于所述存储器请求事务层数据包而产生一或多个页面粒度(page-grained)的子请求;对于每一所述子请求,在所述高速缓存未命中时,如果没有空闲随机存取存储器页面或清洁随机存取存储器页面,那么等待直到空闲随机存取存储器页面可用为止,且如果空闲随机存取存储器页面可用,那么从所述空闲随机存取存储器页面的列表中移除随机存取存储器页面,将所述随机存取存储器页面标记为忙,并插入到所述存储器空间中,且将具有所述随机存取存储器页面的块读取请求提交到所述NVMe固态驱动器。
所述高速缓存管理程序可包含:在读取未命中的情况下,在所述块读取请求成功完成时,将所述随机存取存储器页面标记为清洁,并添加到所述最近最少使用的清洁随机存取存储器页面的列表的尾部,且产生具有来自所述随机存取存储器页面的请求数据作为有效负载的完成事务层数据包(completion transaction layer packet)。
所述高速缓存管理程序可包含:在写入未命中的情况下,在所述块读取请求成功完成时,将写入数据复制到所述随机存取存储器页面,将所述随机存取存储器页面标记为脏,并添加到所述最近最少使用的脏随机存取存储器页面的列表的尾部。
所述高速缓存管理程序可包含:在忙页面上写入命中的情况下,等待直到所述忙页面不忙为止,且在脏页面或清洁页面上写入命中的情况下,将写入数据复制到所述高速缓存的随机存取存储器页面。
所述高速缓存管理程序可包含:在清洁随机存取存储器页面上写入命中的情况下,将所述随机存取存储器页面标记为脏,并将所述随机存取存储器页面移动到所述最近最少使用的脏随机存取存储器页面的列表的尾部。
所述高速缓存管理程序可包含:在读取命中的情况下,产生具有来自所述高速缓存的随机存取存储器页面的请求数据作为有效负载的完成事务层数据包。
在另一大体方面,用于管理软件定义的永久性存储器的系统包含:管理中央处理单元(management central processing unit,MCPU);一或多个第一输入/输出端口,配置成容纳一或多个各自具有随机存取存储器(RAM)的随机存取存储器模块,其中所述一或多个第一输入/输出端口电耦合到所述管理中央处理单元可存取的存储器总线;以及一或多个第二输入/输出端口,配置成容纳一或多个非易失性存储装置。系统包含接口交换机,所述接口交换机包括一或多个上游端口和一或多个下游端口,其中所述接口交换机配置成经由连接到所述一或多个上游端口的一或多个第一数据链路与一或多个主机装置通信,且经由连接到所述一或多个下游端口的一或多个第二数据链路与一或多个非易失性存储装置通信,其中所述管理中央处理单元和所述接口交换机配置成针对所述每一主机装置产生与对应的所述主机装置相关联的永久性存储器控制器数据结构,且所述永久性存储器控制器数据结构配置成使得所述主机装置能够使用设计成存取永久性存储器的命令,经由所述一或多个第一数据链路来存取所述一或多个非易失性存储装置。所述管理中央处理单元配置成初始化所述接口交换机,且所述管理中央处理单元和所述接口交换机配置成使用所述随机存取存储器的至少一部分作为高速缓存来暂时地存储来自所述一或多个非易失性存储装置的读取数据或意图永久地存储在所述一或多个非易失性存储装置中的写入数据中的至少一个。
所述实施方案可包含以下特征中的一或多个。来自所述主机装置的所述命令包括设计成存取字节可寻址永久性存储器模块的命令。
所述第一数据链路和所述第二数据链路可包含以下各项中的一或多个:PCIe链路、ThunderboltTM链路、NVLink、CCIX链路、OpenCAPI链路或Gen-Z链路。
在一些实例中,所述第一数据链路和所述第二数据链路包括PCIe链路,且所述接口交换机包含PCIe交换机。
所述系统可包含电力故障检测器,其配置成检测电力故障且产生指示电力故障的中断信号。
所述管理中央处理单元可配置成在接收指示电力故障的中断信号后执行紧急关机程序,所述紧急关机程序包含将所述高速缓存的数据清空到所述一或多个非易失性存储装置。
所述紧急关机程序可包含停用与所述每一主机装置相关联的所述PCIe链路以防止经由所述PCIe链路从所述主机装置接收额外数据。
所述一或多个非易失性存储装置可与使用随机存取存储器所实施的一或多个写入高速缓存相关联,且所述紧急关机程序可包含停用所述一或多个写入高速缓存。
所述紧急关机程序可包含将存储器写入事务层数据包的写入数据清空到PCI存储器空间。
所述紧急关机程序可包含将所述PCI存储器空间中的数据清空到至少一个对应的所述非易失性存储装置。
所述紧急关机程序可包含将所述控制器存储缓冲器高速缓存中的数据清空到至少一个对应的所述非易失性存储装置。
所述管理中央处理单元可使用PCIe链路电耦合到PCIe交换机。
所述系统可包含超级电容器,以在所述紧急关机程序期间向以下各项中的至少一个提供电力:所述管理中央处理单元、所述随机存取存储器、所述接口交换机或所述非易失性存储装置。
所述非易失性存储装置中的至少一个中的每一个可包含使用动态随机存取存储器所实施的控制器存储缓冲器(CMB),所述控制器存储缓冲器的一部分可配置为控制器存储缓冲器高速缓存,且所述管理中央处理单元和所述接口交换机可配置成使用所述高速缓存和所述控制器存储缓冲器高速缓存来暂时地存储所述读取数据和/或所述写入数据。
所述控制器存储缓冲器可包含错误校正码存储器,且所述非易失性存储装置可配置成在与所述控制器存储缓冲器相关联的数据中存在错误时向所述管理中央处理单元发送错误讯息事务层数据包。
所述管理中央处理单元可在所述随机存取存储器中产生控制器存储缓冲器高速缓存数据结构,且所述控制器存储缓冲器高速缓存数据结构可包含对应的所述控制器存储缓冲器和在所述控制器存储缓冲器中存储高速缓存数据的位置的相关信息。
所述主机装置可包含服务器计算机、台式计算机、膝上型计算机、平板计算机、照相机或移动电话。
所述PCIe交换机可配置成将配置、存储器或讯息请求事务层数据包(TLP)中的至少一种从连接到对应的所述主机装置的所述上游端口中的每一个,复位向到所述管理中央处理单元,且所述管理中央处理单元可配置成处理所述配置、存储器或讯息请求事务层数据包中的至少一种。
所述管理中央处理单元可配置成将配置完成、存储器读取完成或讯息请求事务层数据包(TLP)中的至少一种,发送到所述一或多个主机装置。
所述管理中央处理单元可配置成将讯息标志中断发送到所述一或多个主机装置中的至少一个以告知所述主机装置对应的所述永久性存储器控制器数据结构发生了热插入或热移除。
所述管理中央处理单元可配置成针对每一所述永久性存储器控制器数据结构,在所述随机存取存储器中产生配置空间数据结构和存储器空间数据结构。
所述配置空间数据结构可配置成存储所述配置写入请求事务层数据包的有效负载且提供所述配置读取请求事务层数据包所请求的数据。
所述存储器空间数据结构可针对给定的所述永久性存储器控制器数据结构,记录所述高速缓存的于所述随机存取存储器中的位置的相关信息,而所述位置存储用于至少一个所述非易失性存储装置的数据。
NVMe原子写入单元电力故障参数可经配置,使得其值大于或等于所述管理中央处理单元页面大小,从而让所述管理中央处理单元页面大小的NVM块,在发生电力故障或错误状态之后,可被完全地覆写,抑或保留旧内容。
所述设计成存取永久性存储器的命令可包含设计成存取字节可寻址存储器的命令。
在另一大体方面,用于管理软件定义的永久性存储器的设备包含:管理中央处理单元(MCPU);一或多个第一输入/输出端口,配置成容纳一或多个各自具有随机存取存储器(RAM)的随机存取存储器模块,其中一或多个第一输入/输出端口电耦合到所述管理中央处理单元可存取的存储器总线;以及一或多个第二输入/输出端口,配置成容纳一或多个非易失性存储装置,其中所述管理中央处理单元配置成经由PCIe链路电耦合到所述一或多个非易失性存储装置。设备包含PCIe交换机,所述PCIe交换机配置成经由一或多个PCIe链路与一或多个主机装置通信,其中所述管理中央处理单元和所述PCIe交换机配置成针对每一所述主机装置产生与对应的所述主机装置相关联的永久性存储器控制器数据结构,且所述永久性存储器控制器数据结构配置成使得所述主机装置能够使用设计成存取永久性存储器的命令,经由所述PCIe链路来存取所述一或多个非易失性存储装置。所述管理中央处理单元配置成初始化所述PCIe交换机,且所述管理中央处理单元和所述PCIe交换机配置成使用所述随机存取存储器的至少一部分作为高速缓存来暂时地存储来自所述一或多个非易失性存储装置的读取数据或意图永久地存储在所述一或多个非易失性存储装置中的写入数据中的至少一个。
所述实施方案可包含以下特征中的一或多个。所述管理中央处理单元可配置成在接收指示电力故障的中断信号后执行紧急关机程序,所述紧急关机程序包含将所述高速缓存的数据清空到所述一或多个非易失性存储装置。
在另一大体方面,用于管理软件定义的永久性存储器的设备包含:印刷电路板;管理中央处理单元(MCPU),安装在所述印刷电路板上;至少一个双列直插式存储器模块(dualin-line memory module,DIMM)插槽,配置成容纳至少一个包括随机存取存储器(RAM)的双列直插式存储器模块,其中所述至少一个双列直插式存储器模块插槽电耦合到所述管理中央处理单元可存取的存储器总线;以及至少一个PCIe插槽,配置成容纳至少一个NVMe固态驱动器。设备包含PCIe交换机,所述PCIe交换机包括至少一个上游端口和至少一个下游端口,其中所述PCIe交换机配置成经由电耦合到所述至少一个上游端口的至少一个PCIe链路与至少一个主机装置通信,且经由电耦合到所述至少一个下游端口的至少一个PCIe链路与所述至少一个NVMe固态驱动器通信。所述管理中央处理单元和所述PCIe交换机配置成针对所述至少一个主机装置中的每一个产生与对应的所述主机装置相关联的永久性存储器控制器数据结构,且所述永久性存储器控制器数据结构包括一数据结构,配置成使得所述主机装置能够使用设计成存取非易失性双列直插式存储器模块的命令,经由所述至少一个PCIe链路来存取所述至少一个NVMe固态驱动器。所述管理中央处理单元配置成初始化所述PCIe交换机,且所述管理中央处理单元和所述PCIe交换机配置成使用所述随机存取存储器的至少一部分作为高速缓存来暂时地存储来自所述至少一个NVMe固态驱动器的读取数据或意图永久地存储在所述至少一个NVMe固态驱动器中的写入数据中的至少一个。
所述实施方案可包含以下特征中的一或多个。所述管理中央处理单元可包含将地址空间划分为页面的存储器管理单元(MMU),所述随机存取存储器中的所述高速缓存可划分为页面,且所述高速缓存的页面大小可与所述存储器管理单元所使用的页面大小相同。
所述管理中央处理单元可产生包含以下各项的存储器空间数据结构:最近最少使用(LRU)的脏随机存取存储器页面的列表、最近最少使用的清洁随机存取存储器页面的列表以及空闲随机存取存储器页面的列表。
所述管理中央处理单元和所述PCIe交换机可配置成根据高速缓存管理程序来管理所述高速缓存,所述高速缓存管理程序包含:在确定无空闲随机存取存储器页面可用但存在至少一个清洁随机存取存储器页面后,从存储器空间中移除最近最少使用的清洁随机存取存储器页面并将随机存取存储器页面移动到所述空闲随机存取存储器页面的列表。
所述高速缓存管理程序可包含:在确定空闲随机存取存储器页面的数目小于或等于预定下限后,将写入块请求提交到所述NVMe固态驱动器,其中每一所述写入块请求包含从所述最近最少使用的脏随机存取存储器页面的列表移除且标记为忙的最近最少使用的脏随机存取存储器页面,且所选择的所述写入块请求的数目可使得忙随机存取存储器页面的数目加上空闲随机存取存储器页面的数目大于或等于预定上限。
所述高速缓存管理程序可包含:在所述块写入请求成功完成之后,将所述忙随机存取存储器页面标记为清洁,且除非所述随机存取存储器页面不再在所述存储器空间中,否则将所述随机存取存储器页面添加到所述最近最少使用的清洁随机存取存储器页面的列表的顶部,且如果所述清洁随机存取存储器页面不再在所述存储器空间中,那么将所述随机存取存储器页面添加到所述空闲随机存取存储器页面的列表。
所述管理中央处理单元和所述PCIe交换机可配置成根据高速缓存管理程序来管理所述高速缓存,所述高速缓存管理程序包含:接收存储器请求事务层数据包;基于所述存储器请求事务层数据包而产生一或多个页面粒度的子请求;以及对于每一所述子请求,在所述高速缓存未命中时,如果没有空闲随机存取存储器页面或清洁随机存取存储器页面,那么等待直到空闲随机存取存储器页面可用为止,且如果空闲随机存取存储器页面可用,那么从所述空闲随机存取存储器页面的列表中移除随机存取存储器页面,将所述随机存取存储器页面标记为忙,并插入到存储器空间中,且将具有所述随机存取存储器页面的块读取请求提交到所述NVMe固态驱动器。
所述高速缓存管理程序可包含:在读取未命中的情况下,在所述块读取请求成功完成时,将所述随机存取存储器页面标记为清洁,并添加到所述最近最少使用的清洁随机存取存储器页面的列表的尾部,且产生具有来自所述随机存取存储器页面的请求数据作为有效负载的完成事务层数据包。
所述高速缓存管理程序可包含:在写入未命中的情况下,在所述块读取请求成功完成时,将写入数据复制到所述随机存取存储器页面,将所述随机存取存储器页面标记为脏,并添加到所述最近最少使用的脏随机存取存储器页面的列表的尾部。
所述高速缓存管理程序可包含:在忙页面上写入命中的情况下,等待直到忙页面不忙为止,且在脏页面或清洁页面上写入命中的情况下,将写入数据复制到所述高速缓存的随机存取存储器页面。
所述高速缓存管理程序可包含:在清洁随机存取存储器页面上写入命中的情况下,将所述随机存取存储器页面标记为脏,并将所述随机存取存储器页面移动到所述最近最少使用的脏随机存取存储器页面的列表的尾部。
所述高速缓存管理程序可包含:在读取命中的情况下,产生具有来自所述高速缓存的随机存取存储器页面的请求数据作为有效负载的完成事务层数据包。
在另一大体方面,用于管理软件定义的永久性存储器的设备包含:至少一个处理器;以及接口交换机,所述接口交换机配置成经由第一数据链路电耦合到至少一个主机装置,其中至少一个所述处理器和所述接口交换机配置成产生数据结构以使得在所述主机装置上执行的应用程序能够使用配置成存取字节可寻址存储器装置的第一命令来存取经由第二数据链路电耦合到所述接口交换机或至少一个所述处理器的至少一个非易失性块可寻址存储装置,且使用随机存取存储器作为高速缓存。至少一个所述处理器配置成从所述主机装置接收所述第一命令,产生配置成存取至少一个所述非易失性块可寻址存储装置的第二命令,且将所述第二命令发送到至少一个所述非易失性块可寻址存储装置。
所述实施方案可包含以下特征中的一或多个。所述第一数据链路可包含PCIe链路,所述第二数据链路可包含PCIe链路,且所述至少一个非易失性块可寻址存储装置可包含至少一个NVMe固态驱动器。
所述第一命令可配置成存取非易失性双列直插式存储器模块。
所述数据结构可包含配置空间数据结构,所述配置空间数据结构配置成存储配置写入请求事务层数据包的有效负载且提供配置读取请求事务层数据包所请求的数据。
所述数据结构可包含存储器空间数据结构,所述存储器空间数据结构记录充当所述高速缓存的所述随机存取存储器中的地址的相关信息,所述随机存取存储器中的地址与至少一个所述非易失性块可寻址存储装置中的地址相对应。
在另一大体方面,用于管理软件定义的永久性存储器的方法包含:在中央处理单元处,产生一数据结构使得主机装置能够使用设计成存取永久性存储器的命令来存取一或多个非易失性存储装置,其中所述数据结构包含高速缓存地址与所述一或多个非易失性存储装置中的地址之间的映像的相关信息,且所述高速缓存地址与随机存取存储器的地址相对应;以及在所述中央处理单元处,接收所述主机装置的第一读取命令,其中所述第一读取命令设计成从所述永久性存储器的第一地址检索数据,随后基于所述高速缓存地址与所述一或多个非易失性存储装置中的所述地址之间的所述映像的所述相关信息而确定与所述永久性存储器的所述第一地址相对应的所述高速缓存的第二地址,并从所述高速缓存的所述第二地址检索数据,且将所述检索到的数据发送到所述主机装置。
所述实施方案可包含以下特征中的一或多个。所述方法可包含:在所述中央处理单元处,接收所述主机装置的第一写入命令,其中所述第一写入命令设计成将数据写入到所述永久性存储器的第三地址,随后基于所述高速缓存地址与所述一或多个非易失性存储装置中的所述地址之间的所述映像的所述相关信息而确定与所述永久性存储器的所述第三地址相对应的所述高速缓存的第四地址,且将所述数据写入到所述高速缓存的所述第四地址。
所述方法可包含:在所述中央处理单元处,在接收指示电力故障的中断信号后执行紧急关机程序,所述紧急关机程序包含将所述高速缓存的数据清空到所述一或多个非易失性存储装置。
在附图和以下描述中阐述以上一或多个方面和实施方案的细节。其它特征、方面以及优点将从描述、图式以及权利要求书变得显而易见。
附图说明
图1为具有永久性存储器的计算系统的实例图。
图2为PCIe交换机的实例图。
图3为系统中所使用的软件模块和数据结构的实例框图。
图4为主机侧软件栈的实例图。
图5为PCIe交换机侧的软件栈的实例图。
图6为绘示如主机所见的实例永久性存储器的实例图。
图7为绘示永久性存储器的地址空间与单一非易失性存储器快速(Non-VolatileMemory Express,NVMe)固态驱动器的地址空间之间的映像的实例图。
图8为绘示永久性存储器的地址空间与多个NVMe固态驱动器的地址空间之间的映像的实例图。
图9为绘示包含随机存取存储器、控制器存储缓冲器以及NVMe固态驱动器的存储装置的层次结构的实例图。
图10为具有永久性存储器的计算系统的实例图。
各图中的相似附图标号指示相似组件。
具体实施方式
本公开描述一种新型计算系统,所述新型计算系统实施软件定义的永久性存储器,且实现以类似于存取字节可寻址永久性存储器(例如非易失性双列直插式存储器模块)的方式对块可寻址存储装置(例如NVMe固态驱动器)进行存取。在主机上执行的应用程序可使用设计用于字节可寻址存储器的命令来与存储器控制器互动,且使用设计用于块可寻址存储装置的命令来与NVMe固态驱动器互动。本发明的新型特征为提供PCIe交换机和管理中央处理单元,所述PCIe交换机和所述管理中央处理单元产生永久性存储器控制器数据结构,用于仿真永久性存储器控制器的功能。这使得主机能够以类似于存取连接到存储器总线的非易失性双列直插式存储器模块的方式存取经由PCIe总线连接到PCIe交换机的NVMe固态驱动器。
系统包含随机存取存储器,所述随机存取存储器的一部分配置为高速缓存,且NVMe固态驱动器用于永久地存储数据。这允许应用程序在比单独使用NVMe固态驱动器更快的速度下、以比单独使用动态随机存取存储器更低的每存储单元成本存取永久性数据存储。可用于系统的永久性存储器的量可通过将更多NVMe固态驱动器经由PCIe总线连接到PCIe交换机而增加,这比将更多非易失性双列直插式存储器模块连接到存储器总线更具成本效益。
在下文中所描述的实例系统使用PCIe链路以用于连接主机和非易失性大量存储装置。然而,本发明也可应用于使用其它类型的数据链路的系统,所述其它类型的数据链路例如ThunderboltTM链路、NVLinkTM、加速器的缓存一致性互连(cachecoherent interconnect for accelerator,CCIX)链路、开放相干加速器处理器接口(opencoherent accelerator processor interface,OpenCAPI)链路或Gen-Z链路。
参看图1,系统100包含永久性存储器管理模块102,所述永久性存储器管理模块102经由一或多个第一数据链路(例如上游PCIe链路108)连接到一或多个上游主机(例如104a、104b、104c以及104d,统称为104),且经由一或多个第二数据链路(例如下游PCIe链路110)连接到一或多个下游永久性大量存储装置,例如NVMe固态驱动器106。在这一实例中,第一数据链路和第二数据链路中的每一个为PCIe链路,但也可为其它类型的数据链路,例如ThunderboltTM链路、NVLinkTM、CCIX链路、OpenCAPI链路或Gen-Z链路。
永久性存储器管理模块102包含PCIe交换机112和管理中央处理单元(MCPU)114。PCIe交换机112包含用于连接到上游PCIe链路108的上游端口,和用于连接到下游PCIe链路110的下游端口。PCIe交换机112从主机104接收命令或指令,且处理命令(或指令)或将命令(或指令)复位向到管理中央处理单元114。管理中央处理单元114根据来自PCIe交换机112的命令(或指令)将写入数据发送到NVMe固态驱动器106或从NVMe固态驱动器106接收读取数据,PCIe交换机112随后从主机104接收命令(或指令)。
管理中央处理单元114可以是例如商用中央处理单元或系统单芯片。管理中央处理单元114执行软件以初始化PCIe交换机112并启用PCIe交换机112的各种功能。在这一实例中,管理中央处理单元114经由PCIe链路118连接到PCIe交换机112。系统100包含随机存取存储器120,管理中央处理单元114可经由存储器总线122而存取。随机存取存储器120可以是例如动态随机存取存储器,且存储器总线122可以是例如DDR、DDR2、DDR3或DDR4存储器总线。随机存取存储器120可具有错误校正码(error correction code,ECC)保护或不具有。
管理中央处理单元114和PCIe交换机112配置成在随机存取存储器120中产生各种数据结构,所述各种数据结构可用于实施永久性存储器管理模块102的功能。数据结构包含例如永久性存储器(persistent memory,PM)控制器数据结构(例如124a、124b、124c以及124d,统称为124),其中每一永久性存储器控制器数据结构124与对应的主机104相关联。举例来说,永久性存储器控制器数据结构124a与主机104a相关联,且永久性存储器控制器数据结构124b与主机104b相关联,等等。永久性存储器控制器数据结构124存储配置数据,使得对应的主机104能够将永久性存储器控制器视作PCIe链路108的端点。管理中央处理单元114还产生可用于将随机存取存储器120的一部分配置为高速缓存的数据结构。
管理中央处理单元114配置成通过其自身或通过使用PCIe交换机112来将事务层数据包(TLP,例如MSI或MSI-X)发送到主机104。这允许告知主机104永久性存储器控制器数据结构124发生了热插入或意外移除。
主机104中的每一个可包含例如服务器计算机、台式计算机、膝上型计算机、平板计算机、照相机或移动电话。在一些实施方案中,每一主机可具有其自身的中央处理单元、随机存取存储器、非易失性存储装置、操作系统以及应用程序。管理中央处理单元114可存取随机存取存储器120,且随机存取存储器120独立于主机104的随机存取存储器。
在一些实施方案中,NVMe固态驱动器106包含非易失性存储器(例如基于NAND的闪存)和动态随机存取存储器。非易失性存储器允许在没有电力时永久地存储数据。在一些实施方案中,动态随机存取存储器的一部分可用于实施控制器存储缓冲器(CMB)116。在这一实例中,控制器存储缓冲器116的一部分配置为控制器存储缓冲器高速缓存。管理中央处理单元114和PCIe交换机112配置成使用高速缓存(使用动态随机存取存储器120来实施)以及可选择地利用控制器存储缓冲器高速缓存来暂时地存储读取数据和/或写入数据。在本文件中,当讲到数据永久地存储在NVMe固态驱动器中时,意味着数据永久地存储在NVMe固态驱动器的非易失性存储器中。
控制器存储缓冲器116受错误校正码保护。如果控制器存储缓冲器116中发生错误校正码错误,那么NVMe固态驱动器106向管理中央处理单元114发送非致命错误讯息事务层数据包,且由高级错误报告(advanced error reporting,AER)的不可校正错误状态寄存器来报告不可校正内部错误状态。识别控制器数据结构(Identify Controller DataStructure)包含NVMe原子写入单元电力故障(atomic write unit power fail,AWUPF)字段,指示写入操作的大小,保证在电力故障或错误状态期间以任何支持的名字空间(namespace)格式在所有名字空间中原子地写入到非易失性存储器。在这一实例中,原子写入单元电力故障字段配置成具有大于或等于管理中央处理单元页面大小的值。因此,在发生电力故障或错误状态之后,MCPU页面大小的非易失性存储器块,可被完全地覆写,抑或保留旧内容。
永久性存储器控制器数据结构124的功能之一允许管理中央处理单元114和/或PCIe交换机112仿真硬件永久性存储器控制器,控制对字节可寻址永久性存储器的存取。从主机104的的角度,主机104以类似于与硬件永久性存储器控制器互动的方式与管理中央处理单元114和/或PCIe交换机112互动(利用存储在永久性存储器控制器数据结构124中的数据)。
PCIe交换机112配置成将配置、存储器以及讯息请求事务层数据包(TLP)从上游端口复位向到管理中央处理单元,以供进一步处理。PCIe交换机112配置成支持停用个别上游端口的链路。这可用于防止在如下文所描述的电力故障的情况下从上游端口接收更多数据。
系统100包含电力故障检测器132用以检测电力故障。在检测电力故障后,电力故障检测器132将不可屏蔽中断(non-maskable interrupt)126发送到管理中央处理单元114,其执行紧急关机程序,所述紧急关机程序包含例如停用与每一主机装置104相关联的上游PCIe链路108以防止经由上游PCIe链路108从主机装置104接收额外数据。紧急关机程序包含将高速缓存的数据清空到NVMe固态驱动器106。系统100包含不断电系统(uninterruptible power supply,UPS)或超级电容器128,其用于在紧急关机程序期间将备份电力提供到PCIe交换机112、管理中央处理单元114、随机存取存储器120以及NVMe固态驱动器106。
在一些实施方案中,管理中央处理单元114或随机存取存储器120可与PCIe交换机112集成。管理中央处理单元114与PCIe交换机112之间的互连可以是不同于PCIe链路的链路。在一些实施方案中,NVMe固态驱动器106(例如经由PCIe链路)直接连接到管理中央处理单元114,而不是连接到PCIe交换机112。
在一些实施方案中,设置一主板,其中PCIe交换机112、管理中央处理单元114、不断电系统或超级电容器128以及电力故障检测器132安装在主板上。主板包含例如双列直插式存储器模块插槽的输入/输出接口,以供用于容纳随机存取存储器120。主板可包含例如PCIe插槽的输入/输出接口,以供用于容纳NVMe固态驱动器106。
设计成存取字节可寻址永久性存储器模块(例如非易失性双列直插式存储器模块)的命令或指令与设计成存取块可寻址存储装置(例如NVMe固态驱动器)的命令或指令之间的差异,简要地描述如下。“块”通常为512字节或大于512字节。以x86中央处理单元为例,在中央处理单元需要从定位于地址X处的永久性存储器读取例如一个字节或四个字节(32位)的数据时,中央处理单元可发出类似于“mov al,X”或“mov eax,X”的命令,其中al和eax为中央处理单元寄存器。命令“mov al,X”和“mov eax,X”两者为设计成存取永久性存储器的命令的实例,且也为字节可寻址命令的实例。
举例来说,在中央处理单元需要从固态驱动器读取一个块(例如512字节)的数据时,中央处理单元可在定位于随机存取存储器中的提交队列(submission queue)中设置64字节命令块(command block),指示读取操作与接收块数据的缓冲存储器,且随后将命令块的位置写入到固态驱动器的提交队列门铃寄存器(submission queue doorbellregister),所述提交队列门铃寄存器也定位于PCI存储器空间中。为响应这类存储器写入,固态驱动器从随机存取存储器读取命令块,将命令辨识为读取操作,将所请求的512字节数据传送到所述命令块中所指示的缓冲存储器,在定位于随机存取存储器中的完成队列(completion queue)中设置指示一个命令或一连串命令完成的16字节数据,且随后将中断发送到中央处理单元。为响应所述中断,中央处理单元处理完成队列中的数据,且随后将最末处理的完成数据的位置写入到固态驱动器的完成队列门铃寄存器(completion queuedoorbell register),所述完成队列门铃寄存器也定位于PCI存储器空间中。
在以上实例中,如果地址X处于与如图6中所绘示的主机相关联的永久性存储器区域中,那么主机操作系统或应用程序200可执行命令“mov eax,X”以便从使用NVMe固态驱动器106所实施的永久性存储器的地址X读取数据。在一些实施方案中,在“mov”指令由x86中央处理单元执行时,取决于如何指定“mov”指令的两个操作数,“mov”指令转换成一或多个存储器读取请求事务层数据包或存储器写入请求事务层数据包。举例来说,“mov eax,X”转换成一或两个存储器读取请求事务层数据包,而“mov X,eax”转换成一或两个存储器写入请求事务层数据包。如果X为4的整倍数,那么仅产生一个存储器请求事务层数据包。设计成存取永久性存储器的命令或指令的额外实例包含“mov”指令的变型,例如设计成将四个字节数据从永久性存储器或易失性存储器移动到MMX寄存器或SSE2寄存器(或反过来)的“movd”指令,以及设计成将八个字节数据从永久性存储器或易失性存储器移动到MMX寄存器或SSE2寄存器(或反过来)的“movq”指令。设计成存取永久性存储器的这些命令或指令也为字节可寻址命令或指令。
在本文件中,取决于上下文,用于特定动作的命令或指令可转换成数个子命令或子指令,一同配置成实现所述动作。因此,执行设计成存取非易失性双列直插式存储器模块的命令或指令可引起产生数个子命令或子指令,例如数个事务层数据包,一同配置成使得主机能够存取非易失性双列直插式存储器模块。
在以上实例中,中央处理单元无法执行“mov eax,X”指令以直接从连接到PCIe总线的NVMe固态驱动器读取块数据。不同大量存储装置具有不同程序设计界面,例如NVMe、SCSI、SATA等。在中央处理单元识别连接到总线的块可寻址大量存储装置时,中央处理单元将使用与大量存储装置相关联的程序设计界面来存取块数据。因此,中央处理单元将使用NVMe程序设计界面来存取NVMe固态驱动器的块数据,且使用SCSI程序设计界面来存取SCSI硬盘驱动器的块数据,等等。
PCI装置归类为数种类别。主机104可读取定位于类型0配置空间标头(Type 0Configuration Space Header)中的类别代码、子类别以及prog-if寄存器,以将一种类别的装置与其它类别的装置区分开来。举例来说,类别代码01h与大量存储装置控制器相对应,在所述类别内,子类别08h与非易失性存储器控制器相对应,且在所述子类别内,prog-if 02h与NVM高速协定相对应。整个PCI类别代码010802h与遵守NVMe协议的大容量非易失性存储器控制器相对应。因此,在主机104将装置识别为与类别代码010802h相关联时,主机104确定所述装置为NVMe固态驱动器或等效物。可于https://wiki.osdev.org/PCI#Class_Codes中找到各种PCI类别代码的列表。
PCI类别代码05h与存储器控制器相对应,在所述类别内,子类别80与“其它”相对应。在一些实施方案中,PCIe交换机112和管理中央处理单元114配置成在与主机104连接后产生与主机104相关联的永久性存储器控制器数据结构124,且向主机104报告由主机104存取的装置为具有类别代码058000h的存储器控制器。管理中央处理单元114和PCIe交换机112以类似于与主机104相关联的虚拟永久性存储器控制器的方式运作,其中与虚拟永久性存储器控制器相关的数据,存储在与主机104相关联的永久性存储器控制器数据结构124中。在主机104上执行的永久性存储器驱动器258(图4)辨识类别代码058000h,且将正存取的装置识别为永久性存储器控制器。如果主机104确定连接到PCIe链路的装置为NVMe固态驱动器,那么主机104将设计用于存取块可寻址存储装置的命令或指令发送到装置。如果主机104确定连接到PCIe链路的装置为永久性存储器控制器,那么主机将设计用于存取字节可寻址永久性存储器模块的命令或指令发送到装置。
永久性存储器控制器数据结构124a所存储的数据,使得PCIe交换机112和管理中央处理单元114能够运作如虚拟永久性存储器控制器以响应从主机104a存取永久性存储器的请求。永久性存储器控制器数据结构124b所存储的数据使得PCIe交换机112和管理中央处理单元114能够运作如虚拟永久性存储器控制器以响应从主机104b存取永久性存储器的请求,等等。
如将在下文更详细地描述,永久性存储器控制器数据结构124a所存储的配置空间数据,使得PCIe交换机112和管理中央处理单元114能够配置与主机104a相关联的虚拟永久性存储器控制器。永久性存储器控制器数据结构124a还存储存储器空间数据,使得PCIe交换机112和管理中央处理单元114能够使用RAM 120的一部分作为高速缓存以用于与主机104a相关联的读取操作和写入操作。永久性存储器控制器数据结构124b所存储的配置空间数据,使得PCIe交换机112和管理中央处理单元114能够配置与主机104b相关联的虚拟永久性存储器控制器。永久性存储器控制器数据结构124b还存储存储器空间数据,使得PCIe交换机112和管理中央处理单元114能够使用RAM 120的一部分作为高速缓存以用于与主机104b相关联的读取操作和写入操作,等等。
在PCIe交换机112和管理中央处理单元114从主机104a接收指令以用于存取与主机104a相关联的第一永久性存储器区域时,PCIe交换机112和管理中央处理单元114存取永久性存储器控制器数据结构124a以确定与主机104a相关联的虚拟永久性存储器控制器的配置,确定哪一NVMe固态驱动器106被映像到第一永久性存储器区域,且确定快取数据在随机存取存储器120中的位置。基于从永久性存储器控制器数据结构124a所获得的信息,PCIe交换机112和管理中央处理单元114运作如虚拟永久性存储器控制器以对来自主机104a的指令作出响应,所述响应包含以下操作中的一或多个:
(i)在读取命中的情况下从随机存取存储器120中的高速缓存检索读取数据;
(ii)在读取未命中的情况下从映像到第一永久性存储器区域的NVMe固态驱动器106检索读取数据,且将读取数据存储在随机存取存储器120中的高速缓存中;
(iii)在写入命中的情况下将写入数据存储到随机存取存储器120中的高速缓存中;
(iv)在写入未命中的情况下将写入数据存储在映像到第一永久性存储器区域的NVMe固态驱动器106中,且将写入数据存储在随机存取存储器120中的高速缓存中;以及
(v)不时地将写入数据从随机存取存储器120中的高速缓存清空到映像到第一永久性存储器区域的NVMe固态驱动器106,尤其是在电力故障的情况下。
类似地,在PCIe交换机112和管理中央处理单元114从主机104b接收指令以用于存取与主机104b相关联的第二永久性存储器区域时,PCIe交换机112和管理中央处理单元114存取永久性存储器控制器数据结构124b以确定与主机104b相关联的虚拟永久性存储器控制器的配置,确定哪一NVMe固态驱动器106被映像到第二永久性存储器区域,且确定快取数据在随机存取存储器120中的位置。基于从永久性存储器控制器数据结构124b所获得的信息,PCIe交换机112和管理中央处理单元114运作如虚拟永久性存储器控制器以对来自主机104b的指令作出响应,所述响应包含以下操作中的一或多个:
(i)在读取命中的情况下从随机存取存储器120中的高速缓存检索读取数据;
(ii)在读取未命中的情况下从映像到第二永久性存储器区域的NVMe固态驱动器106检索读取数据,且将读取数据存储在随机存取存储器120中的高速缓存中;
(iii)在写入命中的情况下将写入数据存储到随机存取存储器120中的高速缓存中;
(iv)在写入未命中的情况下将写入数据存储在映像到第二永久性存储器区域的NVMe固态驱动器106中,且将写入数据存储在随机存取存储器120中的高速缓存中;以及
(v)不时地将写入数据从随机存取存储器120中的高速缓存清空到映像到第二永久性存储器区域的NVMe固态驱动器106,尤其是在电力故障的情况下。
在一些实施方案中,永久性存储器驱动器258为例如在启动期间主机104所执行的一段软件代码。永久性存储器驱动器258检验连接到PCIe接口的装置的PCI类别代码以确定是否有任何装置报告类别代码为058000h。如果永久性存储器驱动器258发现装置(例如永久性存储器控制器数据结构124)具有类别代码058000h,那么永久性存储器驱动器258确定永久性存储器控制器数据结构124与软件永久性存储器控制器相对应,并告知主机操作系统永久性存储器控制器数据结构124可由永久性存储器驱动器258控制。主机104的操作系统或应用程序使用永久性存储器驱动器258来与永久性存储器控制器数据结构124互动,以便存取特定PCI存储器地址空间,所述特定PCI存储器地址空间被分配到永久性存储器控制器数据结构124或与所述永久性存储器控制器数据结构124相关联。下文描述与永久性存储器驱动器258相关的更多细节,参看图4和相关描述。
图2为包含多个输入/输出(input/output,I/O)模块370的PCIe交换机112的实例框图。在这一实例中,PCIe交换机112包含六个输入/输出模块370,但PCIe交换机112也可具有不同数目的输入/输出模块。每一输入/输出模块370可配置为多个用于连接到上游PCIe链路的上游端口,和/或用于连接到下游PCIe链路的下游端口。在这一实例中,每一输入/输出模块370包含四个x4端口:端口1、端口2、端口3以及端口4。每一端口可配置为上游端口或下游端口。端口可经组合,使得输入/输出模块370还可配置成具有两个x8端口或一个x16端口(上游或下游)。每一端口包含输入队列372和输出队列374。输入/输出模块370内的端口共享随机存取存储器376,存储接收到的封包数据。输入/输出模块370经由纵横式模块378互连。从输入/输出模块370的输入队列372接收到的任何事务层数据包(TLP)可经由纵横式模块378传输到相同输入/输出模块370或其它输入/输出模块370的输出队列374。在图1中,管理中央处理单元114经由PCIe链路118连接到PCIe交换机112,且PCIe链路118连接到某一输入/输出模块370中的某一端口。连接到管理中央处理单元114的端口被称作管理端口。
在主机104经由上游端口将配置、存储器或讯息请求事务层数据包发送到PCIe交换机112时,PCIe交换机112将中断发送到管理中央处理单元114。地址陷阱(address trap)由管理中央处理单元114预先设置,以便PCIe交换机112将存储器请求事务层数据包从主机104复位向到管理中央处理单元114。纵横式模块378通过由PCIe规范定义的规则来路由接收到的事务层数据包(除了待复位向到管理中央处理单元114的事务层数据包以外)。PCIe规范定义如何路由各种类型的事务层数据包,例如配置请求/完成事务层数据包、存储器请求/完成事务层数据包以及讯息请求事务层数据包。
举例来说,假设主机104意欲将数据写入到永久性存储器中的地址ADDR_1,且地址ADDR_1映像到连接到输入/输出模块2的端口1的第二NVMe固态驱动器106。主机104并没看见NVMe固态驱动器106且并不知晓地址ADDR_1映像到NVMe固态驱动器。实际上,主机104将地址ADDR_1识别为属于与具有PCI类别代码058000h的永久性存储器控制器数据结构124相关联的永久性存储器区域,其中与永久性存储器控制器数据结构124的互动由永久性存储器驱动器258控制。主机104存取地址ADDR_1与存取使用非易失性双列直插式存储器模块所实施的永久性存储器之类的方式相同。
在以上实例中,为将数据写入到永久性存储器中的地址ADDR_1,首先将数据写入到随机存取存储器120中的高速缓存,随后从高速缓存写入到NVMe固态驱动器106。在这一过程中,管理中央处理单元114设置地址陷阱,使其与可预取永久性存储器区域匹配。然后,如果存储器请求事务层数据包具有定位于所述区域中的地址ADDR_1,那么纵横式模块378将所述事务层数据包路由到管理端口,而与之连接的管理中央处理单元114,随后通过某个映像来负责存取与地址ADDR_1相关联的第二NVMe固态驱动器的某个块。配置请求事务层数据包和讯息请求事务层数据包以及命中地址陷阱的存储器请求事务层数据包会被转发到管理中央处理单元114。
图3为系统100中使用的软件模块和数据结构的框图。由管理中央处理单元114执行软件模块。在主机104上执行的主机操作系统或应用程序200使得主机104的中央处理单元将配置、存储器和/或讯息请求事务层数据包202发送到PCIe交换机112,其中配置、存储器或讯息请求事务层数据包存储在随机存取存储器120中或存储在PCIe交换机112中。举例来说,管理中央处理单元114预先在随机存取存储器120中设置缓冲存储器,且配置PCIe交换机112以使用所述缓冲存储器来存储需要待复位向到管理中央处理单元114的事务层数据包。
事务层数据包复位向模块204提取各种请求事务层数据包并由其自身处理讯息请求事务层数据包,举例来说,在某些情况下,讯息请求事务层数据包会被忽略。事务层数据包复位向模块204为管理中央处理单元114所执行的软件模块。在PCIe交换机112从任何主机104接收事务层数据包时,PCIe交换机112告知管理中央处理单元114新事务层数据包已到达,且事务层数据包复位向模块204检验事务层数据包以确定应将所述事务层数据包复位向到何处。事务层数据包复位向模块204将配置事务层数据包236复位向到PCI装置合成模块206,且将存储器事务层数据包238复位向到高速缓存管理模块208。
PCI装置合成模块206针对每一主机104产生228存储在随机存取存储器120中的永久性存储器控制器数据结构212。永久性存储器控制器数据结构212所存储的信息可用于软件定义的永久性存储器的操作。PCI装置合成模块206还产生存储在随机存取存储器120中的配置空间数据结构214和存储器空间数据结构216。如下文所描述,配置空间数据结构和存储器空间数据结构可以是永久性存储器控制模块数据结构的部分。
永久性存储器控制器数据结构212所含有的信息可使得管理中央处理单元114和/或PCIe交换机112能够仿真永久性存储器控制器且以类似于实体永久性存储器控制器与主机104互动的方式来与对应的主机104互动。基于永久性存储器控制器数据结构212中所含有的信息,管理中央处理单元114和PCIe交换机112运作如软件永久性存储器控制器或虚拟永久性存储器控制器。即使数据永久地存储在一或多个块可寻址非易失性存储装置(例如NVMe固态驱动器106)中,主机104与管理中央处理单元114和/或PCIe交换机112所实施的软件永久性存储器控制器或虚拟永久性存储器控制器互动的方式仍与控制字节可寻址永久性存储器(例如非易失性双列直插式存储器模块)的实体永久性存储器控制器互动的方式相同。即使数据实际上永久地存储在一或多个块可寻址固态驱动器中,系统100仍使得主机104能够如同其存取字节可寻址永久性存储器一般地运作。因此,由系统100所实施的永久性存储器被称作软件定义的永久性存储器。
为了将管理中央处理单元114和/或PCIe交换机112运作如虚拟永久性存储器控制器,永久性存储器控制器数据结构212所存储的信息通常可用于实体永久性存储器控制器。这类信息存储在例如配置空间数据结构214和存储器空间数据结构216中。
永久性存储器控制模块数据结构的实例如下:
在以上实例中,“config”为配置空间数据结构的指针,“mem”为存储器空间数据结构的指针,且“host_port”指示与这一数据结构相关联的上游端口。
配置空间数据结构的实例如下:
在以上实例中,根据以下各项来格式化“header”、“pcie_cap”、“power_mgmt”以及“aer_cap”:PCIe类型0配置空间标头、PCIe能力结构、PCI电源管理能力结构以及PCIe高级错误报告扩展能力结构,如PCI-SIG(https://pcisig.com)公布的PCI 基本规范修订版4.0中所定义。
举例来说,PCIe类型0配置空间标头可包含以下各项中的一或多个:装置ID、供货商ID、状态、命令、类别代码、版本ID、BIST、标头类型、主延时定时器、高速缓存线大小、基地址寄存器、卡总线(Cardbus)CIS指针、子系统ID、子系统供货商ID、扩展ROM基地址、能力指针、Max_Lat、Min_Gnt、中断引脚(Interrupt Pin)以及中断线(Interrupt Line)。举例来说,PCIe能力结构可包含以下各项中的一或多个:PCI高速能力寄存器、下一Cap指针(NextCap Pointer)、PCI高速Cap ID(PCI Express Cap ID)、装置能力、装置状态、装置控制、链路能力、链路状态、链路控制、插槽能力、插槽状态、插槽控制、根能力(Root Capability)、根控制(Root Control)以及根状态(Root Status)。举例来说,PCI电源管理能力结构可包含以下各项中的一或多个:电源管理能力(Power Management Capabilities,PMC)、下一能力ID、能力ID以及电源管理控制/状态寄存器(Power Management Control/StatusRegister,PMCSR)。举例来说,PCIe高级错误报告扩展能力结构可包含以下各项中的一或多个:PCI高速扩展能力标头、不可校正错误状态寄存器、不可校正错误屏蔽寄存器(Uncorrectable Error Mask Register)、不可校正错误严重程度寄存器(UncorrectableError Severity Register)、可校正错误状态寄存器、可校正错误屏蔽寄存器(Correctable Error Mask Register)、高级错误能力和控制寄存器、标头日志寄存器(Header Log Register)、根错误命令、根错误状态、错误源识别寄存器、可校正错误源识别寄存器以及TLP前缀日志寄存器(Prefix Log Register)。存储在以下各项中的信息可根据PCIe基本规范来使用:配置空间标头、PCIe能力结构、PCI电源管理能力结构以及PCIe高级错误报告扩展能力结构。
存储器空间数据结构的实例如下:
在这一实例中,“bdev_num”为底层块装置的装置编号,其用于获得block_device结构的指针;“bdev”为通过传递bdev_num而从blkdev_open_by_dev(林那克斯内核(Linuxkernel)应用程序编程接口(application programming interface,API))的调用所返回的指标;且“cache”为基数树,其用作高速缓存。
配置空间数据结构214存储配置写入请求事务层数据包的有效负载,且供应配置读取请求事务层数据包所请求的数据。存储器空间数据结构216记录其映像到哪一块装置、快取数据在随机存取存储器120中的位置,以及可用于高速缓存管理模块208的任何其它信息。PCI装置合成模块206可存取到配置空间数据结构214,产生配置完成事务层数据包以响应配置请求事务层数据包。
合成的装置指配模块210确定哪一永久性存储器控制器数据结构212与哪一主机104相关联或附接到哪一主机104,且产生234MSI事务层数据包或MSI-X事务层数据包240以告知主机永久性存储器控制器数据结构212发生了热插入或意外移除。PCI装置合成模块206、高速缓存管理模块208以及合成的装置指配模块210产生234存储在PCIe交换机112内部或在随机存取存储器120中的配置完成、存储器读取完成或MSI事务层数据包或MSI-X事务层数据包240。PCIe交换机112继而将每一事务层数据包发送到事务层数据包的“请求者ID”(requester ID)字段所指定的目标主机。
NVMe驱动器220与NVMe固态驱动器106互动以使得NVMe固态驱动器106将数据传送到(随机存取存储器120中的)高速缓存或从所述高速缓存传送数据,所述高速缓存与NVMe固态驱动器106相关联。软件独立磁盘冗余阵列(redundant array of independentdisks,RAID)驱动器222(可有可无)提供软件RAID之启用。NVMe控制器存储缓冲器高速缓存驱动器224提供控制器存储缓冲器高速缓存功能之启用。控制器存储缓冲器高速缓存数据结构218存储在随机存取存储器120中,且记录其与哪一控制器存储缓冲器116相关联、快取数据在控制器存储缓冲器116中的位置以及可用于NVMe控制器存储缓冲器高速缓存驱动器224的任何其它信息。
为响应存储器请求事务层数据包,高速缓存管理模块208存取226永久性存储器控制器数据结构212的存储器空间数据结构216,基于存储器空间数据结构216中的信息从随机存取存储器(其充当高速缓存)中的对应区域检索数据,且产生存储器读取完成事务层数据包。在高速缓存未命中或高速缓存回写的情况下,高速缓存管理模块208将块输入/输出请求发送到下部层,例如软件RAID驱动器222或NVMe控制器存储缓冲器高速缓存驱动器224。
在实际的永久性存储是由两个或大于两个NVMe固态驱动器106所提供时就会使用软件RAID驱动器222。软件RAID驱动器222根据RAID级别向NVMe控制器存储缓冲器高速缓存驱动器224发送块输入/输出请求230。
在NVMe固态驱动器106支持控制器存储缓冲器时就会使用NVMe控制器存储缓冲器高速缓存驱动器224和控制器存储缓冲器高速缓存数据结构218。在这种情况下,NVMe控制器存储缓冲器高速缓存驱动器224使用控制器存储缓冲器116作为高速缓存来履行来自上部层的请求,所述上部层例如高速缓存管理模块208或软件RAID驱动器222。
不可屏蔽中断(non-maskable interrupt,NMI)处理程序232由管理中央处理单元114在系统电力故障后调用,不可屏蔽中断处理程序232在系统电力故障后执行紧急关机。
下文描述用于初始化PCIe交换机112并操作图3中所绘示的各种软件模块的程序。
步骤1:PCI装置合成模块206产生永久性存储器控制器数据结构212以及相关联的配置空间数据结构214和存储器空间数据结构216。
步骤2:合成的装置指配模块210使永久性存储器控制器数据结构212与主机104相关联,且产生234并发送MSI事务层数据包或MSI-X事务层数据包240到主机104以供热插入通知。
步骤3:为响应热插入通知,主机操作系统或应用程序200将一连串配置请求事务层数据包发送到永久性存储器控制器数据结构212。
步骤4:PCIe交换机112将配置请求事务层数据包复位向到管理中央处理单元114。
步骤5:在管理中央处理单元114处,事务层数据包复位向模块204将配置请求事务层数据包236分派到PCI装置合成模块206。
步骤6:在主机操作系统或应用程序200存取与永久性存储器控制器数据结构212相关联的永久性存储器区域时,主机操作系统或应用程序200将一连串存储器请求事务层数据包(意图用于永久性存储器控制器数据结构212)发送到PCIe交换机112。存储器请求事务层数据包可包含例如存储器读取请求事务层数据包和存储器写入请求事务层数据包。
步骤7:PCIe交换机112将存储器请求事务层数据包复位向到管理中央处理单元114。
步骤8:在管理中央处理单元114处,事务层数据包复位向模块204将存储器请求事务层数据包238发送到高速缓存管理模块208。
步骤9:对于每一配置写入请求事务层数据包236,PCI装置合成模块206将写入数据存储到永久性存储器控制器数据结构212的配置空间数据结构214,且产生234不具有有效负载的完成事务层数据包240到主机操作系统或应用程序200。对于每一配置读取请求事务层数据包,PCI装置合成模块206产生234具有有效负载的完成事务层数据包240到主机操作系统或应用程序200,所述有效负载由永久性存储器控制器数据结构212的配置空间数据结构214所供应。呈组合形式的基地址寄存器(BAR)0和基地址寄存器1指示永久性存储器区域在主机的地址域(address domain)中所定位的位置,且PCI装置合成模块206配置PCIe交换机112以实现意图用于永久性存储器区域的存储器请求事务层数据包的复位向。
在常规的PCI装置中,操作系统可通过将配置命令写入到PCI控制器以规划基地址寄存器(BAR)来通知PCI装置其地址映像。在系统100中,每一永久性存储器控制器数据结构124具有其自身的基地址寄存器,定义于配置空间数据结构214中。举例来说,如果存在与四个永久性存储器控制器数据结构124a到永久性存储器控制器数据结构124d相关联的四个主机104a到主机104d,那么永久性存储器控制器数据结构124a具有第一基地址寄存器,指示与永久性存储器控制器数据结构124a相关联的主机104a的地址范围,且永久性存储器控制器数据结构124b具有第二基地址寄存器,指示与永久性存储器控制器数据结构124b相关联的主机104b的地址范围,等等。
步骤10:存储器写入请求事务层数据包包含标头和有效负载(写入数据)。标头具有意图存储有效负载的目的地地址的相关信息。随机存取存储器120充当高速缓存,且存储器空间数据结构216具有高速缓存地址与NVMe固态驱动器106中的地址之间的映像的相关信息。对于请求将数据存储在可预取永久性存储器区域的地址ADDR1_PM处的存储器写入请求事务层数据包,高速缓存管理模块208存取存储器空间数据结构216以确定与地址ADDR1_PM相对应的随机存取存储器120中的地址ADDR1_RAM。高速缓存管理模块208将写入数据存储在随机存取存储器120中的地址ADDR1_RAM处。在实施回写高速缓存时,高速缓存管理模块208将块输入/输出请求发送到下部层以便将写入数据存储在NVMe固态驱动器106的某些块中。
对于请求从可预取永久性存储器区域的地址ADDR2_PM检索数据的存储器读取请求事务层数据包,高速缓存管理模块208存取存储器空间数据结构216以确定与地址ADDR2_PM相对应的随机存取存储器120中的地址ADDR2_RAM。高速缓存管理模块208从随机存取存储器120中的地址ADDR2_RAM检索读取数据,且产生并发送具有有效负载(读取数据)的完成事务层数据包到主机操作系统或应用程序200。在高速缓存未命中的情况下,高速缓存管理模块208将块输入/输出请求发送到下部层,以便从NVMe固态驱动器106的某些块检索读取数据。
步骤11:如果下部层为软件RAID驱动器222,那么软件RAID驱动器222继而将块输入/输出请求划分为较小请求且将所述较小请求提交到成员盘(member disk)。如果下部层为NVMe控制器存储缓冲器高速缓存驱动器224或成员盘为控制器存储缓冲器高速缓存数据结构218,那么NVMe控制器存储缓冲器高速缓存驱动器224将写入数据存储到相关联的控制器存储缓冲器或将块输入/输出请求传递到NVMe驱动器220。
步骤12:NVMe驱动器220启动NVMe固态驱动器106以将数据移动到块输入/输出请求的缓冲存储器中或将数据从块输入/输出请求的缓冲存储器中移出。
图4为主机侧软件栈250的实例图。在栈250的顶部处为知晓永久性存储器(persistent-memory-aware)应用252,其使用由永久性存储器开发包(persistent memorydevelopment kit,PMDK)函式库254提供的函数调用来存取永久性存储器。知晓永久性存储器应用252与图3中的主机操作系统或应用程序200相对应。下一层为知晓永久性存储器文件系统256,其包含操作系统内建组件。底部层为用于虚拟的永久性存储器的永久性存储器驱动器258,其实施本文件中所描述的功能以允许知晓永久性存储器应用252如同存取非易失性双列直插式存储器模块一般存取NVMe固态驱动器106。永久性存储器驱动器258于操作系统中登记永久性存储器控制器数据结构124的永久性存储器区域,使得应用可知晓所述永久性存储器区域的存在并使用所述永久性存储器区域。
图5为PCIe交换机侧的软件栈270的实例图,其中软件在管理中央处理单元114处执行。在栈270的顶部处为网页GUI(web GUI)272,其允许用户修改系统100的配置。第二层为PCIe交换机管理器274。第三层为PCIe管理器276,其包含事务层数据包复位向模块278、合成的装置指配模块280、PCI装置合成模块282以及高速缓存管理模块284。图5中的合成的装置指配模块280、PCI装置合成模块282以及高速缓存管理模块284与图2中的合成的装置指配模块210、PCI装置合成模块206以及高速缓存管理模块208相对应。事务层数据包复位向模块278负责复位向配置、存储器以及讯息事务层数据包286。第四层包含林那克斯(Linux)PCI子系统290、林那克斯MD驱动器292、NVMe控制器存储缓冲器高速缓存驱动器294以及NVMe驱动器296。事务层数据包复位向模块278、NVMe控制器存储缓冲器高速缓存驱动器294以及NVMe驱动器296与图3的事务层数据包复位向模块204、NVMe控制器存储缓冲器高速缓存驱动器224以及NVMe驱动器220相对应。林那克斯PCI子系统290、林那克斯MD驱动器292以及NVMe驱动器296为林那克斯操作系统的内建组件。可基于本文件中所描述的技术来实施网页GUI272、PCIe交换机管理器274、PCIe管理器276、事务层数据包复位向模块278、合成的装置指配模块280、PCI装置合成模块282以及高速缓存管理模块284。
在一些实施方案中,实施标准类型0配置空间标头、PCI高速能力结构、PCI电源管理能力结构以及高级错误报告(AER)扩展能力结构,且其余寄存器保留。基地址寄存器0/1经组合以形成64位可预取永久性存储器区域,且其余BAR保留。在本文件中所描述的实例中,永久性存储器为可预取的,意味着从永久性存储器读取数据将不改变存储在永久性存储器中的数据值。
系统100以对常规系统进行许多改进的方式来向主机104提供永久性存储器,所述常规系统经由网络结构(例如无限频带(InfiniBand)网络结构)或通过使用经由融合以太网的远程直接存储器存取(remote direct memory access,RDMA)(RDMA over ConvergedEthernet,RoCE)协议来提供远程永久性存储器。在常规系统中,为经由网络存取远程永久性存储器,所述主机装置通常使用放(Put)操作和取(Get)操作。主机装置准备本端缓冲存储器,取(Get)指令将远程永久性存储器数据复制到本端缓冲存储器,且放(Put)指令将本端缓冲存储器数据复制到远程永久性存储器。为了经由通信网路发送放指令和取指令,指令在发送器和接收器两者处经过通信协议的各种层,因此存在相当大的延迟。通信协议栈可包含例如物理层、数据链路层、网络层、输送层、会话层、呈现层以及应用层,如国际标准化组织(International Organization for Standardization,ISO)所建立的开放系统互连(open systems interconnection,OSI)模型所规范。相比之下,在系统100中,主机104使用PCIe协议来存取永久地存储在NVMe固态驱动器106中的数据,所述PCIe协议仅具有三个层:物理层、数据链路层以及事务层。在系统100中存取永久性存储器比经由现有技术系统中的网络结构来存取远程永久性存储器快得多。
图6为绘示如主机操作系统或应用程序200所见的永久性存储器的图。PCI存储器空间340包含主机104的随机存取存储器的地址空间342以及可预取永久性存储器区域344。在这一实例中,主机104的随机存取存储器为4GB或小于4GB,因此可预取永久性存储器区域位于4GB以上地址。在产生可预取永久性存储器区域344时,可配置可预取永久性存储器区域344的大小。主机104未知晓随机存取存储器120,管理中央处理单元114可存取所述随机存取存储器120。
每一主机104具有其自身的PCI存储器空间和其自身的永久性存储器区域,且不同主机104的永久性存储器区域在不同地址处开始。每一主机可独立于另一主机对永久性存储器进行存取。两个或大于两个主机所个别具有的永久性存储器区域,可映像到相同固态驱动器或多个固态驱动器所形成的相同RAID的逻辑块地址空间。举例来说,固态驱动器或RAID的下半部地址空间可分配为第一主机的永久性存储器区域,且固态驱动器或RAID的上半部地址空间可分配为第二主机的永久性存储器区域。可预取永久性存储器区域344定位于特定主机自有的PCI存储器空间340内,且仅由特定主机104存取。
图7为绘示PCI存储器空间340以及如主机操作系统或应用程序200所见的永久性存储器与单一NVMe固态驱动器106的地址空间350之间的映像346的图。可预取永久性存储器区域344的每一地址具有对NVMe固态驱动器地址空间350的块地址的每一字节的一对一映像。如果存在多个主机,那么NVMe固态驱动器106的地址空间350的一部分映像到每一主机104的可预取永久性存储器区域344,且NVMe固态驱动器106的地址空间350的不同部分映像到不同主机104的可预取永久性存储器区域344。
图8为绘示PCI存储器空间340以及如主机操作系统或应用程序200所见的永久性存储器与多个NVMe固态驱动器106的地址空间360之间的映像348的图。可预取永久性存储器区域344的每一地址具有对多个NVMe固态驱动器106所建立的NVMe固态驱动器地址空间360的块地址的每一字节的一对一映像。
如果存在多个主机,那么多个NVMe固态驱动器106的地址空间360的一部分映像到每一主机104的可预取永久性存储器区域344,且NVMe固态驱动器106的地址空间360的不同部分映像到不同主机104的可预取永久性存储器区域344。
参看图9,在一些实施方案中,系统100的数据存储包含随机存取存储器120和NVMe固态驱动器106的非易失性存储器371,其中NVMe固态驱动器106可包含控制器存储缓冲器116或不包含。在一些实例中,NVMe固态驱动器106的非易失性存储器的总容量大于控制器存储缓冲器116的总容量,所述控制器存储缓冲器116的总容量大于随机存取存储器120的容量。基于存储器空间数据结构216中的信息而由高速缓存管理模块208来存取随机存取存储器120。基于控制器存储缓冲器高速缓存数据结构218中的信息而由NVMe控制器存储缓冲器高速缓存驱动器224来存取控制器存储缓冲器116。由NVMe驱动器220来存取NVMe固态驱动器106的非易失性存储器。
下文描述如何将随机存取存储器120以及控制器存储缓冲器116(可有可无)作为高速缓存来管理。在一些实施方案中,随机存取存储器120和控制器存储缓冲器116的快取粒度等于管理中央处理单元114的存储器管理单元(MMU)的页面大小。随机存取存储器或控制器存储缓冲器中一个页面大小的数据可为“脏”、“清洁”、“忙”或“空闲”。在页面为“脏”时,页面具有不与其在底层块装置(例如NVMe固态驱动器106)中的副本一致的数据。在页面为“清洁”时,页面具有与其在底层块装置中的副本一致的数据。在页面为“忙”时,页面具有从底层块装置复制或复制到底层块装置的数据。在页面为“空闲”时,页面已准备好用于高速缓存。
控制器存储缓冲器高速缓存数据结构218实施为堆栈在具有控制器存储缓冲器的单一NVMe固态驱动器的顶部上的块装置,并且还实施为NVMe固态驱动器的回写高速缓存。存储器空间216实施为块装置的回写高速缓存,所述块装置可为不具有控制器存储缓冲器的单一NVMe固态驱动器106。存储器空间216也可堆栈在其它块装置的顶部上,所述其它块装置例如RAID卷或控制器存储缓冲器高速缓存数据结构218。
存储器空间216维持最近最少使用(LRU)的脏随机存取存储器页面的列表、最近最少使用的清洁随机存取存储器页面的列表以及空闲随机存取存储器页面的列表。在无空闲随机存取存储器页面可用但存在至少一个清洁随机存取存储器页面时,从存储器空间216中移除最近最少使用的清洁随机存取存储器页面并将其移动到空闲随机存取存储器页面的列表。在空闲随机存取存储器页面的数目小于或等于某个下限时,存储器空间216开始生成块写入请求并将块写入请求提交到底层块装置。每一块写入请求包含从最近最少使用的脏随机存取存储器页面的列表移除且标记为忙的最近最少使用的脏随机存取存储器页面。选择块写入请求的数目使得忙随机存取存储器页面的数目加上空闲随机存取存储器页面的数目大于或等于某个上限。在这一块写入请求成功完成之后,将忙随机存取存储器页面标记为清洁,且除非忙随机存取存储器页面不再在存储器空间216中,否则将所述忙随机存取存储器页面添加到最近最少使用的清洁随机存取存储器页面的列表的顶部。如果清洁随机存取存储器页面不再在存储器空间216中,那么将所述清洁随机存取存储器页面添加到空闲随机存取存储器页面的列表。
进入存储器空间216的每一存储器请求事务层数据包划分为一或多个页面粒度的子请求。对于每一子请求,如果没有空闲随机存取存储器页面或清洁随机存取存储器页面,那么高速缓存未命中必须等待直到空闲随机存取存储器页面可用为止。如果空闲随机存取存储器页面可用,那么高速缓存未命中首先从空闲随机存取存储器页面的列表移除页面,将所述页面标记为忙,将所述页面插入到存储器空间216中,且生成具有所述页面的块读取请求并将具有所述页面的块读取请求提交到底层块装置。在块读取请求成功完成时,读取未命中将页面标记为清洁,将所述页面添加到最近最少使用的清洁随机存取存储器页面的列表的尾部,且产生具有来自所述页面的请求数据作为有效负载的完成事务层数据包。写入未命中则将写入数据复制到页面,将所述页面标记为脏,且将所述页面添加到最近最少使用的脏随机存取存储器页面的列表的尾部。忙页面上的写入命中等待直到忙页面不忙为止。(脏页面或清洁页面上的)写入命中将写入数据复制到高速缓存的页面。如果写入命中在清洁页面上,那么页面标记为脏并移动到最近最少使用的脏随机存取存储器页面的列表的尾部。读取命中产生具有来自高速缓存的页面的请求数据作为有效负载的完成事务层数据包。
控制器存储缓冲器高速缓存数据结构218维持最近最少使用的脏控制器存储缓冲器页面的清单、最近最少使用的清洁控制器存储缓冲器页面的清单以及空闲控制器存储缓冲器页面的清单。在无空闲控制器存储缓冲器页面可用但存在至少一个清洁控制器存储缓冲器页面时,从控制器存储缓冲器高速缓存数据结构218中移除最近最少使用的清洁控制器存储缓冲器页面并将其移动到空闲控制器存储缓冲器页面的清单。在空闲控制器存储缓冲器页面的数目小于或等于某个下限时,控制器存储缓冲器高速缓存数据结构218开始生成块写入请求并将块写入请求提交到底层NVMe驱动器220。每一块写入请求具有从最近最少使用的脏控制器存储缓冲器页面的列表移除且标记为忙的最近最少使用的脏控制器存储缓冲器页面。选择块写入请求的数目使得忙控制器存储缓冲器页面的数目加上空闲控制器存储缓冲器页面的数目大于或等于某个上限。在这一块写入请求成功完成之后,将忙控制器存储缓冲器页面标记为清洁,且如果控制器存储缓冲器页面仍在控制器存储缓冲器高速缓存数据结构218中,那么将所述忙控制器存储缓冲器页面添加到最近最少使用的清洁控制器存储缓冲器页面的清单的顶部。如果控制器存储缓冲器页面不再在控制器存储缓冲器高速缓存数据结构218中,那么将控制器存储缓冲器页面添加到空闲控制器存储缓冲器页面的清单。
进入控制器存储缓冲器高速缓存数据结构218的每一块输入/输出请求划分为一或多个页面粒度的子请求。对于每一子请求,如果没有空闲控制器存储缓冲器页面或清洁控制器存储缓冲器页面,那么写入未命中将子请求提交到底层NVMe固态驱动器106。如果存在空闲控制器存储缓冲器页面或清洁控制器存储缓冲器页面,那么写入未命中将空闲控制器存储缓冲器页面插入到控制器存储缓冲器高速缓存数据结构218,所述空闲控制器存储缓冲器页面标记为脏并移动到最近最少使用的脏控制器存储缓冲器页面的清单的尾部,且写入数据复制到控制器存储缓冲器页面中。读取未命中将请求数据从底层NVMe固态驱动器106读取到由子请求所供应的随机存取存储器页面中。忙页面上的写入命中将页面从控制器存储缓冲器高速缓存数据结构218中移除,且继而将子请求提交到底层NVMe固态驱动器106。脏页面或清洁页面上的写入命中将高速缓存的控制器存储缓冲器页面移动到最近最少使用的脏页面的清单的尾部,且将写入数据复制到高速缓存的控制器存储缓冲器页面。清洁控制器存储缓冲器页面在其移动到最近最少使用的脏控制器存储缓冲器页面的列表的尾部之前标记为脏。读取命中将高速缓存的数据复制到由子请求供应的随机存取存储器页面。
下文描述系统电力故障时的不可屏蔽中断处理。执行不可屏蔽中断处理程序以确保存储在随机存取存储器120和控制器存储缓冲器116中的数据在失去电力时安全地存储在NVMe固态驱动器106中。
步骤1:在系统电力故障后,不可屏蔽中断处理程序232停用每一上游端口的PCIe链路,使得将没有来自连接的主机的其它PCIe通讯。
步骤2:如果每一NVMe固态驱动器具有写入高速缓存(例如图10的384),那么不可屏蔽中断处理程序232停用所述每一NVMe的写入高速缓存。
步骤3:将任何复位向存储器写入事务层数据包的写入数据清空到存储器空间,并忽略任何其它类型的事务层数据包。
步骤4:基于存储器空间数据结构216中的信息,将随机存取存储器120中的写入数据清空到其底层块装置。
步骤5:基于控制器存储缓冲器高速缓存数据结构218中的信息,将控制器存储缓冲器高速缓存116中的写入数据清空到其底层NVMe固态驱动器。
下文描述用于处理控制器存储缓冲器错误校正码错误的程序。
步骤1:管理中央处理单元114接收高级错误报告中断,其为控制器存储缓冲器错误校正码错误的结果。
步骤2:管理中央处理单元114检测到由某一NVMe固态驱动器所标志的不可校正内部错误。
步骤3:管理中央处理单元114向相关联的主机发送非致命错误讯息事务层数据包,并报告不可校正内部错误,其中以相关联的永久性存储器控制器数据结构124作为所述非致命错误讯息事务层数据包的请求者ID。
步骤4:管理中央处理单元114清空并停用相关联的控制器存储缓冲器高速缓存数据结构218。
步骤5:管理中央处理单元114丢弃相关联的主机的任何后续存储器写入请求事务层数据包,且向该主机发送非致命错误讯息事务层数据包,并报告不支持的请求。
已描述用于实现软件定义的永久性存储器的实例系统,其允许在主机装置104上执行的操作系统或应用程序以类似于存取字节可寻址存储器装置(例如非易失性双列直插式存储器模块)的方式存取块可寻址存储装置(例如NVMe固态驱动器106)。在这一实例中,PCIe交换机112从主机装置104接收第一命令集合,其中所述第一命令集合配置成存取字节可寻址存储器装置,例如非易失性双列直插式存储器模块。PCIe交换机112将第一命令集合复位向到管理中央处理单元114,管理中央处理单元114基于第一命令集合产生用于存取随机存取存储器120中的高速缓存的第二命令集合以及用于存取例如NVMe固态驱动器106的块可寻址存储装置的第三命令集合。从主机的视角来看,即使数据存储在块可寻址非易失性存储装置中,主机104仍可存取字节可寻址永久性存储器装置。管理中央处理单元114和PCIe交换机112结合永久性存储器驱动器258提供软件层,所述软件层隐藏使用块可寻址非易失性存储装置(例如NVMe固态驱动器106)所实施的永久性存储器和使用随机存取存储器120以及CMB 116(可有可无)所实施的高速缓存的复杂度。
参看图10,在一些实施方案中,系统380使得主机104能够以类似于存取字节可寻址存储器装置(例如非易失性双列直插式存储器模块)的方式存取块可寻址存储装置(例如NVMe固态驱动器382)。系统380类似于系统100,不同之处在于NVMe固态驱动器382中的至少一些中的每一个具有写入高速缓存384。NVMe固态驱动器382包含动态随机存取存储器,动态随机存取存储器的一部分用作控制器存储缓冲器116,且动态随机存取存储器的一部分用作写入高速缓存384。写入高速缓存384独立于随机存取存储器120中的高速缓存而运作。在将数据从随机存取存储器120中的高速缓存清空到NVMe固态驱动器382时,所述数据首先从随机存取存储器120传输到NVMe固态驱动器382的写入高速缓存384,随后从写入高速缓存384传输到NVMe固态驱动器382的非易失性存储器。
在系统380中,永久性存储器的地址空间与单一NVMe固态驱动器的地址空间之间的映像以及永久性存储器的地址空间与多个NVMe固态驱动器的地址空间之间的映像类似于图7和图8中所绘示的那些映像,不同之处在于NVMe固态驱动器106中的每一个包含写入高速缓存。
在一些实施方案中,用于实施软件定义的永久性存储器的软件模块和驱动器(例如图3中所绘示的软件模块和驱动器)可设置于计算机可读媒体(例如RAM、ROM、SDRAM、硬盘、光盘以及闪存)上。术语“计算机可读媒体”是指参与将指令提供到处理器以用于执行的媒体,包含但不限于非易失性媒体(例如光盘或磁盘)和易失性媒体(例如存储器)以及传输媒体。传输媒体包含但不限于同轴缆线、铜线、光纤以及可用空间。
上文所描述的特征可有利地在一或多个计算机程序中实施,所述一或多个计算机程序可在包含至少一个可程序化处理器的可程序化系统上执行,所述至少一个可程序化处理器耦合成从数据存储系统、至少一个输入设备以及至少一个输出装置接收数据和指令并向其传输数据和指令。计算机程序为可在计算机中直接或间接使用以执行某个活动或带来某个结果的一组指令。计算机程序可以任何形式的程序设计语言(例如C、Java)撰写,所述任何形式的程序设计语言包含编译的语言或解译的语言,且计算机程序可以任何形式部署,所述任何形式包含作为独立程序或作为模块、组件、子例程、基于浏览器的网页应用或适合用于计算环境中的其它单元。
适合用于执行程序指令的处理器包含例如任何种类计算机的通用微处理器、专用微处理器、数字信号处理器、单核处理器或多核处理器。一般来说,处理器将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本组件是用于执行指令的处理器以及用于存储指令和数据的一或多个存储器。一般来说,计算机还将包含用于存储数据文件的一或多个大量存储装置,或操作地耦合以与所述一或多个大量存储装置通信;这些装置包含磁盘,例如内部硬盘和可移式磁盘;磁光盘;以及光盘。适用于有形地体现计算机程序指令和数据的存储装置包含所有形式的非易失性存储器,举例来说,包含半导体存储器装置,例如EPROM、EEPROM以及闪存装置;磁盘,例如内部硬盘和可移式磁盘;磁光盘;以及CD-ROM、DVD-ROM和蓝光BD-ROM光驱。处理器和存储器可以专用集成电路(application-specific integrated circuit,ASIC)作为补充或被并入ASIC。
已描述所述主题的特定实施例。其它实施例在随附权利要求书的范围内。在一些情况下,权利要求书中所叙述的动作可以不同次序来执行且仍达成合乎需要的结果。另外,附图中所描绘的程序不必需要所绘示的特定次序或顺序次序以达成合乎需要的结果。在某些实施方案中,多任务处理和并行处理可为有利的。
尽管上文已论述一些实例,但其它实施方案和应用也在随附权利要求书的范围内。举例来说,图3中的主机操作系统或应用程序200可以是人工智能应用(例如深度学习神经网络)以及在处理大量数据的通用图形处理单元上执行的复杂仿真。举例来说,图3中的主机操作系统或应用程序200可以是视频渲染程序、音频信号处理程序、动画渲染程序、图像处理程序、机器学习程序、数学仿真程序、用于控制车辆的应用程序、用于控制机器人的应用程序、大数据应用程序、用于处理财务数据的应用程序、用于处理健康护理数据的应用程序、数据加密和解密应用程序、用于执行复杂物理计算的应用程序和/或用于处理医疗数据的应用程序。主机操作系统可以是例如窗口操作系统(Windows operating system)、林那克斯操作系统(Linux operating system)或MacOS。图1中的多个主机104可以是并行地操作以增强性能的多个通用图形处理单元。主机104可不同于上文所描述的主机。
在一些实施方案中,可用其它类型的固态驱动器替换NVMe固态驱动器106和NVMe固态驱动器382。固态驱动器中使用的非易失性存储器可基于各种类型的技术,包含例如单级单元(single-level cell)闪存、三级单元(triple-level cell)闪存和/或多级单元(multi-level cell)闪存。
虽然本说明书含有许多特定实施细节,但这些细节不应解释为限制任何发明的范围或可主张的事物的范围,而是应解释为针对特定发明的特定实施例的特征的描述。本说明书的上下文或单独实施例中所描述的某些特征也可在单个实施例中组合地实施。相反地,在单个实施例的上下文中描述的各种特征也可单独地在多个实施例中实施或以任何适合的子组合来实施。
同样地,虽然在附图中按特定次序描绘操作,但此不应被理解为要求按所展示的特定次序或按顺序次序执行这些操作,或执行所有所说明的操作,以达成合乎需要的结果。在某些情况下,多任务处理和并行处理可为有利的。此外,上文所描述的实施例中分离的各种系统组件不应理解成要求在所有实施例中都如此分离。
虽然本揭露已以实施例揭露如上,然其并非用以限定本揭露,任何所属技术领域中具有通常知识者,在不脱离本揭露的精神和范围内,当可作些许的更动与润饰,故本揭露的保护范围当视前附的申请专利范围所界定者为准。
Claims (20)
1.一种用于管理软件定义的永久性存储器的系统,其特征在于,包括:
中央处理单元;
一或多个第一输入/输出端口,配置成容纳一或多个各自具有随机存取存储器的随机存取存储器模块,其中所述一或多个第一输入/输出端口电耦合到所述中央处理单元可存取的存储器总线;
一或多个第二输入/输出端口,配置成容纳一或多个块可寻址非易失性存储装置;以及
接口交换机,配置成经由一或多个第一数据链路与一或多个主机装置通信,其中所述中央处理单元和所述接口交换机配置成针对每一所述主机装置产生与对应的所述主机装置相关联的永久性存储器控制器数据结构,
其中所述中央处理单元和所述接口交换机配置成在与所述主机装置互动时仿真永久性存储器控制器,
其中所述永久性存储器控制器数据结构包含配置数据以使得所述中央处理单元和所述接口交换机能够仿真所述永久性存储器控制器;
其中所述中央处理单元和所述接口交换机配置成从所述一或多个主机装置接收指令,且基于来自所述一或多个主机装置的所述指令而将写入数据永久地存储在所述一或多个块可寻址非易失性存储装置中或从所述一或多个块可寻址非易失性存储装置检索读取数据,且使用所述随机存取存储器的至少一部分作为高速缓存以暂时地存储来自所述一或多个块可寻址非易失性存储装置的所述读取数据或意图永久地存储在所述一或多个块可寻址非易失性存储装置中的所述写入数据中的至少一个。
2.根据权利要求1所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中来自所述主机装置的所述指令包括设计成存取字节可寻址永久性存储器模块的指令。
3.根据权利要求1所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述第一数据链路包括以下各项中的至少一个:外围组件互连高速链路、ThunderboltTM链路、NVLink、CCIX链路、OpenCAPI链路或Gen-Z链路。
4.根据权利要求1所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述一或多个块可寻址非易失性存储装置经由外围组件互连高速链路、ThunderboltTM链路、NVLink、CCIX链路、OpenCAPI链路或Gen-Z链路中的至少一个与所述接口交换机或所述中央处理单元通信。
5.根据权利要求1所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述第一数据链路包括外围组件互连高速链路,所述一或多个块可寻址非易失性存储装置经由外围组件互连高速链路与所述接口交换机或所述中央处理单元通信,且所述接口交换机包括外围组件互连高速交换机。
6.根据权利要求5所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述中央处理单元配置成在接收指示电力故障的中断信号后执行紧急关机程序,所述紧急关机程序包含将所述高速缓存的数据清空到所述一或多个块可寻址非易失性存储装置。
7.根据权利要求6所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述紧急关机程序包括将存储器写入事务层数据包的写入数据清空到PCI存储器空间。
8.根据权利要求7所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述紧急关机程序包括将所述PCI存储器空间中的所述数据清空到至少一个对应的所述块可寻址非易失性存储装置。
10.根据权利要求1所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述一或多个块可寻址非易失性存储装置中的至少一个中的每一个包括使用动态随机存取存储器所实施的控制器存储缓冲器,所述控制器存储缓冲器的一部分配置为控制器存储缓冲器高速缓存,且所述中央处理单元和所述接口交换机配置成使用所述高速缓存和所述控制器存储缓冲器高速缓存来暂时地存储所述读取数据和/或所述写入数据。
11.根据权利要求10所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述中央处理单元在所述随机存取存储器中产生控制器存储缓冲器高速缓存数据结构,且所述控制器存储缓冲器高速缓存数据结构包含对应的所述控制器存储缓冲器和在所述控制器存储缓冲器中存储高速缓存数据的位置的相关信息。
12.根据权利要求1所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述永久性存储器控制器数据结构进一步包括配置空间数据结构和存储器空间数据结构,
所述配置空间数据结构配置成存储配置写入请求事务层数据包的有效负载且提供配置读取请求事务层数据包所请求的数据,以及
所述存储器空间数据结构针对给定的所述永久性存储器控制器数据结构,记录所述高速缓存于所述随机存取存储器中的位置的相关信息,而所述位置存储用于至少一个所述块可寻址非易失性存储装置的数据。
13.根据权利要求1所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述中央处理单元包括将地址空间划分为页面的存储器管理单元,所述随机存取存储器中的所述高速缓存划分为页面,且所述高速缓存的页面大小与所述存储器管理单元所使用的页面大小相同。
14.根据权利要求13所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述中央处理单元产生包含以下各项的存储器空间数据结构:最近最少使用的脏随机存取存储器页面的列表、最近最少使用的清洁随机存取存储器页面的列表以及空闲随机存取存储器页面的列表。
15.根据权利要求14所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述接口交换机包括外围组件互连高速交换机,所述中央处理单元和所述外围组件互连高速交换机配置成根据高速缓存管理程序来管理所述高速缓存,所述高速缓存管理程序包括:
在确定无空闲随机存取存储器页面可用但存在至少一个清洁随机存取存储器页面后,从所述存储器空间中移除所述最近最少使用的清洁随机存取存储器页面并将所述随机存取存储器页面移动到所述空闲随机存取存储器页面的列表。
16.根据权利要求14所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述接口交换机包括外围组件互连高速交换机,所述一或多个块可寻址非易失性存储装置包括非易失性存储器快速固态驱动器,且所述中央处理单元和所述外围组件互连高速交换机配置成根据高速缓存管理程序来管理所述高速缓存,所述高速缓存管理程序包括:
接收存储器请求事务层数据包;
基于所述存储器请求事务层数据包而产生一或多个页面粒度的子请求;
对于每一所述子请求,在所述高速缓存未命中时,如果没有空闲随机存取存储器页面或清洁随机存取存储器页面,那么等待直到空闲随机存取存储器页面可用为止,且如果空闲随机存取存储器页面可用,那么从所述空闲随机存取存储器页面的列表中移除所述随机存取存储器页面,将所述随机存取存储器页面标记为忙,并插入到所述存储器空间中,且将具有所述随机存取存储器页面的块读取请求提交到所述非易失性存储器快速固态驱动器。
17.一种用于管理软件定义的永久性存储器的系统,其特征在于,包括:
至少一个处理器;
接口交换机,配置成经由第一数据链路电耦合到至少一个主机装置,其中所述至少一个处理器和所述接口交换机配置成产生数据结构以使得在所述主机装置上执行的应用程序能够使用配置成存取字节可寻址存储器装置的第一命令来存取经由第二数据链路电耦合到所述接口交换机或所述至少一个处理器的至少一个非易失性块可寻址存储装置,且使用随机存取存储器作为高速缓存;
其中所述至少一个处理器配置成从所述主机装置接收所述第一命令,产生配置成存取所述至少一个块可寻址存储装置的第二命令,且将所述第二命令发送到所述至少一个非易失性块可寻址存储装置。
18.根据权利要求17所述的用于管理软件定义的永久性存储器的系统,其特征在于,其中所述第一数据链路包括外围组件互连高速链路,所述第二数据链路包括外围组件互连高速链路,且所述至少一个非易失性块可寻址存储装置包括至少一个非易失性存储器快速固态驱动器。
19.一种用于管理软件定义的永久性存储器的方法,其特征在于,包括:
在中央处理单元处,产生一数据结构使得主机装置能够使用设计成存取永久性存储器的命令来存取一或多个非易失性存储装置,其中所述数据结构包含高速缓存地址与所述一或多个非易失性存储装置中的地址之间的映像的相关信息,且所述高速缓存地址与随机存取存储器的地址相对应;以及
在所述中央处理单元处,接收主机装置的第一读取命令,其中所述第一读取命令设计成从所述永久性存储器的第一地址检索数据,随后基于所述高速缓存地址与所述一或多个非易失性存储装置中的所述地址之间的所述映像的所述相关信息而确定与所述永久性存储器的所述第一地址相对应的所述高速缓存的第二地址,并从所述高速缓存的所述第二地址检索数据,且将所述检索到的数据发送到所述主机装置。
20.根据权利要求19所述的用于管理软件定义的永久性存储器的方法,其特征在于,包括:
在所述中央处理单元处,接收主机装置的第一写入命令,其中所述第一写入命令设计成将数据写入到所述永久性存储器的第三地址,随后基于所述高速缓存地址与所述一或多个非易失性存储装置中的所述地址之间的所述映像的所述相关信息而确定与所述永久性存储器的所述第三地址相对应的所述高速缓存的第四地址,且将所述数据写入到所述高速缓存的所述第四地址。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/188,195 US10909012B2 (en) | 2018-11-12 | 2018-11-12 | System having persistent memory |
US16/188,195 | 2018-11-12 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111177029A true CN111177029A (zh) | 2020-05-19 |
CN111177029B CN111177029B (zh) | 2022-06-21 |
Family
ID=70549881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911080129.7A Active CN111177029B (zh) | 2018-11-12 | 2019-11-06 | 用于管理软件定义的永久性存储器的系统及方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10909012B2 (zh) |
CN (1) | CN111177029B (zh) |
TW (1) | TW202018495A (zh) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11182315B2 (en) * | 2017-02-10 | 2021-11-23 | Intel Corporation | Apparatuses, methods, and systems for hardware control of processor performance levels |
TWI688859B (zh) * | 2018-12-19 | 2020-03-21 | 財團法人工業技術研究院 | 記憶體控制器與記憶體頁面管理方法 |
US11656992B2 (en) | 2019-05-03 | 2023-05-23 | Western Digital Technologies, Inc. | Distributed cache with in-network prefetch |
US11762798B2 (en) * | 2019-06-25 | 2023-09-19 | Micron Technology, Inc. | Aggregated and virtualized solid state drives with multiple host interfaces |
US10942846B2 (en) | 2019-06-25 | 2021-03-09 | Micron Technology, Inc. | Aggregated and virtualized solid state drives accessed via multiple logical address spaces |
US10942881B2 (en) | 2019-06-25 | 2021-03-09 | Micron Technology, Inc. | Parallel operations in aggregated and virtualized solid state drives |
US11513923B2 (en) | 2019-06-25 | 2022-11-29 | Micron Technology, Inc. | Dynamic fail-safe redundancy in aggregated and virtualized solid state drives |
US11768613B2 (en) | 2019-06-25 | 2023-09-26 | Micron Technology, Inc. | Aggregation and virtualization of solid state drives |
US11573708B2 (en) * | 2019-06-25 | 2023-02-07 | Micron Technology, Inc. | Fail-safe redundancy in aggregated and virtualized solid state drives |
US11055249B2 (en) | 2019-06-25 | 2021-07-06 | Micron Technology, Inc. | Access optimization in aggregated and virtualized solid state drives |
US11650835B1 (en) * | 2020-03-31 | 2023-05-16 | Amazon Technologies, Inc. | Multiple port emulation |
US11556859B2 (en) * | 2020-06-12 | 2023-01-17 | Baidu Usa Llc | Method for al model transferring with layer and memory randomization |
US11765250B2 (en) | 2020-06-26 | 2023-09-19 | Western Digital Technologies, Inc. | Devices and methods for managing network traffic for a distributed cache |
US11669473B2 (en) * | 2020-06-26 | 2023-06-06 | Advanced Micro Devices, Inc. | Allreduce enhanced direct memory access functionality |
US11675706B2 (en) | 2020-06-30 | 2023-06-13 | Western Digital Technologies, Inc. | Devices and methods for failure detection and recovery for a distributed cache |
US11736417B2 (en) * | 2020-08-17 | 2023-08-22 | Western Digital Technologies, Inc. | Devices and methods for network message sequencing |
US11467992B1 (en) | 2020-09-24 | 2022-10-11 | Amazon Technologies, Inc. | Memory access operation in distributed computing system |
US11409685B1 (en) * | 2020-09-24 | 2022-08-09 | Amazon Technologies, Inc. | Data synchronization operation at distributed computing system |
US11354258B1 (en) | 2020-09-30 | 2022-06-07 | Amazon Technologies, Inc. | Control plane operation at distributed computing system |
US11507294B2 (en) * | 2020-10-22 | 2022-11-22 | EMC IP Holding Company LLC | Partitioning a cache for fulfilling storage commands |
US12088470B2 (en) | 2020-12-18 | 2024-09-10 | Western Digital Technologies, Inc. | Management of non-volatile memory express nodes |
US11726911B2 (en) | 2021-01-25 | 2023-08-15 | Western Digital Technologies, Inc. | NVMe persistent memory region quick copy |
CN114968855B (zh) * | 2021-02-18 | 2024-10-01 | 闪迪技术公司 | 对持久性存储区域范围的一致访问 |
US12073112B2 (en) * | 2021-03-08 | 2024-08-27 | Micron Technology, Inc. | Enabling memory access transactions for persistent memory |
US11704029B2 (en) * | 2021-04-16 | 2023-07-18 | Micron Technology, Inc. | Elastic persistent memory regions |
US11656994B2 (en) * | 2021-05-03 | 2023-05-23 | Western Digital Technologies, Inc. | Non-volatile memory with optimized read |
US12149358B2 (en) | 2021-06-21 | 2024-11-19 | Western Digital Technologies, Inc. | In-network failure indication and recovery |
US11983111B2 (en) * | 2021-08-19 | 2024-05-14 | Microsoft Technology Licensing, Llc | Systems and methods to flush data in persistent memory region to non-volatile memory using auxiliary processor |
US11860775B2 (en) | 2021-09-29 | 2024-01-02 | Silicon Motion, Inc. | Method and apparatus for programming data into flash memory incorporating with dedicated acceleration hardware |
US11972150B2 (en) | 2021-09-29 | 2024-04-30 | Silicon Motion, Inc. | Method and non-transitory computer-readable storage medium and apparatus for programming data into flash memory through dedicated acceleration hardware |
US12223199B2 (en) | 2021-09-29 | 2025-02-11 | Silicon Motion, Inc. | Method and apparatus for programming data arranged to undergo specific stages into flash memory based on virtual carriers |
TWI821965B (zh) * | 2021-09-29 | 2023-11-11 | 慧榮科技股份有限公司 | 編碼歷程資訊的存取方法及電腦程式產品及裝置 |
US12205658B2 (en) * | 2021-10-25 | 2025-01-21 | Sandisk Technologies Llc | Systems and methods for retaining inflight data during a power loss event |
CN114153606B (zh) * | 2021-11-29 | 2025-03-14 | 中汽创智科技有限公司 | 一种文件处理方法、装置、设备、存储介质、系统及车辆 |
US12056045B2 (en) * | 2022-06-15 | 2024-08-06 | Western Digital Technologies, Inc. | Scratchpad cache for gaming and IoT hosts |
US11995316B2 (en) | 2022-06-15 | 2024-05-28 | Samsung Electronics Co., Ltd. | Systems and methods for a redundant array of independent disks (RAID) using a decoder in cache coherent interconnect storage devices |
US20230409480A1 (en) * | 2022-06-15 | 2023-12-21 | Samsung Electronics Co., Ltd. | Systems and methods for a redundant array of independent disks (raid) using a raid circuit in cache coherent interconnect storage devices |
US12001352B1 (en) | 2022-09-30 | 2024-06-04 | Amazon Technologies, Inc. | Transaction ordering based on target address |
US12158848B2 (en) | 2022-10-07 | 2024-12-03 | International Business Machines Corporation | Combining peripheral component interface express partial store commands along cache line boundaries |
TWI857370B (zh) * | 2022-10-18 | 2024-10-01 | 瑞昱半導體股份有限公司 | 回應錯誤命令的方法、儲存裝置及儲存系統 |
US12242360B2 (en) * | 2023-05-26 | 2025-03-04 | Silicon Motion, Inc. | Method and apparatus for performing data access management of memory device in predetermined communications architecture to enhance sudden power off recovery of page-group-based redundant array of independent disks protection with aid of suspendible serial number |
US12124431B1 (en) * | 2023-06-13 | 2024-10-22 | International Business Machines Corporation | Data maintenance |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101620572A (zh) * | 2008-07-02 | 2010-01-06 | 上海华虹Nec电子有限公司 | 非易失性内存及控制方法 |
CN101646994A (zh) * | 2006-12-06 | 2010-02-10 | 弗森多系统公司(dba弗森-艾奥) | 利用内存库交错管理固态存储器的命令的装置、系统及方法 |
CN103092534A (zh) * | 2013-02-04 | 2013-05-08 | 中国科学院微电子研究所 | 一种内存结构的调度方法和装置 |
CN103810112A (zh) * | 2014-01-28 | 2014-05-21 | 华中科技大学 | 一种非易失性内存系统及其管理方法 |
CN104239225A (zh) * | 2014-09-04 | 2014-12-24 | 浪潮(北京)电子信息产业有限公司 | 一种管理异构混合内存的方法及装置 |
CN104778126A (zh) * | 2015-04-20 | 2015-07-15 | 清华大学 | 非易失性主存中事务数据存储优化方法及系统 |
CN105938458A (zh) * | 2016-04-13 | 2016-09-14 | 上海交通大学 | 软件定义的异构混合内存管理方法 |
CN107193756A (zh) * | 2013-03-15 | 2017-09-22 | 英特尔公司 | 用于标记需要写回持久存储的非事务代码区的开头和结束的指令 |
CN107818052A (zh) * | 2016-09-13 | 2018-03-20 | 华为技术有限公司 | 内存访问方法及装置 |
CN108475235A (zh) * | 2016-01-11 | 2018-08-31 | 高通股份有限公司 | 利用dram程序高速缓存的非易失性随机存取系统存储器 |
US20190042333A1 (en) * | 2017-12-29 | 2019-02-07 | Intel IP Corporation | Speculative execution tag for asynchronous dram refresh |
CN109416656A (zh) * | 2016-10-31 | 2019-03-01 | 拉姆伯斯公司 | 混合存储器模块 |
CN110086861A (zh) * | 2019-04-19 | 2019-08-02 | 山东欧倍尔软件科技有限责任公司 | 一种协同仿真方法、系统及服务器和客户端 |
CN110096452A (zh) * | 2018-01-31 | 2019-08-06 | 北京忆恒创源科技有限公司 | 非易失随机访问存储器及其提供方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5414827A (en) * | 1991-12-19 | 1995-05-09 | Opti, Inc. | Automatic cache flush |
US8589629B2 (en) * | 2009-03-27 | 2013-11-19 | Advanced Micro Devices, Inc. | Method for way allocation and way locking in a cache |
US20140195634A1 (en) | 2013-01-10 | 2014-07-10 | Broadcom Corporation | System and Method for Multiservice Input/Output |
CN103500076A (zh) * | 2013-10-13 | 2014-01-08 | 张维加 | 一种基于多通道slc nand与dram缓存的新usb协议计算机加速设备 |
US9223734B2 (en) | 2013-12-13 | 2015-12-29 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Switch with synthetic device capability |
US9721660B2 (en) | 2014-10-24 | 2017-08-01 | Microsoft Technology Licensing, Llc | Configurable volatile memory without a dedicated power source for detecting a data save trigger condition |
US9720604B2 (en) * | 2015-08-06 | 2017-08-01 | Sandisk Technologies Llc | Block storage protocol to RAM bypass |
US10191877B2 (en) | 2015-12-22 | 2019-01-29 | Intel Corporation | Architecture for software defined interconnect switch |
US10521389B2 (en) | 2016-12-23 | 2019-12-31 | Ati Technologies Ulc | Method and apparatus for accessing non-volatile memory as byte addressable memory |
-
2018
- 2018-11-12 US US16/188,195 patent/US10909012B2/en active Active
-
2019
- 2019-08-27 TW TW108130519A patent/TW202018495A/zh unknown
- 2019-11-06 CN CN201911080129.7A patent/CN111177029B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101646994A (zh) * | 2006-12-06 | 2010-02-10 | 弗森多系统公司(dba弗森-艾奥) | 利用内存库交错管理固态存储器的命令的装置、系统及方法 |
CN101620572A (zh) * | 2008-07-02 | 2010-01-06 | 上海华虹Nec电子有限公司 | 非易失性内存及控制方法 |
CN103092534A (zh) * | 2013-02-04 | 2013-05-08 | 中国科学院微电子研究所 | 一种内存结构的调度方法和装置 |
CN107193756A (zh) * | 2013-03-15 | 2017-09-22 | 英特尔公司 | 用于标记需要写回持久存储的非事务代码区的开头和结束的指令 |
CN103810112A (zh) * | 2014-01-28 | 2014-05-21 | 华中科技大学 | 一种非易失性内存系统及其管理方法 |
CN104239225A (zh) * | 2014-09-04 | 2014-12-24 | 浪潮(北京)电子信息产业有限公司 | 一种管理异构混合内存的方法及装置 |
CN104778126A (zh) * | 2015-04-20 | 2015-07-15 | 清华大学 | 非易失性主存中事务数据存储优化方法及系统 |
CN108475235A (zh) * | 2016-01-11 | 2018-08-31 | 高通股份有限公司 | 利用dram程序高速缓存的非易失性随机存取系统存储器 |
CN105938458A (zh) * | 2016-04-13 | 2016-09-14 | 上海交通大学 | 软件定义的异构混合内存管理方法 |
CN107818052A (zh) * | 2016-09-13 | 2018-03-20 | 华为技术有限公司 | 内存访问方法及装置 |
CN109416656A (zh) * | 2016-10-31 | 2019-03-01 | 拉姆伯斯公司 | 混合存储器模块 |
US20190042333A1 (en) * | 2017-12-29 | 2019-02-07 | Intel IP Corporation | Speculative execution tag for asynchronous dram refresh |
CN110096452A (zh) * | 2018-01-31 | 2019-08-06 | 北京忆恒创源科技有限公司 | 非易失随机访问存储器及其提供方法 |
CN110086861A (zh) * | 2019-04-19 | 2019-08-02 | 山东欧倍尔软件科技有限责任公司 | 一种协同仿真方法、系统及服务器和客户端 |
Also Published As
Publication number | Publication date |
---|---|
CN111177029B (zh) | 2022-06-21 |
US10909012B2 (en) | 2021-02-02 |
US20200151104A1 (en) | 2020-05-14 |
TW202018495A (zh) | 2020-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111177029B (zh) | 用于管理软件定义的永久性存储器的系统及方法 | |
US10983921B2 (en) | Input/output direct memory access during live memory relocation | |
US12079139B2 (en) | Hierarchical memory systems | |
GB2360377A (en) | Interface for bank of disk drives | |
CN114207596A (zh) | 将中断从输入-输出存储器管理单元提供到访客操作系统 | |
TWI640864B (zh) | 重疊輸入輸出記憶體管理單元映射及第二層記憶體讀取之二階命令緩衝器 | |
US11698862B2 (en) | Three tiered hierarchical memory systems | |
EP4018330B1 (en) | Hierarchical memory apparatus | |
US11650843B2 (en) | Hierarchical memory systems | |
US11782843B2 (en) | Hierarchical memory systems | |
US11614894B2 (en) | Hierarchical memory systems | |
US11016903B2 (en) | Hierarchical memory systems |
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 |