CN116991338B - 访问数据的方法及控制器、cxl内存模组和存储系统 - Google Patents
访问数据的方法及控制器、cxl内存模组和存储系统 Download PDFInfo
- Publication number
- CN116991338B CN116991338B CN202311264078.XA CN202311264078A CN116991338B CN 116991338 B CN116991338 B CN 116991338B CN 202311264078 A CN202311264078 A CN 202311264078A CN 116991338 B CN116991338 B CN 116991338B
- Authority
- CN
- China
- Prior art keywords
- data
- compressed
- memory
- original data
- cxl
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 77
- 238000013500 data storage Methods 0.000 claims abstract description 45
- 239000000872 buffer Substances 0.000 claims description 110
- 238000007906 compression Methods 0.000 claims description 83
- 230000006835 compression Effects 0.000 claims description 83
- 238000013507 mapping Methods 0.000 claims description 49
- 230000004044 response Effects 0.000 claims description 44
- 230000003139 buffering effect Effects 0.000 claims description 6
- 230000000694 effects Effects 0.000 claims description 3
- 238000012546 transfer Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 5
- 230000005540 biological transmission Effects 0.000 description 18
- 230000008569 process Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 230000006837 decompression Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000013144 data compression Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
一种访问数据的方法及控制器、CXL内存模组和存储系统,涉及数据存储技术,该CXL内存模组包括控制器和与所述控制器连接的一组内存芯片,所述控制器具有基于CXL协议的KV接口,所述控制器被配置为通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片或将基于对象的数据从所述内存芯片中取出。本公开实施例的CXL内存模组实现了基于KV的数据存取操作,可提高存储效率。
Description
技术领域
本公开涉及但不限于数据存储技术,更具体地,涉及一种访问数据的方法及控制器、CXL内存模组和存储系统。
背景技术
CXL(Compute Express Link,计算机快速互连)协议是一种基于PCIe(PeripheralComponent Interconnect Express, 高速串行总线扩展)物理层的内存接口协议。CXL接口是基于PCIe 链路提出的位于主机(Host)和存储设备之间的新型接口, CXL 接口可以作为一个高效的互连方式连接主机 CPU 和NVMe SSD(Non-Volatile Memory Express SolidState Drive,非易失性存储器快速访问协议固态硬盘),实现更快速的数据传输和低延迟访问。
目前CXL基于内存的应用是通过字节寻址,CPU 以Cacheline(缓存行)为操作单位(字节)从CXL内存模块读取或者写入数据,效率较低。
发明内容
本公开一实施例提供了一种CXL内存模组,包括控制器和与所述控制器连接的一组内存芯片,所述控制器具有基于CXL协议的KV接口,所述控制器被配置为通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片或将基于对象的数据从所述内存芯片中取出。
本公开一实施例还提供了一种CXL内存模组中的控制器,包括处理器、缓存器、CXL接口和内存接口,所述CXL接口之上构建有基于CXL协议的KV接口,所述处理器被配置为执行以下存数据操作:
通过所述KV接口接收外部设备发送的存数据请求,所述存数据请求携带第一对象的标识和所述第一对象的数据的信息;
在所述缓存器缓存所述第一对象的数据,为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据存入所述内存接口连接的内存芯片;
更新地址映射表以记录所述第一对象的标识与所述内存地址的对应关系。
本公开一实施例还提供了一种存储系统,包括主机及本公开任一实施例所述的CXL内存模组,所述主机通过CXL接口与所述CXL内存模组通信,实现对所述CXL内存模组的发现、配置和数据传输;通过基于CXL协议构建的KV接口与所述CXL内存模组通信,实现所述主机和所述CXL内存模组之间基于对象的数据存取。
本公开一实施例还提供了一种访问数据的方法,应用于CXL内存模组,所述CXL内存模组包括控制器和与所述控制器连接的一组内存芯片,所述控制器具有基于CXL协议的KV接口,所述方法包括:通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片或将基于对象的数据从所述内存芯片中取出。
本公开上述实施例在CXL内存模组实现了基于KV的内存存储,外部设备如主机能够通过KV接口访问CXL内存模组,外部设备与接CXL内存模组之间实现了基于KV的数据存取操作,丰富了外部设备和CXL内存模组之间的数据存取方式。由于对象数据作为整体在控制器和内存芯片之间进行存取,可提高存储效率。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的其他优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1是本公开一实施例基于CXL内存模组实现KV存储的示意图;
图2是本公开一实施例基于CXL内存模组实现KV 存储的硬件架构图;
图3A是本公开一实施例访问数据的方法的流程图;
图3B是本公开一实施例存数据方法的流程图;
图4是本公开一实施例取数据方法的流程图;
图5是本公开一实施例基于CXL内存模组实现KV 存储的方法应用于进程代码段存储的示意图;
图6是本公开一实施例基于CXL内存模组实现KV存储的模块图。
具体实施方式
本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成本申请保护的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成本申请保护的发明方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。
在大数据时代,非结构化的数据量爆发式增长,KV(Key-Value,键值对)存储是一种基于键值对的数据存储方式,适合存储非结构化数据。KV表示由唯一的键和一个相关联的值组成的数据项。键通常用于标识特定的数据项,而值则包含与该键相关联的实际数据。例如,一个键可能是用户的用户名,而关联的值可能是该用户的密码、邮箱地址或其他相关信息。本申请中,将键值对中的“键”称为对象的标识,将键值对中的“值”称为对象的数据。KV存储(KV storing)的接口(简称KV接口)可以使用的KV指令包括存(put)、取(Get)和删除(delete)等指令,存(put)指令在文中也称为存数据请求、取(Get)指令在文中也称为取数据请求。存数据请求和取数据请求中均包含对象的标识(即指定的键值),KV指令还包括响应存数据请求的指令(文中称为存数据响应)和响应取数据请求的指令(文中称为取数据响应)。除了以上基本指令外,不同的KV存储系统可能会使用一些其他的KV指令。
目前,基于KV的内存应用(如Redis)并非基于对象的标识存取数据,而是通过字节寻址(Byte Addressing)。CPU 从内存中读取对象的数据或向内存写入对象的数据时,是以缓存行(Cacheline)为基本单位进行操作。Cacheline是一个固定长度的字节数组,其数据量通常为 64 字节或128字节。这种存取数据的方式对较大的对象,例如数据量远大于1个page size(闪存页数据量)的对象进行数据存取时,需要重复多次访问内存,增加了指令交互,效率较低。另一方面,在向内存存入数据时未做压缩,或者采用在MC(memoryController,存储控制器)外部进行透明压缩的方式,需要软件维护地址与压缩后的数据之间的映射,效率较低。
为此,本公开实施例提供一种基于CXL内存模组的KV存储方法和相应的装置,还可以使用基于KV的硬件压缩/解压缩机制及交错(interleaving) 访问方式来提高数据存取的效率,本公开实施例可应用于基于KV进行内存访问的相关应用。
本公开一实施例提供了一种CXL内存模组,包括控制器和与所述控制器连接的一组内存芯片,所述控制器具有基于CXL协议的KV接口,所述控制器被配置为通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片或将基于对象的数据从所述内存芯片中取出。
本公开实施例在CXL内存模组的控制器设置基于CXL协议的KV接口,外部设备与接CXL内存模组之间实现了基于KV的数据存取操作,即能够通过在指令中携带对象标识(K值)来访问(存或取)相应对象的数据(V值),丰富了外部设备和CXL内存模组之间的数据存取方式。在控制器和内存芯片之间,由于对象数据作为整体进行存取,相对以Cacheline为单位的数据存取,可提高存储效率。本实施例的外部设备可以是与CXL内存模组连接的本地的主机(host),也可以是远程的主机或者其他能够发起数据访问的处理器件。本公开对此不做局限。
在本公开一示例性实施例中,所述控制器将基于对象的数据存入所述内存芯片,包括:获取对象的原始数据;对所述对象的原始数据进行压缩,得到所述对象的压缩数据;将所述对象的压缩数据写入所述内存芯片;所述控制器将基于对象的数据从所述内存芯片取出,包括:将所述内存芯片中存储的所述对象的压缩数据读出;对所述对象的压缩数据进行解压缩,得到所述对象的原始数据并传输到外部。本实施例通过数据压缩,可以减少对存储空间的占用,加快存储的速度。
图1所示是本公开实施例基于CXL内存模组实现KV存储的示意图。图示的存储系统包括主机10和CXL内存模组。CXL内存模组又包括CXL控制器20和与其连接的内存芯片30,CXL控制器在文中简称为控制器,也可称为CXL存储控制器(CXL Memory Controller)。CXL控制器20在实体上可以用CXL芯片实现但不局限于此。CXL控制器20是 CXL 技术中的一种重要组件,用于管理与其连接的一个或多个内存芯片30,例如,通过交错访问指令(Interleaving Access instruction)访问内存芯片30,图中以DRAM芯片作为内存芯片的示例,但本公开不局限于此,也可以是其他类型的内存芯片,如SRAM(Static RandomAccess Memory)、Flash存储器、易失性随机存取存储器(NVRAM,Non-Volatile RandomAccess Memory)等。CXL控制器和内存芯片之间可以是分离的,可以通过PCIe接口等各种类型的接口连接,也可以集成在一起,如集成在一个PCB板上,或集成在一个芯片。
CXL控制器20启动时,会与连接的DRAM芯片30建立通信链路并对DRAM芯片30进行初始化;在正常运行状态下,CXL控制器20可以接收来自外部设备(如主机或其他设备)的KV指令(如存数据请求或取数据请求),转换为相应的 DRAM访问操作。为了提高内存访问效率和性能,CXL控制器20可对 DRAM芯片30中的数据进行缓冲和预取,以减少 DRAM 访问延迟和提高带宽利用率。
如图1所示,主机10(如CPU)可通过CXL接口与CXL控制器20连接,使用CXL输入输出(CXL.io)协议和/或CXL内存协议(CXL.mem)与CXL内存模组的CXL控制器20交互。本实施例还在主机10和CXL控制器20之间构建基于CXL.io协议的KV接口,以使主机10能够基于KV指令与CXL控制器20交互,实现基于对象的内存读写,对于较大对象的数据(如数据量(datasize)大于1 个闪存页的大小 (4KB/16KB))存取,主机访问CXL内存模组时使用的指令数量少于采用字节寻址方式时使用的指令数量,可减少系统时延,提高存储效率。此外,在存数据时,CXL控制器20可以将对象的数据压缩后再存储到CXL内存模组的DRAM芯片30,在取数据时,CXL控制器20从DRAM芯片读出对象的压缩数据,解压缩后再输出,对象的压缩数据相对于对象的原始数据,其所需的存取时间较少且占用的存储空间较小,可以提高数据存储的效率。
本实施例的一示例中,请参见图6,基于CXL协议的KV接口可以通过在CXL.io协议层(即CXL存储协议层)62之上构建的KV解释器61实现,参见图3,KV解释器61被配置为提取作为要传输的数据封装在CXL.io指令中的KV请求并对所述KV请求进行解析,及,将所述KV响应作为要传输的数据封装到CXL.io指令中发送。在另一示例中,基于CXL协议的KV接口可以通过在CXL.mem协议层之上构建的KV解释器实现,KV解释器被配置为提取作为要传输的数据封装在CXL.mem指令中的KV请求并对所述KV请求进行解析,及,将所述KV响应作为要传输的数据封装到CXL.mem指令中发送,其中,所述KV请求包括存数据请求和取数据请求,所述KV响应包括存数据响应和取数据响应。在CXL.mem协议层之上构建KV解释器时,将KV指令作为要传输的数据通过CXL.mem指令传输时,可以使用CXL.io指令来辅助传输,如指示数据传输的开始和结束。
本公开一示例性实施例中,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片,包括:
通过所述KV接口接收外部设备发送的存数据请求,所述存数据请求携带第一对象的标识和所述第一对象的数据的信息;
缓存所述第一对象的数据,为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片;
更新地址映射表以记录所述第一对象的标识与所述内存地址的对应关系。
文中,“第一对象”可以是需要在内存中存储其数据的任何对象,并非表示某一个特殊的对象,可以用于区别于同时存储的其他对象。上述“外部设备”可以是具有内存读写需求的任何设备,如主机、显卡、网络适配器、嵌入式系统等等。上述“内存芯片”除了可以为DRAM芯片外,还可以是其他类型的内存芯片,如SRAM、FRAM(Ferroelectric Random AccessMemory,铁电随机存取存储器)、MRAM(Magnetoresistive Random Access Meory,磁阻随机存取存储器”)等。“基于对象的数据”是指KV中的V或V的地址,且存指令和取指令中包含KV中的K即对象标识。
本公开一示例性实施例中,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据;
将所述第一对象的数据传输到外部。
本公开实施例的CXL内存模组在原有CXL接口上,构建了基于CXL协议的KV接口(也可称为KV存储接口)。控制器可以通过KV接口接收外部设备发送的KV指令,如果接收到的是存数据请求,则缓存对象的数据并分配内存地址,根据内存地址将对象的数据存入内存芯片,记录对象的标识与为对象分配的内存地址之间的对应关系,便于根据对象的标识读出存入的数据。如果接收到的是取数据请求,则查找到对象的标识对应的内存地址,将从内存芯片读出对象的数据缓存后输出。本实施例的CXL内存模组实现了基于KV的数据存取,外部设备(如主机)能够访问CXL内存模组进行非结构化数据的对象存取操作,一次存取的数据量不受Cacheline数据量的限制,可以减少存取所需的指令数量(一个或多个对象的数据存取只需要发送一请求指令和接收一响应指令),提高数据存储效率。
如前所述,一些技术在内存存储数据时,未对数据进行压缩。另一些技术是在存储控制器外部进行压缩,存储系统的整体效率较低。而本公开实施例针对KV 对象,可以由CXL内存模组在存入对象的数据之前完成数据压缩;读对象的数据时,完成数据解压缩后再输出数据。即在CXL内存模组中完成透明压缩,数据经过压缩之后数据量变小,占用的存储空间少,写入速度快。且外部软件无需维护压缩数据与地址的映射,不会给外部设备带来的负担,有利于提高存储系统的整体效率。
在对对象的数据进行压缩和解压缩的实施例中,为了区别于压缩之后的第一对象的数据(即第一对象的压缩数据),将缓存后未经压缩的第一对象的数据称为第一对象的原始数据。文中将缓存器中用于缓存这些待写入内存芯片的数据的缓冲区称为第一缓冲区,用于缓存从内存芯片读出的数据的缓冲区称为第二缓冲区。CXL内存模组的控制器从源地址读取的对象的数据或者从存数据请求中解析得到的对象的数据,在未经压缩之前,均称为该对象的原始数据,原始数据可以是经过主机等外部设备处理得到的数据。
在本公开一示例性实施例中,所述控制器缓存所述第一对象的数据,包括:在第一缓冲区缓存所述第一对象的原始数据;
所述控制器还被配置为:确定缓存的所述第一对象的原始数据为待压数据的情况下,采用以下的多对象压缩方式对所述第一对象的原始数据进行压缩:
判断所述第一缓冲区中已缓存待压数据的总量是否大于或等于设定的第一阈值:
如果大于或等于所述第一阈值,记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到待存压缩数据;
如果小于所述第一阈值,则在有新的对象的原始数据加入,使得所述第一缓冲区中已缓存待压数据的总量大于或等于所述第一阈值的情况下,再记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到所述待存压缩数据。
本实施例的一示例中,已缓存待压数据中有三个对象,第一个对象的原始数据的数据量为1KB,第二个对象的原始数据的数据量为3KB,第三个对象的原始数据的数据量为7KB,则第一个对象的原始数据的偏移为0,第二个对象的原始数据的偏移为1KB,第三个对象的原始数据的偏移为4KB。
本实施例的一示例中,所述第一阈值根据所述第一缓冲区的大小确定,例如,所述第一阈值不小于4KB、8KB、16KB、32KB、64KB、128KB或256KB。根据第一缓冲区的大小来确定第一阈值时,第一缓冲区的空间越大,可以将第一阈值也相应设置的较大但需要小于第一缓冲区的大小。而第一阈值设置的越大,一次压缩的数据越多,压缩效率会有所提升。
本实施例CXL内存模组支持多对象压缩方式。在多对象压缩方式下,在缓存的多个对象的原始数据的总量达到第一阈值时,可以将缓存的多个对象的原始数据作为一个整体进行压缩,得到待存压缩数据。但多对象压缩方式下并不一定要对多个对象的原始数据一起压缩,也允许对单个对象的原始数据进行压缩,例如,单个对象的原始数据的数据量大于或等于第一阈值、小于第一缓冲区的大小时,则即使采用多对象压缩方式,也是对该对象的原始数据进行单独压缩。而在该对象的原始数据的数据量大于第一缓冲区的大小时,可以对该对象的原始数据分批进行多次压缩。
本实施例一示例中,对所有对象均采用多对象压缩方式,所述已缓存待压数据包括已缓存的所有对象的原始数据,所述控制器将缓存的所述第一对象的原始数据直接确定为待压数据,即本示例所有对象待写入内存芯片的原始数据均需要先压缩。本实施例另一示例中,只对指定对象采用多对象压缩方式,此时所述已缓存待压数据只包括已缓存的指定对象的原始数据,所述控制器在所述第一对象是指定对象的情况下,才确定缓存的所述第一对象的原始数据为待压数据;其中,所述指定对象是原始数据的数据量大于或等于设定的第二阈值的对象,所述第二阈值小于所述第一阈值。
对于多对象压缩方式,通过以下几个具体的示例加以说明:
在一个示例中,对所有对象,无论其数据大小,均需要进行压缩。此时已缓存待压数据包括已缓存的所有对象的原始数据。假定第一对象的原始数据的数据量为4KB,第一缓冲区中之前缓存有第二对象的原始数据,其数据量为12KB,而第一阈值为16KB,由于所有对象的原始数据均为待压数据,故缓存第一对象的原始数据后,第一缓冲区中已缓存待压数据的数据总量已达到16KB,等于第一阈值,此时记录第一对象的原始数据在已缓存待压数据中的偏移为12KB。第二对象的原始数据在已缓存待压数据中的偏移为0KB,将该16KB的已缓存待压数据作为一个整体进行压缩,得到待存压缩数据,假定压缩率为50%,则待存压缩数据有8KB。在取数据时,无论是要取第一对象还是第二对象的数据,均会先取出该待存压缩数据,解压缩得到所述已缓存待压数据,再根据编移从中提取第一对象或第二对象的原始数据。
在另一个示例中,第一阈值为32KB,其他条件与上一示例相同,则在第一缓冲区缓存第一对象的原始数据后,已缓存待压数据的数据总量为16KB,小于第一阈值,此时会等待新的对象的数据加入,使得第一缓冲区中已缓存待压数据的数据总量大于或等于32KB时,再记录已缓存待压数据中每一对象的原始数据的偏移,将已缓存待压数据作为整体进行压缩。
在又一个示例中,只对指定对象的原始数据进行压缩,例如只有在对象的数据大于或等于1KB时,该对象才是指定对象。仍假定第一对象的原始数据的数据量为4KB,第一缓冲区中之前缓存有11.5KB的第二对象的原始数据和0.5KB的第三对象的原始数据,第一阈值为16KB。此时虽然已缓存数据的数据总量达到第一阈值16KB,但其中的第三对象不是指定对象,故已缓存待压数据只有15.5KB,需要等待新的对象的数据加入,使得第一缓冲区中已缓存待压数据的数据总量达到16KB,再记录已缓存待压数据中每一对象的原始数据的偏移,将已缓存待压数据作为整体进行压缩。需要说明的是,指定对象和非指定对象在第一缓冲区中可以分区存储,实时统计已缓存的指定对象的原始数据的总量。在本示例中,已缓存数据包括指定对象的原始数据和非指定对象的原始数据,而已缓存待压数据只包括指定对象的原始数据。
本实施例控制器在已缓存待压数据达到设定的第一阈值后,再对其中包含的一个或多个对象的原始数据一起压缩,可以充分利用缓冲空间,提高压缩效果。第一阈值的设置,使得每次压缩后得到的待存压缩数据不会太小,在存入内存时,可以切为多个数据块,采用交错方式并行存入内存芯片,以充分利用控制器与内存芯片之间的通道,一次存入较多数据,达到减少存储介质的存取次数,提高系统效率的效果。
本实施例的一示例中,在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述控制器为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片,包括:
将所述待存压缩数据切分为多个数据块,所述第一对象的压缩数据位于其中至少一个数据块中;
为所述多个数据块中不同的数据块分配同一交错区域中不同内存区的内存地址,将为所述多个数据块分配的内存地址作为为所述待存压缩数据所属的所有对象统一分配的内存地址;
根据为所述多个数据块分配的内存地址,以交错访问方式将所述多个数据块分别写入各自对应的内存区;
其中,一个交错区域包括一个或多个所述闪存芯片中的内存区。
在内存芯片如DRAM中,内部的数据访问可以采用交错(Interleaving)访问方式。交错访问方式将一个闪存芯片连续的内存地址空间划分为多个 Interleave(交错)区域,每个交错区域包含多个内存区(Bank)。交错访问是将数据均匀地分布到多个 Bank 中,每个 Bank 存储其中一部分数据,系统能够并行访问多个Bank的数据,从而提高内存访问的效率。例如,一个存储系统有 4 个 Bank,采用 2路Interleaving方式,则将内存地址空间划分为两个 Interleave 区域,每个 Interleave 区域包含 2 个 Bank。系统可以同时访问同一Interleave 区域中的多个bank。本公开实施例将Interleaving方式扩展到多个闪存芯片,一个Interleave 区域可以包含多个闪存芯片中的Bank,以同时利用多个DRAM芯片的并行读写能力,提高存储性能和吞吐量。
为了采用Interleaving方式将待存压缩数据存入内存芯片,需要先对待存压缩数据进行切分(stripe)。具体的 Stripe 操作方式可以根据具体的存储架构和算法而异。例如,切分时,尽量将数据块分散存储在所有可用的存储设备上,以实现最大化的性能和负载均衡。将待存压缩数据切分成多个连续的数据块(除最后一个数据块外各个数据块的大小等于设定值)后,可以采用轮流选择、哈希函数或其他算法为不同的数据块选择不同的Bank,以尽可能地减少冲突和提高并发性能。在一个示例中,控制器根据所连接的所有内存芯片的存储空间创建一个连续的内存地址空间用于分配,其中的每一内存地址对应于一个实际的物理地址(物理地址可由内存芯片ID、bank ID、行ID和列ID一起标识),从创建的内存地址空间为不同的数据块分配同一交错区域内不同Bank的内存地址时,可以先分配一个首地址给第一个数据块,在该首地址基础上加上一个偏移值,分配给第二个数据块,在该首地址基础上加上两个偏移值,分配给第三个数据块,依此类推。如此就不需要单独记录为每个数据块分配的内存地址,根据为第一个数据块分配的内存地址、设定偏移值及分配顺序,可以得到为所有数据块分配的内存地址。
本实施例支持的多对象压缩方式可以将多个对象的数据一起压缩,相应地,切分成的数据块的大小也可以设定的比较大,从而取得更高的访问效率。
本公开一示例性实施例中,只对指定对象的原始数据进行压缩,对于非指定对象不进行压缩。所述控制器还被配置为在所述已缓存待压数据只包括已缓存的指定对象的原始数据,且所述第一对象不是指定对象的情况下,按以下方式为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片:不对所述第一对象的原始数据进行压缩,直接根据所述第一对象的原始数据为所述第一对象分配内存地址,根据分配的所述内存地址将所述第一对象的原始数据写入所述内存芯片。
本实施例考虑到对象的数据较少时,如小于1KB,如果将该对象与其他对象一起压缩,在取数据时,需要读出一起压缩的所有对象的压缩数据(即待存压缩数据)并进行解压缩和缓存,取数据的效率会降低。因此本实施例根据对象大小将对象分为两种:指定对象和非指定对象。对指定对象(较大的对象),采用多对象压缩方式将其数据压缩后存入DRAM芯片,而对于非指定对象(较小的对象),则为该对象的原始数据分配内存地址,将该对象的原始数据直接存入DRAM芯片。这样可以在取非指定对象的数据时,可以根据分配的内存地址从DRAM芯片读出该对象的原始数据并缓存在第二缓冲区,无需读出其他不需要的对象的数据,也不需要对读出的数据进行解压缩,可以提高取数据效率。同时,较小的对象本身占用的存储空间少而且需要的存入次数少,直接存入DRAM芯片对存数据的效率影响不大。本实施例通过对不同对象的不同处理,可以提高存储系统整体的性能。
本公开另一示例性实施例中,只对指定对象的原始数据进行压缩,对于非指定对象,再分成两种情况,一种不进行压缩,另一种采用单对象压缩方式进行压缩。本实施例所述控制器还被配置为在所述已缓存待压数据只包括已缓存的指定对象的原始数据,且所述第一对象不是指定对象的情况下,按以下方式为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片:
先确定所述第一对象的原始数据的数据量是否大于或等于设定的第三阈值,所述第三阈值小于所述第二阈值:
如果大于或等于第三阈值,采用单对象压缩方式对所述第一对象的原始数据单独压缩,根据所述第一对象的压缩数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的压缩数据写入所述内存芯片;
如果小于第三阈值,不对所述第一对象的原始数据进行压缩,根据第一对象的原始数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的原始数据写入所述内存芯片。
本实施例在区分两种对象的基础上,进一步细化处理。即确定第一对象不是指定对象时,再分为两种情况按不同的方式进行存数据处理。也即本实施例根据对象的原始数据的大小将对象分为三种:
对数据量小于第三阈值(如32字节,64字节、128字节等)的对象(可称为小对象),不进行压缩,将其原始数据直接写入内存芯片。不对对象的原始数据进行压缩的情况下,一次可以写一个小对象的原始数据,也可以在多个小对象的已缓存数据达到设定的第四阈值(第四阈值小于第二阈值且大于第三阈值)时,再将多个小对象的原始数据一起存储到内存芯片;
对数据量大于等于第三阈值且小于第二阈值(如512byte,1KB,2KB等)的对象(中间大小的对象),采用单对象压缩方式,即对单个对象的原始数据进行压缩后存入内存芯片。单个对象的压缩数据也可以采用interleaving 方式存入内存芯片,例如,先将该对象的压缩数据切分为多个数据块,为多个数据块分配同一interleaving区域不同bank中的内存地址,再基于分配的地址以interleaving 方式将所述多个数据块并行存入内存芯片。
对数据量大于等于第二阈值的对象(称为大对象),采有多对象压缩方式,其中,在大对象的数据量小于第一阈值(如4KB、8KB、16KB等)时,和其他对象的原始数据一起压缩后存入内存芯片;在大对象的原始数据大于或等于第一阈值时,可以对该大对象单独压缩,属于多对象压缩方式下需要单独压缩的情况。
为了记录某一个对象采用的压缩方式,可以查找对象的元数据得到对象原始数据的数据量,根据该数据量来判断该对象的压缩方式。也可以在本地(如映射表)为每一对象增加一个压缩方式标记,用于表示该对象采用的压缩方式,压缩方式可以包括以下三种方式中的至少两种:不压缩、单对象压缩方式或多对象压缩方式。
本实施例增加了针对中间大小的对象采用的单对象压缩方式,存数据时,经过压缩的数据量变小,存储速度较快且空间占用较少,取数据时可以单独取出该对象的压缩数据,经解压缩后缓存,不需要读出其他对象的数据。本实施例区分3种不同对象的处理方式,可以进一步提高存储系统整体的性能,例如能够更好地平衡存数据和取数据的速度。
在本公开另一示例性实施例中,不同于前述实施例,是对指定对象(较大的对象)采用多对象压缩方式,对非指定对象均采用单对象压缩方式,对象是属于指定对象还是非指定对象,可以通过将对象的原始数据的数据量与设定的第二阈值比较而确定。
本公开一示例性实施例中,所述第一对象的数据的信息包括所述第一对象的原始数据的数据量和源地址;所述控制器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述数据量和源地址,根据所述数据量和源地址从外部读取所述第一对象的原始数据并缓存在第一缓冲区;或者,所述第一对象的数据的信息包括所述第一对象的原始数据;所述控制器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述第一对象的原始数据,将所述第一对象的原始数据缓存在第一缓冲区。
也就是说,要存入内存的对象的数据可以直接携带在存数据请求中,也可以将对象的数据先存储在外部存储器(如主机使用的缓存或其他内存中),需要将对象的数据存入内存时,外部设备将对象的数据当前所在的外部地址作为源地址携带在发送的存数据请求中,CXL控制器从源地址读取数据写入第一缓冲区。
外部设备可以根据设定的数据量阈值来选择采用哪一种数据传输方式,例如,在对象的数据量小于设定的数据量阈值时,将对象的数据直接携带在存数据请求中,这种传输方式可以简化操作,节省带宽。在有很多小对象的场景下可以加快存储速度,减小时延。而在对象的数据量大于或等于所述数据量阈值时,则将其数据的源地址携带在取数据请求中;如第一缓冲区可以缓存所有数据,CXL控制器可以从外部一次读取该对象的全部数据存入第一缓冲区;如果第一缓冲区的空间不足时,也可以分多次读取,每次读取和缓存的部分数据,将这部分数据写入内存后,再进行下一次的读取。
本公开一示例性实施例中,所述控制器还被配置为:接收外部设备发送的存数据请求后,从所述存数据请求中提取出所述第一对象的元数据,所述第一对象的元数据包括但不限于所述第一对象的标识和数据量;及,通过所述内存接口,将所述第一对象的元数据保存到所述内存芯片中为对象的元数据创建的存储空间。对象的元数据还可以包括对象的创建时间、修改时间等。为对象的元数据创建的存储空间可以是DRAM芯片中划分的一个空间(或称为预留的空间),可以通过构建链表、使用多级目录等方式优化元数据的存储。虽然本实施例是将对象的元数据保存在DRAM中,但在其他实施例中,对象的元数据也可以保存在控制器的缓冲器中,如与存数据时需要更新的地址映射表一起保存,或者,单独保存在控制器的缓存器中或内存芯片划分出的空间中。
本公开一示例性实施例中,在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
根据所述第一对象的标识查找所述地址映射表,找到为所述待存压缩数据切分成的多个数据块分配的内存地址;
根据所述内存地址从所述内存芯片读出所述多个数据块,将所述多个数据块拼接为所述待存压缩数据,对所述待存压缩数据解压缩,得到所述已缓存待压数据并缓存在第二缓冲区;
根据所述第一对象的原始数据的数据量及在所述已缓存待压数据中的偏移,从所述已缓存待压数据中提取出所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
以第一对象为指定对象的情况为例,待存压缩数据中可能包括一个或多个对象的压缩数据。如果包括多个对象(包含第一对象)的压缩数据,并不记录每个对象的压缩数据各自所在的内存地址。而是将为待存压缩数据切分成的多个数据块分配的内存地址作为为所述多个对象统一分配的内存地址。在地址映射表中记录第一对象的标识与为第一对象分配的内存地址之间的对应关系时,也是记录第一对象的标识与统一分配的所述内存地址之间的对应关系。在这种情况下,地址映射表中所述多个对象的标识均对应于统一分配的所述内存地址。而要读取所述多个对象中任一对象的数据时,根据该对象的标识从地址映射表均可找到统一分配的所述内存地址,根据所述内存地址从内存芯片中读出多个数据块,按原顺序拼接成原来的待存压缩数据,对该待存压缩数据解压缩后可以得到按原有顺序排列的多个对象的原始数据,也即存数据时包含第一对象原始数据的所述已缓存待压数据,将所述已缓存待压数据缓存在第二缓冲区。再根据存数据时记录的第一对象的原始数据在已缓存待压数据中的偏移和该对象的原始数据的数据量,就可以从所述已缓存待压数据中提取出该对象的原始数据。
第一对象的原始数据的数据量可以通过解析存数据请求得到。第二缓冲区和第一缓冲区分别缓存待写入数据和读出数据,可以是同一缓冲器中的缓冲区,也可以是不同缓冲器中的缓冲区。属于同一缓冲器的多个缓冲区可以根据缓冲器的配置信息划分得到。缓冲器可以采用SRAM(Static Random Access Memory,静态随机访问存储器)但不局限于此。
本公开另一示例性实施例中,在不对所述第一对象的原始数据进行压缩的情况下,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的原始数据,将所述第一对象的原始数据缓存在第二缓冲区;
将所述第一对象的部分或全部原始数据传输到外部。
本实施例对于存数据时不进行压缩的对象,可以直接根据内存地址从内存芯片中读出该对象的原始数据,缓存后传输到外部。
本公开另一示例性实施例中,在采用单对象压缩方式对所述第一对象的原始数据进行压缩的情况下,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的压缩数据并缓存在第二缓冲区;
对所述第一对象的压缩数据解压缩得到所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
本实施例对于存数据时采用单对象压缩方式的对象,根据内存地址从内存芯片中读出该对象的压缩数据并缓存,解压缩后得到该对象的原始数据并传输到外部。
本公开一示例性实施例中,所述取数据请求还携带待取数据的数据量信息及所述待取数据在所述第一对象的原始数据中的偏移信息;所述控制器将所述第一对象的部分原始数据传输到外部,包括:根据所述数据量信息和偏移信息,从所述第一对象的原始数据中提取出所述待取数据,将所述待取数据传输到外部。本实施例可以支持取出对象的部分数据,具有更好的灵活性,可提高存储系统的整体性能。
本公开一示例性实施例中,所述控制器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据携带在取数据响应中,发送给所述外部设备;或者,所述取数据请求中还携带用于保存取出数据的外部地址的信息,即外部设备指定了取出的数据要保存到的存储空间,所述控制器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据写入到所述外部地址对应的存储空间。这两种将读出的数据传输到外部的方式,第一种方式(将数据携带在取数据响应中)可以利用数据响应,实现对小对象的快速传输。第二种方式可以支持对较大的数据块的传输。
本公开上述实施例基于CXL内存模块实现了基于KV的数据存取,还可以利用基于KV的硬件压缩/解压缩机制及interleaving 访问方式,取得更好的存储效率。可以应用于基于KV 内存访问的相关应用。
本公开一实施例提供了一种CXL内存模组中的控制器,如图2所示,包括处理器21、缓存器24、CXL接口22和内存接口26,所述CXL接口之上构建有基于CXL协议的KV接口23。处理器21与各个接口、缓冲器之间可以通过总线连接。处理器21被配置为执行以下存数据操作:
通过所述KV接口23接收外部设备(如主机10)发送的存数据请求,所述存数据请求携带第一对象的标识和所述第一对象的数据的信息;
在缓存器24中缓存所述第一对象的数据,为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据存入所述内存接口26连接的内存芯片30;
更新地址映射表以记录所述第一对象的标识与所述内存地址的对应关系。
在接收存数据请求,在缓存器24缓存所述第一对象的数据后,处理器21即可向外部设备返回存数据响应,不需要等到数据写入内存芯片。
本实施例控制器20中的处理器21可以是通用处理器,包括中央处理器(CentralProcessing Unit,简称CPU)、网络处理器(Network Processor,简称NP)、微处理器等等,也可以是其他常规的处理器等;所述处理器还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)、离散逻辑或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件;也可以是上述器件的组合。即上述实施例的处理器可以是实现本发明实施例中公开的各方法、步骤及逻辑框图的任何处理器件或器件组合。如果部分地以软件来实施本公开实施例,那么可将用于软件的指令存储在合适的非易失性计算机可读存储媒体中,且可使用一个或多个处理器在硬件中执行所述指令从而实施本公开实施例的方法。
在本公开一示例性实施例中,处理器21还被配置为执行以下取数据操作:
通过KV接口23接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片30读出所述第一对象的数据;
将所述第一对象的数据传输到外部。
本实施例的一示例中,请参见图2和图6,基于CXL协议的KV接口可以通过在CXL.io协议层62之上构建的KV解释器61实现, KV解释器61被配置为提取封装在CXL.io指令中的KV请求并对所述KV请求进行解析,及,将所述KV响应封装到CXL.io指令中发送,其中,所述KV请求包括存数据请求和取数据请求,所述KV响应包括存数据响应和取数据响应。在另一示例中,基于CXL协议的KV接口可以通过在CXL.io协议层62和CXL.mem协议层62上构建的KV解释器61,或者在CXL.mem协议层62上构建的KV解释器61实现, KV解释器61被配置为提取封装在CXL.mem指令中的KV请求并对所述KV请求进行解析,及,将所述KV响应封装到CXL.mem指令中发送。本实施例中,KV请求和KV响应可以作为要传输的数据封装在CXL.io指令或CXL.mem指令中。CXL内存模组和CPU中的KV解释器61可以根据设定的KV指令的数据格式识别出KV指令并进行解析。
本实施例通过KV存储,可以对对象的数据采用大块数据存储(如数据量(datasize)大于1个闪存页大小 (4KB/16KB))的方式,以充分利用多个内存芯片的interleaving访问方式,提高系统带宽。
本公开一示例性实施例中,所述处理器缓存所述第一对象的数据,包括:在所述缓存器的第一缓冲区缓存所述第一对象的原始数据;
所述控制器还包括压缩引擎25,所述处理器还被配置为:确定缓存的所述第一对象的原始数据为待压数据的情况下,使用所述压缩引擎,采用以下的多对象压缩方式对所述第一对象的原始数据进行压缩:
判断所述第一缓冲区中已缓存待压数据的总量是否大于或等于设定的第一阈值:
如果大于或等于所述第一阈值,记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到待存压缩数据;
如果小于所述第一阈值,则在有新的对象的原始数据加入,使得所述第一缓冲区中已缓存待压数据的总量大于或等于所述第一阈值的情况下,再记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到所述待存压缩数据。
本实施例的一示例中,在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述处理器为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据存入所述内存接口连接的内存芯片,包括:
将所述待存压缩数据切分为多个数据块,所述第一对象的压缩数据位于其中至少一个数据块中;
为所述多个数据块中不同的数据块分配同一交错区域中不同内存区的内存地址,将为所述多个数据块分配的内存地址作为为所述待存压缩数据所属的所有对象统一分配的内存地址;
根据为所述多个数据块分配的内存地址,以交错访问方式将所述多个数据块分别写入各自对应的内存区;
其中,一个交错区域包括一个或多个所述闪存芯片中的内存区。
本实施例的一示例中,所述第一阈值根据所述第一缓冲区的大小确定,所述第一阈值不小于4KB、8KB、16KB、32KB、64KB、128KB或256KB。
本实施例的一示例中,所述已缓存待压数据包括已缓存的所有对象的原始数据,所述处理器将缓存的所述第一对象的原始数据直接确定为待压数据;或者,所述已缓存待压数据只包括已缓存的指定对象的原始数据,所述处理器在所述第一对象是指定对象的情况下,才确定缓存的所述第一对象的原始数据为待压数据;其中,所述指定对象是原始数据的数据量大于或等于设定的第二阈值的对象,所述第二阈值小于所述第一阈值。
本公开一示例性实施例中,所述处理器还被配置为在所述已缓存待压数据只包括已缓存的指定对象的原始数据,且所述第一对象不是指定对象的情况下,按以下方式为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据存入所述内存接口连接的内存芯片:
不对所述第一对象的原始数据进行压缩,直接根据所述第一对象的原始数据为所述第一对象分配内存地址,根据分配的所述内存地址将所述第一对象的原始数据写入所述内存芯片;或者
先确定所述第一对象的原始数据的数据量是否大于或等于设定的第三阈值,所述第三阈值小于所述第二阈值:如果大于或等于第三阈值,采用单对象压缩方式对所述第一对象的原始数据单独压缩,根据所述第一对象的压缩数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的压缩数据写入所述内存芯片;如果小于第三阈值,不对所述第一对象的原始数据进行压缩,根据第一对象的原始数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的原始数据写入所述内存芯片。
本公开一示例性实施例中,所述第一对象的数据的信息包括所述第一对象的原始数据的数据量和源地址;所述处理器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述数据量和源地址,根据所述数据量和源地址从外部读取所述第一对象的原始数据并缓存在第一缓冲区;或者,所述第一对象的数据的信息包括所述第一对象的原始数据;所述处理器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述第一对象的原始数据,将所述第一对象的原始数据缓存在所述第一缓冲区。
本公开一示例性实施例中,在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述处理器还被配置为执行以下取数据操作:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
根据所述第一对象的标识查找所述地址映射表,找到为所述待存压缩数据切分成的多个数据块分配的内存地址;
根据所述内存地址从所述内存芯片读出所述多个数据块,将所述多个数据块拼接为所述待存压缩数据,对所述待存压缩数据解压缩,得到所述已缓存待压数据并缓存在第二缓冲区;
根据所述第一对象的原始数据的数据量及在所述已缓存待压数据中的偏移,从所述已缓存待压数据中提取出所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
本公开一示例性实施例中,在不对所述第一对象的原始数据进行压缩的情况下,所述处理器还被配置为执行以下取数据操作:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的原始数据,将所述第一对象的原始数据缓存在第二缓冲区;
将所述第一对象的部分或全部原始数据传输到外部。
本公开一示例性实施例中,在采用单对象压缩方式对所述第一对象的原始数据进行压缩的情况下,所述处理器还被配置为执行以下取数据操作:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的压缩数据并缓存在第二缓冲区;
对所述第一对象的压缩数据解压缩得到所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
本公开一示例性实施例中,所述取数据请求还携带待取数据的数据量信息及所述待取数据在所述第一对象的原始数据中的偏移信息;
所述处理器将所述第一对象的部分原始数据传输到外部,包括:根据所述数据量信息和偏移信息,从所述第一对象的原始数据中提取出所述待取数据,将所述待取数据传输到外部。
本公开一示例性实施例中,所述处理器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据携带在取数据响应中,发送给所述外部设备;或者
所述取数据请求中还携带用于保存取出数据的外部地址的信息,所述控制器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据写入到所述外部地址对应的存储空间。
本公开一示例性实施例中,所述处理器还被配置为:接收外部设备发送的存数据请求后,从所述存数据请求中提取出所述第一对象的元数据,所述第一对象的元数据包括所述第一对象的标识和数据量;及,通过所述内存接口,将所述第一对象的元数据保存到所述内存芯片中为对象的元数据创建的存储空间。地址映射表可以与元数据一起保存,但也可以单独保存在控制器的缓存器中或内存芯片划分出的空间中。
本公开上述实施例基于CXL内存模块实现了基于KV的内存存储,还可以利用基于KV的硬件压缩/解压缩机制及interleaving 访问方式,取得更好的存储效率。可以应用于基于KV 内存访问的相关应用。
本公开一实施例还提供了一种存储系统,如图1、图2所示,包括主机10和本公开任一实施例所述的CXL内存模组(包括控制器20和内存芯片30),主机通过CXL接口与CXL内存模组通信,实现对所述CXL内存模组的发现、配置和数据传输;通过基于CXL协议构建的KV接口与所述CXL内存模组通信,实现所述主机和所述CXL内存模组之间基于对象的数据存取。其中,CXL接口可支持CXL.io协议和CXL.mem协议,通过CXL.io协议可以实现对CXL内存模组的发现、配置和数据传输,通过CXL.mem协议也可以实现数据传输。KV指令可以作为要传输的数据封装在CXL.io指令(或CXL.mem指令)中传输。使得主机可以通过KV接口与CXL内存模组通信,实现主机和CXL内存模组之间基于对象的数据存取。
本公开一实施例还提供了一种访问数据的方法,应用于CXL内存模组,所述CXL内存模组包括控制器和与所述控制器连接的一组内存芯片,所述控制器具有基于CXL协议的KV接口,如图3A所示,所述方法包括:
步骤100,通过所述KV接口接收外部设备发送的KV指令;
步骤105,将基于对象的数据存入所述内存芯片或将基于对象的数据从所述内存芯片中取出。
上述访问数据的方法可以是存数据的方法或者取数据的方法。
本公开一示例性实施例中,如图3B所示,提供了一种存数据方法,所述通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片,包括:
步骤110,通过所述KV接口接收外部设备发送的存数据请求,所述存数据请求携带第一对象的标识和所述第一对象的数据的信息;
步骤120,缓存所述第一对象的数据,为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片;
步骤130,更新地址映射表以记录所述第一对象的标识与所述内存地址的对应关系。
上述存数据方法可以由CXL内存模组中的控制器来执行。
本实施例方法通过KV接口接收外部设备发送的KV指令,如果接收到的是存数据请求,则缓存对象的数据并分配内存地址,根据内存地址将对象的数据存入内存芯片,并记录对象的标识与为对象分配的内存地址之间的对应关系。本实施例基于KV的内存存储,外部设备如主机能够访问CXL内存模组进行非结构化数据的对象存取操作,且一次存取的数据量不受Cacheline数据量的限制,从而减少存储介质的存取次数,提高数据存储效率。
本公开一示例性实施例中,所述缓存所述第一对象的数据,包括:在第一缓冲区缓存所述第一对象的原始数据;
所述存数据方法还包括:确定缓存的所述第一对象的原始数据为待压数据的情况下,采用以下的多对象压缩方式对所述第一对象的原始数据进行压缩:
判断所述第一缓冲区中已缓存待压数据的总量是否大于或等于设定的第一阈值:
如果大于或等于所述第一阈值,记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到待存压缩数据;
如果小于所述第一阈值,则在有新的对象的原始数据加入,使得所述第一缓冲区中已缓存待压数据的总量大于或等于所述第一阈值的情况下,再记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到所述待存压缩数据。
本公开一示例性实施例中,在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片,包括:
将所述待存压缩数据切分为多个数据块,所述第一对象的压缩数据位于其中至少一个数据块中;
为所述多个数据块中不同的数据块分配同一交错区域中不同内存区的内存地址,将为所述多个数据块分配的内存地址作为为所述待存压缩数据所属的所有对象统一分配的内存地址;
根据为所述多个数据块分配的内存地址,以交错访问方式将所述多个数据块分别写入各自对应的内存区;
其中,一个交错区域包括一个或多个所述闪存芯片中的内存区。
本实施例的一示例中,所述第一阈值根据所述第一缓冲区的大小确定,所述第一阈值不小于4KB、8KB、16KB、32KB、64KB、128KB或256KB。
本公开一示例性实施例中,所述已缓存待压数据包括已缓存的所有对象的原始数据,将缓存的所述第一对象的原始数据直接确定为待压数据;或者
所述已缓存待压数据只包括已缓存的指定对象的原始数据,在所述第一对象是指定对象的情况下,才确定缓存的所述第一对象的原始数据为待压数据;其中,所述指定对象是原始数据的数据量大于或等于设定的第二阈值的对象,所述第二阈值小于所述第一阈值。
本公开一示例性实施例中,所述存数据方法还包括:
在所述已缓存待压数据只包括已缓存的指定对象的原始数据,且所述第一对象不是指定对象的情况下,按以下方式为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片:
不对所述第一对象的原始数据进行压缩,直接根据所述第一对象的原始数据为所述第一对象分配内存地址,根据分配的所述内存地址将所述第一对象的原始数据写入所述内存芯片;或者
先确定所述第一对象的原始数据的数据量是否大于或等于设定的第三阈值,所述第三阈值小于所述第二阈值:如果大于或等于第三阈值,采用单对象压缩方式对所述第一对象的原始数据单独压缩,根据所述第一对象的压缩数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的压缩数据写入所述内存芯片;如果小于第三阈值,不对所述第一对象的原始数据进行压缩,根据第一对象的原始数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的原始数据写入所述内存芯片。
本公开一示例性实施例中,所述第一对象的数据的信息包括所述第一对象的原始数据的数据量和源地址;所述缓存所述第一对象的数据,包括:解析所述存数据请求得到所述数据量和源地址,根据所述数据量和源地址从外部读取所述第一对象的原始数据并缓存在第一缓冲区;或者
所述第一对象的数据的信息包括所述第一对象的原始数据;所述缓存所述第一对象的数据,包括:解析所述存数据请求得到所述第一对象的原始数据,将所述第一对象的原始数据缓存在第一缓冲区。
本公开一示例性实施例中,如图4所示,提供了一种取数据方法,所述通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
步骤210,通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
步骤220,从地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据;
步骤230,将所述第一对象的数据传输到外部。
上述取数据方法可以由CXL内存模组中的控制器来执行。
本公开一示例性实施例中,如在存数据时采用多对象压缩方式对所述第一对象的原始数据进行压缩,所述从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据,将所述第一对象的数据传输到外部,包括:
根据所述第一对象的标识查找所述地址映射表,找到为所述第一对象分配的内存地址,也即为待存压缩数据切分成的多个数据块分配的内存地址,所述第一对象的压缩数据位于其中至少一个数据块中;
根据所述内存地址从所述内存芯片读出所述多个数据块,将所述多个数据块拼接为待存压缩数据,对所述待存压缩数据解压缩,得到已缓存待压数据并缓存在第二缓冲区;
根据所述第一对象的原始数据的数据量及在所述已缓存待压数据中的偏移,从所述已缓存待压数据中提取出所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
本公开一示例性实施例中,如在存数据时不对所述第一对象的原始数据进行压缩,所述从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据,将所述第一对象的数据传输到外部,包括:从所述地址映射表查找到第二缓存区中所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的原始数据,将所述第一对象的原始数据缓存在第二缓冲区;及,将所述第一对象的部分或全部原始数据传输到外部。
本公开一示例性实施例中,如在存数据时采用单对象压缩方式对所述第一对象的原始数据进行压缩,所述从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据,将所述第一对象的数据传输到外部,包括:
从所述地址映射表查找到所述第一对象的标识对应的内存地址;
根据查找到的内存地址从所述内存芯片读出所述第一对象的压缩数据并缓存在第二缓冲区;
对所述第一对象的压缩数据解压缩得到所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
本公开一示例性实施例中,所述取数据请求还携带待取数据的数据量信息及所述待取数据在所述第一对象的原始数据中的偏移信息;
所述将所述第一对象的部分原始数据传输到外部,包括:根据所述数据量信息和偏移信息,从所述第一对象的原始数据中提取出所述待取数据,将所述待取数据传输到外部。
本公开一示例性实施例中,所述将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据携带在取数据响应中,发送给所述外部设备;或者
所述取数据请求中还携带用于保存取出数据的外部地址的信息,所述控制器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据写入到所述外部地址对应的存储空间。
本公开上述实施例的存数据方法和取数据方法对应于控制器的处理,可以参见前述控制器的相关实施例。
图5所示是本公开实施例在一个具体应用上的示例。是针对进程的一种可能实施方案。如图所示,进程包括的内容包括:
System 表示系统,如操作系统内核空间(kernel space),包括操作系统内核代码和数据结构等。
Env,argc,argv表示进程的运行环境和命令行参数相关的信息。
Stack 表示栈,用于存储函数调用的上下文信息、局部变量、函数参数等数据。
Heap表示堆,用于动态内存分配,当程序需要使用变量或对象时,会从堆中申请一块合适数据量的内存,使用完毕后再将其释放回堆中。
Shared Lib表示共享库,也称为动态链接库,是一种可供多个进程共享使用的代码库,包含被多个程序调用的公共函数和数据。
Text segment(代码段):也称为只读代码段,用于存储程序的可执行代码。在程序启动时,代码段被映射到内存中,并且通常是只读的,以防止程序意外地修改自身代码。
Date Segment(数据段),用于存储程序中已初始化的全局变量和静态变量,在程序启动时,这些变量就会被分配在数据段中,并且在整个程序运行期间都存在。
以Text segment(代码段)为例,本示例将每一代码段的内容作为一个对象的数据(值),并赋予一个对象标识。然后可以存入本公开实施例的CXL内存模组中,并可以KV方式取出。
上述进程内存布局中,代码段是频繁被访问的资源,例如,针对大型应用,代码段占用的内存空间较大,如果包含链接库,占用空间会更大。而代码段编译后,不可修改,因此具有只读属性。针对上述特点,进程的代码段可以按照本公开上述实施例的方法,采用KV方式映射到CXL内存,KV 形式的存储可以减少存储介质的存取次数,提高访问效率,也可以通过压缩降低内存使用率。
如图所示,将代码段作为对象,对象的键(Key)可以表示为:PID.Text seg.attri,其中PID为进程标识,Text seg表示代码段,attri表示属性,如只读或可读写。值(Valeu)则为代码段的内容(Text seg context)。一个进程的代码段作为一个对象或划分为多个对象,划分为多个对象的情况下可以在Key中增加相应的索引号。主机10和CXL控制器20之间可以通过KV指令交互,采用本公开上述实施例的方法将对象形式的代码段数据保存到DRAM芯片30中,以及从DRAM芯片中读取代码段数据。图示进程中的其他内容,也可以选择使用KV方式映射到CXL内存。
图6是本公开一实施例基于CXL内存模组实现KV 存储的模块图。如图所示,主机(Host)50包括处理器(如CPU)51、KV解释器(KV intepreter)53、CXL存储协议(CXL.mem)层55和CXL输入输出(CXL.io)协议层57。其中:主机50侧包括:
KV解释器53,被配置为提取封装在CXL.io指令中的KV响应并对所述KV响应进行解析,及,将KV请求封装到CXL.io指令中,其中,所述KV请求包括存数据请求和取数据请求,所述KV响应包括存数据响应和取数据响应。
CXL存储协议层55,被配置为传输数据,本实施例主机和CXL内存模组之间可以传输KV指令和基于对象的数据,也可以传输其他形式的数据;
CXL输入输出协议层57,位于KV解释器53之下,被配置为在系统初始化时,实现CXL设备(包括CXL内存模组60)的设备发现、配置和数据传输功能,也可以实现枚举及IO控制等功能。例如,传输某一对象的数据,并通知处理器51或者CXL内存模组60该对象的数据已经传输完成,KV指令作为要CXL指令传输的数据封装在CXL指令中。
处理器51,被配置为访问CXL内存模组60,向CXL内存模组60发送KV指令和接收CXL内存模组60发送的KV指令,
CXL内存模组60侧包括控制器和DRAM 69,其中的控制器包括:
KV解释器61,被配置为提取封装在CXL.io指令中的KV请求并对所述KV请求进行解析,及,将所述KV响应封装到CXL.io指令中,其中,所述KV请求包括存数据请求和取数据请求,所述KV响应包括存数据响应和取数据响应。本文中的KV请求和KV响应均为KV指令,KV指令作为要传输的数据封装在CXL.io指令中。
CXL存储协议层62,被配置为传输数据;
CXL输入输出协议层63,位于KV解释器61之下,被配置为传输KV指令,及实现CXL内存模组60的寄存器控制等功能。
映射表65,被配置为记录对象的数据到物理内存资源(如DRAM的内存地址)的映射,该映射表包括上述实施例的地址映射表,还可以记录对象的元数据。映射表65的数据可以存储在DRAM预留的空间中,也可以存储在缓存器66中。
缓存器66,可使用SRAM实现,可以划分为多个缓冲区,被配置为缓存传输过程中对象的部分或全部数据,如缓存待写入内存芯片的数据及从内存芯片中读出的数据,缓存的数据达到阈值后,写入(flush)到DRAM;
压缩引擎67,被配置为在CXL内存模组实现透明压缩,包括对数据的压缩和解压缩;
数据分发器68,被配置为实现数据分发,如将待存压缩数据切分后以交错访问方式写入到DRAM。
控制模块64,被配置为对控制器中的各个模块进行控制,以完成基于对象的数据存取。图中仅示出了控制模块64与部分模块的连接关系,控制模块与压缩引擎67、数据分发器68之间存在的连接关系未示出。
本公开实施例通过设置在CXL.io协议层之上的KV解释器,在主机和CXL控制器内部构建了基于CXL协议的KV接口,或称为KV API(Application Programming Interface,应用程序编程接口)。本实施例的KV解释器可以将KV指令封装到CXL.io指令(或CXL.mem指令)中,或者从CXL.io指令(或CXL.mem指令)中取出KV指令,还可以对KV指令进行解析,识别KV指令中携带的对象的标识、对象的数据的信息等内容。
作为一种示例性的实现方式,主机50和CXL内存模组60可以约定KV指令的格式,如对象内容传输、截止的格式。
本实施例的CXL内存模组并向外部设备(如CPU)提供KV存取指令。还可在CXL控制器内部实现硬件加速压缩/解压缩的存储机制,提高内存利用率,同时确保访问时延。在CXL控制器内部将KV的原始数据或压缩数据按照interleaving方式,存储到多个DRAM芯片,以提高系统带宽。本公开上述实施例利用CXL 内存模组还可扩展提高内存容量。
基于CXLio协议构建KV解释器后,当CXL内存模组接收到存数据(Put)的KV指令后,可以依据指令中对象的标识(Key值),将对象的全部数据(V值)取出缓存到缓存器如SRAM中。在接收到取数据(Get)的KV指令后,对象的数据封装在主机和CXL内存模组之间的CXL.io指令传输到主机,避免了主机和CXL内存模组(主要是DRAM)之间就每一个Cacheline均进行指令数据的全路径传输,也即在CXL内存模组内针对对象标识加载了较大块数据,避免了多次CXL.io的控制开销。而在CXL控制器和内存芯片之间,可以采用交错访问方式实现大数据块的传输,提高了存储效率。
本实施例中,KV指令和CXL协议的指令(简称CXL指令)位于不同层次。 举例而言:主机(如CPU) 需要发送一条存对象数据(Put Object)的KV指令, 先通过KV 解释器完成指令的封装(这一部分对于CXL层而言是透明的),当KV指令传输到CXL.io协议层,CXL.io协议层仅把其当作普通数据传输(无需关心具体内容)。也就是说,KV 指令是在CXL.io接口之上形成的一种应用层协议。假定有一条存对象数据(put object)的KV指令被封装之后,对于从CXL.io层看到的是若干包待传输的数据,CXL内存模组接收到该数据之后,由KV 解释器负责解析。对于对象的数据,可以将数据本身(V值)封装在数据包中,也可以仅仅封装的数据(V值)的地址,CXL内存模组根据该地址获取对象的数据。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于 RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
Claims (38)
1.一种CXL内存模组,包括控制器和与所述控制器连接的一组内存芯片,其特征在于,所述控制器具有基于CXL协议的KV接口,所述控制器被配置为通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片或将基于对象的数据从所述内存芯片中取出;其中,
所述控制器将基于对象的数据存入所述内存芯片,包括:获取对象的原始数据;对所述对象的原始数据进行压缩,得到所述对象的压缩数据;将所述对象的压缩数据写入所述内存芯片;
所述控制器将基于对象的数据从所述内存芯片取出,包括:将所述内存芯片中存储的所述对象的压缩数据读出;对所述对象的压缩数据进行解压缩,得到所述对象的原始数据并传输到外部。
2.如权利要求1所述的CXL内存模组,其特征在于:
所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片,包括:
通过所述KV接口接收外部设备发送的存数据请求,所述存数据请求携带第一对象的标识和所述第一对象的数据的信息;
缓存所述第一对象的数据,为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片;
更新地址映射表以记录所述第一对象的标识与所述内存地址的对应关系。
3.如权利要求2所述的CXL内存模组,其特征在于:
所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据;
将所述第一对象的数据传输到外部。
4.如权利要求2所述的CXL内存模组,其特征在于:
所述控制器缓存所述第一对象的数据,包括:在第一缓冲区缓存所述第一对象的原始数据;
所述控制器还被配置为:确定缓存的所述第一对象的原始数据为待压数据的情况下,采用以下的多对象压缩方式压缩所述第一对象的原始数据:
判断所述第一缓冲区中已缓存待压数据的总量是否大于或等于设定的第一阈值:
如果大于或等于所述第一阈值,记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到待存压缩数据;
如果小于所述第一阈值,则在有新的对象的原始数据加入,使得所述第一缓冲区中已缓存待压数据的总量大于或等于所述第一阈值的情况下,再记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到所述待存压缩数据。
5.如权利要求4所述的CXL内存模组,其特征在于:
在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述控制器为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片,包括:
将所述待存压缩数据切分为多个数据块,所述第一对象的压缩数据位于其中至少一个数据块中;
为所述多个数据块中不同的数据块分配同一交错区域中不同内存区的内存地址,将为所述多个数据块分配的内存地址作为向所述待存压缩数据所属的所有对象统一分配的内存地址;
根据为所述多个数据块分配的内存地址,以交错访问方式将所述多个数据块分别写入各自对应的内存区;
其中,一个交错区域包括一个或多个所述内存芯片中的内存区。
6.如权利要求4所述的CXL内存模组,其特征在于:
所述第一阈值根据所述第一缓冲区的大小确定,所述第一阈值不小于4KB、8KB、16KB、32KB、64KB、128KB或256KB。
7. 如权利要求4所述的CXL内存模组,其特征在于:
所述已缓存待压数据包括已缓存的所有对象的原始数据,所述控制器将缓存的所述第一对象的原始数据直接确定为待压数据;或者
所述已缓存待压数据只包括已缓存的指定对象的原始数据,所述控制器在所述第一对象是指定对象的情况下,才确定缓存的所述第一对象的原始数据为待压数据;其中,所述指定对象是原始数据的数据量大于或等于设定的第二阈值的对象,所述第二阈值小于所述第一阈值。
8.如权利要求7所述的CXL内存模组,其特征在于:
所述控制器还被配置为在所述已缓存待压数据只包括已缓存的指定对象的原始数据,且所述第一对象不是指定对象的情况下,按以下方式为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片:
不对所述第一对象的原始数据进行压缩,直接根据所述第一对象的原始数据为所述第一对象分配内存地址,根据分配的所述内存地址将所述第一对象的原始数据写入所述内存芯片;或者
先确定所述第一对象的原始数据的数据量是否大于或等于设定的第三阈值,所述第三阈值小于所述第二阈值:如果大于或等于第三阈值,采用单对象压缩方式对所述第一对象的原始数据单独压缩,根据所述第一对象的压缩数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的压缩数据写入所述内存芯片;如果小于第三阈值,不对所述第一对象的原始数据进行压缩,根据第一对象的原始数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的原始数据写入所述内存芯片。
9. 如权利要求2所述的CXL内存模组,其特征在于:
所述第一对象的数据的信息包括所述第一对象的原始数据的数据量和源地址;所述控制器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述数据量和源地址,根据所述数据量和源地址从外部读取所述第一对象的原始数据并缓存在第一缓冲区;或者
所述第一对象的数据的信息包括所述第一对象的原始数据;所述控制器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述第一对象的原始数据,将所述第一对象的原始数据缓存在第一缓冲区。
10.如权利要求5所述的CXL内存模组,其特征在于:
在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
根据所述第一对象的标识查找所述地址映射表,找到为所述待存压缩数据切分成的多个数据块分配的内存地址;
根据所述内存地址从所述内存芯片读出所述多个数据块,将所述多个数据块拼接为所述待存压缩数据,对所述待存压缩数据解压缩,得到所述已缓存待压数据并缓存在第二缓冲区;
根据所述第一对象的原始数据的数据量及在所述已缓存待压数据中的偏移,从所述已缓存待压数据中提取出所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
11.如权利要求8所述的CXL内存模组,其特征在于:
在不对所述第一对象的原始数据进行压缩的情况下,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的原始数据,将所述第一对象的原始数据缓存在第二缓冲区;
将所述第一对象的部分或全部原始数据传输到外部。
12.如权利要求8所述的CXL内存模组,其特征在于:
在采用单对象压缩方式对所述第一对象的原始数据进行压缩的情况下,所述控制器通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的压缩数据并缓存在第二缓冲区;
对所述第一对象的压缩数据解压缩得到所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
13.如权利要求10至12中任一所述的CXL内存模组,其特征在于:
所述取数据请求还携带待取数据的数据量信息及所述待取数据在所述第一对象的原始数据中的偏移信息;
所述控制器将所述第一对象的部分原始数据传输到外部,包括:根据所述数据量信息和偏移信息,从所述第一对象的原始数据中提取出所述待取数据,将所述待取数据传输到外部。
14. 如权利要求10至12中任一所述的CXL内存模组,其特征在于:
所述控制器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据携带在取数据响应中,发送给所述外部设备;或者
所述取数据请求中还携带用于保存取出数据的外部地址的信息,所述控制器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据写入到所述外部地址对应的存储空间。
15.如权利要求1所述的CXL内存模组,其特征在于:
所述基于CXL协议的KV接口通过在CXL.io协议层和/或CXL.mem协议层之上构建的KV解释器实现,所述KV解释器被配置为提取作为要传输的数据封装在CXL.io指令或CXL.mem指令中的KV请求并对所述KV请求进行解析,及,将KV响应作为要传输的数据封装到CXL.io指令或CXL.mem指令中,其中,所述KV请求包括存数据请求和取数据请求,所述KV响应包括存数据响应和取数据响应。
16.一种CXL内存模组中的控制器,包括处理器、缓存器、CXL接口和内存接口,其特征在于,所述CXL接口之上构建有基于CXL协议的KV接口,所述处理器被配置为执行以下存数据操作:
通过所述KV接口接收外部设备发送的存数据请求,所述存数据请求携带第一对象的标识和所述第一对象的数据的信息;
在所述缓存器缓存所述第一对象的数据,为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据存入所述内存接口连接的内存芯片;
更新地址映射表以记录所述第一对象的标识与所述内存地址的对应关系;其中,所述处理器缓存所述第一对象的数据,包括:在所述缓存器的第一缓冲区缓存所述第一对象的原始数据;
所述控制器还包括压缩引擎,所述处理器还被配置为:确定缓存的所述第一对象的原始数据为待压数据的情况下,使用所述压缩引擎,采用以下的多对象压缩方式对所述第一对象的原始数据进行压缩:
判断所述第一缓冲区中已缓存待压数据的总量是否大于或等于设定的第一阈值:
如果大于或等于所述第一阈值,记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到待存压缩数据;
如果小于所述第一阈值,则在有新的对象的原始数据加入,使得所述第一缓冲区中已缓存待压数据的总量大于或等于所述第一阈值的情况下,再记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到所述待存压缩数据。
17.如权利要求16所述的控制器,其特征在于:
在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述处理器为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据存入所述内存接口连接的内存芯片,包括:
将所述待存压缩数据切分为多个数据块,所述第一对象的压缩数据位于其中至少一个数据块中;
为所述多个数据块中不同的数据块分配同一交错区域中不同内存区的内存地址,将为所述多个数据块分配的内存地址作为向所述待存压缩数据所属的所有对象统一分配的内存地址;
根据为所述多个数据块分配的内存地址,以交错访问方式将所述多个数据块分别写入各自对应的内存区;
其中,一个交错区域包括一个或多个所述内存芯片中的内存区。
18.如权利要求16所述的控制器,其特征在于:
所述第一阈值根据所述第一缓冲区的大小确定,所述第一阈值不小于4KB、8KB、16KB、32KB、64KB、128KB或256KB。
19. 如权利要求16所述的控制器,其特征在于:
所述已缓存待压数据包括已缓存的所有对象的原始数据,所述处理器将缓存的所述第一对象的原始数据直接确定为待压数据;或者
所述已缓存待压数据只包括已缓存的指定对象的原始数据,所述处理器在所述第一对象是指定对象的情况下,才确定缓存的所述第一对象的原始数据为待压数据;其中,所述指定对象是原始数据的数据量大于或等于设定的第二阈值的对象,所述第二阈值小于所述第一阈值。
20.如权利要求19所述的控制器,其特征在于:
所述处理器还被配置为在所述已缓存待压数据只包括已缓存的指定对象的原始数据,且所述第一对象不是指定对象的情况下,按以下方式为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据存入所述内存接口连接的内存芯片:
不对所述第一对象的原始数据进行压缩,直接根据所述第一对象的原始数据为所述第一对象分配内存地址,根据分配的所述内存地址将所述第一对象的原始数据写入所述内存芯片;或者
先确定所述第一对象的原始数据的数据量是否大于或等于设定的第三阈值,所述第三阈值小于所述第二阈值:如果大于或等于第三阈值,采用单对象压缩方式对所述第一对象的原始数据单独压缩,根据所述第一对象的压缩数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的压缩数据写入所述内存芯片;如果小于第三阈值,不对所述第一对象的原始数据进行压缩,根据第一对象的原始数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的原始数据写入所述内存芯片。
21. 如权利要求16所述的控制器,其特征在于:
所述第一对象的数据的信息包括所述第一对象的原始数据的数据量和源地址;所述处理器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述数据量和源地址,根据所述数据量和源地址从外部读取所述第一对象的原始数据并缓存在第一缓冲区;或者
所述第一对象的数据的信息包括所述第一对象的原始数据;所述处理器缓存所述第一对象的数据,包括:解析所述存数据请求得到所述第一对象的原始数据,将所述第一对象的原始数据缓存在所述第一缓冲区。
22.如权利要求16所述的控制器,其特征在于:
在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述处理器还被配置为执行以下取数据操作:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
根据所述第一对象的标识查找所述地址映射表,找到为所述待存压缩数据切分成的多个数据块分配的内存地址;
根据所述内存地址从所述内存芯片读出所述多个数据块,将所述多个数据块拼接为所述待存压缩数据,对所述待存压缩数据解压缩,得到所述已缓存待压数据并缓存在第二缓冲区;
根据所述第一对象的原始数据的数据量及在所述已缓存待压数据中的偏移,从所述已缓存待压数据中提取出所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
23.如权利要求19所述的控制器,其特征在于:
在不对所述第一对象的原始数据进行压缩的情况下,所述处理器还被配置为执行以下取数据操作:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的原始数据,将所述第一对象的原始数据缓存在第二缓冲区;
将所述第一对象的部分或全部原始数据传输到外部。
24.如权利要求19所述的控制器,其特征在于:
在采用单对象压缩方式对所述第一对象的原始数据进行压缩的情况下,所述处理器还被配置为执行以下取数据操作:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从所述地址映射表查找到所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的压缩数据并缓存在第二缓冲区;
对所述第一对象的压缩数据解压缩得到所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
25.如权利要求22至24中任一所述的控制器,其特征在于:
所述取数据请求还携带待取数据的数据量信息及所述待取数据在所述第一对象的原始数据中的偏移信息;
所述处理器将所述第一对象的部分原始数据传输到外部,包括:根据所述数据量信息和偏移信息,从所述第一对象的原始数据中提取出所述待取数据,将所述待取数据传输到外部。
26. 如权利要求22至24中任一所述的控制器,其特征在于:
所述处理器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据携带在取数据响应中,发送给所述外部设备;或者
所述取数据请求中还携带用于保存取出数据的外部地址的信息,所述控制器将所述第一对象的部分或全部原始数据传输到外部,包括:将所述第一对象的部分或全部原始数据写入到所述外部地址对应的存储空间。
27.如权利要求16所述的控制器,其特征在于:
所述基于CXL协议的KV接口通过在CXL.io协议层和/或CXL.mem协议层之上构建的KV解释器实现,所述KV解释器被配置为提取作为要传输的数据封装在CXL.io指令或CXL.mem指令中的KV请求并对所述KV请求进行解析,及,将KV响应作为要传输的数据封装到CXL.io指令或CXL.mem指令中,其中,所述KV请求包括存数据请求和取数据请求,所述KV响应包括存数据响应和取数据响应。
28.一种访问数据的方法,应用于CXL内存模组,所述CXL内存模组包括控制器和与所述控制器连接的一组内存芯片,所述控制器具有基于CXL协议的KV接口,所述方法包括:通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片或将基于对象的数据从所述内存芯片中取出;
其中,所述控制器将基于对象的数据存入所述内存芯片,包括:获取对象的原始数据;对所述对象的原始数据进行压缩,得到所述对象的压缩数据;将所述对象的压缩数据写入所述内存芯片;
所述控制器将基于对象的数据从所述内存芯片取出,包括:将所述内存芯片中存储的所述对象的压缩数据读出;对所述对象的压缩数据进行解压缩,得到所述对象的原始数据并传输到外部。
29.如权利要求28所述的方法,其特征在于:
所述通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据存入所述内存芯片,包括:
通过所述KV接口接收外部设备发送的存数据请求,所述存数据请求携带第一对象的标识和所述第一对象的数据的信息;
缓存所述第一对象的数据,为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片;
更新地址映射表以记录所述第一对象的标识与所述内存地址的对应关系。
30.如权利要求29所述的方法,其特征在于:
所述缓存所述第一对象的数据,包括:在第一缓冲区缓存所述第一对象的原始数据;
所述方法还包括:确定缓存的所述第一对象的原始数据为待压数据的情况下,采用以下的多对象压缩方式对所述第一对象的原始数据进行压缩:
判断所述第一缓冲区中已缓存待压数据的总量是否大于或等于设定的第一阈值:
如果大于或等于所述第一阈值,记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到待存压缩数据;
如果小于所述第一阈值,则在有新的对象的原始数据加入,使得所述第一缓冲区中已缓存待压数据的总量大于或等于所述第一阈值的情况下,再记录所述已缓存待压数据中每一对象的原始数据的偏移,对所述已缓存待压数据进行压缩,得到所述待存压缩数据。
31.如权利要求30所述的方法,其特征在于:
在采用多对象压缩方式压缩所述第一对象的原始数据的情况下,所述为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片,包括:
将所述待存压缩数据切分为多个数据块,所述第一对象的压缩数据位于其中至少一个数据块中;
为所述多个数据块中不同的数据块分配同一交错区域中不同内存区的内存地址,将为所述多个数据块分配的内存地址作为向所述待存压缩数据所属的所有对象统一分配的内存地址;
根据为所述多个数据块分配的内存地址,以交错访问方式将所述多个数据块分别写入各自对应的内存区;
其中,一个交错区域包括一个或多个所述内存芯片中的内存区。
32. 如权利要求30所述的方法,其特征在于:
所述已缓存待压数据包括已缓存的所有对象的原始数据,将缓存的所述第一对象的原始数据直接确定为待压数据;或者
所述已缓存待压数据只包括已缓存的指定对象的原始数据,在所述第一对象是指定对象的情况下,才确定缓存的所述第一对象的原始数据为待压数据;其中,所述指定对象是原始数据的数据量大于或等于设定的第二阈值的对象,所述第二阈值小于所述第一阈值。
33.如权利要求32所述的方法,其特征在于,所述方法还包括:
在所述已缓存待压数据只包括已缓存的指定对象的原始数据,且所述第一对象不是指定对象的情况下,按以下方式为所述第一对象分配内存地址,根据所述内存地址将所述第一对象的数据写入所述内存芯片:
不对所述第一对象的原始数据进行压缩,直接根据所述第一对象的原始数据为所述第一对象分配内存地址,根据分配的所述内存地址将所述第一对象的原始数据写入所述内存芯片;或者
先确定所述第一对象的原始数据的数据量是否大于或等于设定的第三阈值,所述第三阈值小于所述第二阈值:如果大于或等于第三阈值,采用单对象压缩方式对所述第一对象的原始数据单独压缩,根据所述第一对象的压缩数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的压缩数据写入所述内存芯片;如果小于第三阈值,不对所述第一对象的原始数据进行压缩,根据第一对象的原始数据为所述第一对象分配内存地址,根据分配的内存地址将所述第一对象的原始数据写入所述内存芯片。
34.如权利要求29所述的方法,其特征在于:
所述通过所述KV接口接收外部设备发送的KV指令,将基于对象的数据从所述内存芯片中取出,包括:
通过所述KV接口接收外部设备发送的取数据请求,所述取数据请求携带所述第一对象的标识;
从地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据;
将所述第一对象的数据传输到外部。
35.如权利要求34所述的方法,其特征在于:
如在存数据时采用多对象压缩方式对所述第一对象的原始数据进行压缩,所述从地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据,将所述第一对象的数据传输到外部,包括:
根据所述第一对象的标识查找所述地址映射表,找到为所述第一对象分配的内存地址,也即为待存压缩数据切分成的多个数据块分配的内存地址,所述第一对象的压缩数据位于其中至少一个数据块中;
根据所述内存地址从所述内存芯片读出所述多个数据块,将所述多个数据块拼接为待存压缩数据,对所述待存压缩数据解压缩,得到已缓存待压数据并缓存在第二缓冲区;
根据所述第一对象的原始数据的数据量及在所述已缓存待压数据中的偏移,从所述已缓存待压数据中提取出所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
36.如权利要求34所述的方法,其特征在于:
如在存数据时不对所述第一对象的原始数据进行压缩,所述从地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据,将所述第一对象的数据传输到外部,包括:从所述地址映射表查找到第二缓存区中所述第一对象的标识对应的内存地址,根据查找到的内存地址从所述内存芯片读出所述第一对象的原始数据,将所述第一对象的原始数据缓存在第二缓冲区;及,将所述第一对象的部分或全部原始数据传输到外部。
37.如权利要求34所述的方法,其特征在于:
如在存数据时采用单对象压缩方式对所述第一对象的原始数据进行压缩,所述从地址映射表查找到所述第一对象的标识对应的内存地址,根据所述内存地址从所述内存芯片读出所述第一对象的数据,将所述第一对象的数据传输到外部,包括:
从所述地址映射表查找到所述第一对象的标识对应的内存地址;
根据查找到的内存地址从所述内存芯片读出所述第一对象的压缩数据并缓存在第二缓冲区;
对所述第一对象的压缩数据解压缩得到所述第一对象的原始数据,将所述第一对象的部分或全部原始数据传输到外部。
38.一种存储系统,其特征在于,包括主机及如权利要求1至15中任一所述的CXL内存模组,所述主机通过CXL接口与所述CXL内存模组通信,实现对所述CXL内存模组的发现、配置和数据传输;通过基于CXL协议构建的KV接口与所述CXL内存模组通信,实现所述主机和所述CXL内存模组之间基于对象的数据存取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311264078.XA CN116991338B (zh) | 2023-09-28 | 2023-09-28 | 访问数据的方法及控制器、cxl内存模组和存储系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311264078.XA CN116991338B (zh) | 2023-09-28 | 2023-09-28 | 访问数据的方法及控制器、cxl内存模组和存储系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116991338A CN116991338A (zh) | 2023-11-03 |
CN116991338B true CN116991338B (zh) | 2023-12-22 |
Family
ID=88534267
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311264078.XA Active CN116991338B (zh) | 2023-09-28 | 2023-09-28 | 访问数据的方法及控制器、cxl内存模组和存储系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116991338B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902467A (zh) * | 2012-12-26 | 2014-07-02 | 华为技术有限公司 | 压缩内存访问控制方法、装置及系统 |
CN114115699A (zh) * | 2020-08-28 | 2022-03-01 | 华为技术有限公司 | 一种数据处理方法、装置及系统 |
WO2022156650A1 (zh) * | 2021-01-21 | 2022-07-28 | 华为技术有限公司 | 访问数据的方法及装置 |
CN116560562A (zh) * | 2022-01-30 | 2023-08-08 | 华为技术有限公司 | 一种读、写数据方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230049329A1 (en) * | 2021-08-10 | 2023-02-16 | Samsung Electronics Co., Ltd. | Systems, methods, and apparatus for processing data at a storage device |
-
2023
- 2023-09-28 CN CN202311264078.XA patent/CN116991338B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902467A (zh) * | 2012-12-26 | 2014-07-02 | 华为技术有限公司 | 压缩内存访问控制方法、装置及系统 |
CN114115699A (zh) * | 2020-08-28 | 2022-03-01 | 华为技术有限公司 | 一种数据处理方法、装置及系统 |
WO2022156650A1 (zh) * | 2021-01-21 | 2022-07-28 | 华为技术有限公司 | 访问数据的方法及装置 |
CN116560562A (zh) * | 2022-01-30 | 2023-08-08 | 华为技术有限公司 | 一种读、写数据方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116991338A (zh) | 2023-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11989160B2 (en) | Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device | |
US20230315290A1 (en) | Namespaces allocation in non-volatile memory devices | |
US11656775B2 (en) | Virtualizing isolation areas of solid-state storage media | |
US9985649B1 (en) | Combining hardware and software approaches for inline data compression | |
US6549995B1 (en) | Compressor system memory organization and method for low latency access to uncompressed memory regions | |
EP3958107A1 (en) | Storage system, memory management method, and management node | |
JP2013502658A (ja) | データベース動作を意識するストライピング技術 | |
CN105408875B (zh) | 在存储器接口上的分布式过程执行和文件系统 | |
CN112214157B (zh) | 主机输出输入命令的执行装置及方法及存储介质 | |
TW201941197A (zh) | 混合式記憶體系統 | |
US11693569B2 (en) | Host performing an embedding operation and computing system including the same | |
CN115840620B (zh) | 一种数据通路构建方法、设备及介质 | |
US10120812B2 (en) | Manipulation of virtual memory page table entries to form virtually-contiguous memory corresponding to non-contiguous real memory allocations | |
KR102443593B1 (ko) | 하이브리드 메모리 시스템 | |
US10761762B2 (en) | Relocating compressed extents using batch-hole list | |
US10762047B2 (en) | Relocating compressed extents using file-system hole list | |
US11194498B1 (en) | Inline compression with small-write compression avoidance | |
CN114072777A (zh) | 基于硬件的存储器压缩 | |
CN116991338B (zh) | 访问数据的方法及控制器、cxl内存模组和存储系统 | |
US9471584B2 (en) | Demand paging method for mobile terminal, controller and mobile terminal | |
US20230195320A1 (en) | Systems and methods for integrating a compute resource with a storage device | |
CN116340203A (zh) | 数据预读取方法、装置、处理器及预取器 | |
CN116795736A (zh) | 数据预读取方法、装置、电子设备和存储介质 | |
US20170109080A1 (en) | Computing system with memory management mechanism and method of operation thereof | |
US11914527B2 (en) | Providing a dynamic random-access memory cache as second type memory per application process |
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 |