CN116665727B - 写i/o汇聚方法、装置、存储设备和存储介质 - Google Patents

写i/o汇聚方法、装置、存储设备和存储介质 Download PDF

Info

Publication number
CN116665727B
CN116665727B CN202310921682.9A CN202310921682A CN116665727B CN 116665727 B CN116665727 B CN 116665727B CN 202310921682 A CN202310921682 A CN 202310921682A CN 116665727 B CN116665727 B CN 116665727B
Authority
CN
China
Prior art keywords
write
ssd
written
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
Application number
CN202310921682.9A
Other languages
English (en)
Other versions
CN116665727A (zh
Inventor
包宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Panlian Zhicun Technology Co ltd
Original Assignee
Chengdu Panlian Zhicun Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chengdu Panlian Zhicun Technology Co ltd filed Critical Chengdu Panlian Zhicun Technology Co ltd
Priority to CN202310921682.9A priority Critical patent/CN116665727B/zh
Publication of CN116665727A publication Critical patent/CN116665727A/zh
Application granted granted Critical
Publication of CN116665727B publication Critical patent/CN116665727B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及存储技术领域,提供一种写I/O汇聚方法、装置、存储设备和存储介质,方法包括:若多个写I/O中存在多个目标写I/O,则将多个目标写I/O拼接成一个下盘I/O,多个目标写I/O的数据连续、且待写长度之和等于预设长度,预设长度为QLC SSD的写入单位的整数倍;将多个目标写I/O中最小的待写地址作为下盘I/O的待写地址,将预设长度作为下盘I/O的待写长度;将下盘I/O的待写地址和待写长度作为下盘I/O的元数据、并将多个目标写I/O的数据作为下盘I/O的数据写入至第二缓存表,以根据第二缓存表将下盘I/O下发至QLC SSD。本发明能够减小写放大,进而提高固态硬盘的寿命。

Description

写I/O汇聚方法、装置、存储设备和存储介质
技术领域
本发明涉及存储技术领域,具体而言,涉及一种写I/O汇聚方法、装置、存储设备和存储介质。
背景技术
存储性能开发工具包SPDK(Storage Performance Development Kit,SPDK)主要用于优化存储应用程序的性能和效率,特别是针对非易失性存储器NVM(Non VolatileMemory,NVM)技术和高速网络连接,可极大地提高存储应用程序的性能和并发性能。
固态硬盘和传统的旋转机械硬盘相比,具有随着噪声低,速度快,功耗低等优点,但是也存在使用寿命的问题,固态硬盘是按页page(一般由4K到几十KB不等)大小读写数据,如果写下去的数据小于页(page)的大小,其实固态硬盘也会写满这一页的空间,这就是所谓的写放大,而固态硬盘的寿命和写的次数相关,因此写放大会极大地影响固态硬盘的寿命。
QLC SSD是一种基于QLC(Quad-Level Cell,四层单元)闪存芯片的SSD(Solid-State Drive,固态硬盘),其存储密度和性价比比较高,从而满足用户对高容量存储的需求。QLC SSD的写入性能和数据耐久性都比较低,特别是频繁地进行大容量写入操作时更容易受到影响,如何在SPDK中减小写放大、提高固态硬盘的寿命是本领域技术人员亟待解决的技术问题。
发明内容
本发明的目的在于其能够减小写放大、提高固态硬盘的寿命。
本发明的实施例可以这样实现:
第一方面,本发明提供一种写I/O汇聚方法,应用于存储设备,所述存储设备和客户端通信连接,所述存储设备包括四层单元固态硬盘QLC SSD和计算快速链接CXL内存或包括QLC SSD和计算快速链接固态硬盘CXL SSD,所述CXL内存或CXL SSD中存储有第一缓存表和第二缓存表,所述第一缓存表包括多个写I/O的元数据和数据,所述元数据包括待写地址和待写长度,每一所述写I/O对应所述客户端下发至所述存储设备中运行的存储性能开发工具包SPDK的通用块Blob层的一个写请求,所述方法包括:
若所述多个写I/O中存在多个目标写I/O,则将所述多个目标写I/O拼接成一个下盘I/O,所述多个目标写I/O的数据连续、且待写长度之和等于预设长度,所述预设长度为所述QLC SSD的写入单位的整数倍、且是根据所述CXL内存或CXL SSD的剩余容量的百分比确定的;
将所述多个目标写I/O中最小的待写地址作为所述下盘I/O的待写地址,将所述预设长度作为所述下盘I/O的待写长度;
将所述下盘I/O的待写地址和待写长度作为所述下盘I/O的元数据、并将所述多个目标写I/O的数据作为所述下盘I/O的数据写入至所述第二缓存表,以根据所述第二缓存表将所述下盘I/O通过所述SPDK的非易失性内存表达驱动NVMe Driver层下发至所述QLCSSD。
在可选的实施方式中,所述若所述多个写I/O中存在多个目标写I/O,则将所述多个目标写I/O拼接成一个下盘I/O的步骤之前包括:
接收所述客户端下发的写请求,所述写请求包括待写地址、待写长度和待写数据;
将所述写请求的待写地址和待写长度作为写I/O的元数据、并将所述写请求的待写数据作为写I/O的数据,将所述写I/O的元数据和数据写入至所述第一缓存表。
在可选的实施方式中,所述预设长度是通过以下方式确定:
获取所述CXL内存或CXL SSD的剩余容量的百分比;
根据所述百分比确定倍数;
根据所述倍数及所述QLC SSD的写入单位,确定所述预设长度。
在可选的实施方式中,所述根据所述百分比确定倍数的步骤包括:
若所述百分比小于或者等于30%,则将所述倍数设置为1;
若所述百分比大于所述30%且小于或者等于70%,则将所述倍数设置为2;
若所述百分比大于所述70%,则将所述倍数设置为4。
在可选的实施方式中,所述方法还包括:
若所述百分比小于或者等于最小预设值,则将所述第一缓存表中的写I/O的数据写入至所述QLC SSD,并暂停接收所述客户端发送的写请求,所述最小预设值小于30%。
在可选的实施方式中,所述方法还包括:
若所述百分比大于最小预设值、且所述存储设备当前暂停接收所述客户端发送的写请求,则继续接收所述客户端发送的写请求。
在可选的实施方式中,所述CXL内存或CXL SSD还存储汇聚日志表,所述汇聚日志表包括表征数据是否写入所述QLC SSD的标志位,所述方法还包括:
通过所述SPDK的Blob层接收所述客户端发送的读请求;
从所述汇聚日志表中获取所述读请求欲读取的数据的目标标志位;
若所述目标标志位表征所述读请求欲读取的数据在所述QLC SSD中,则通过所述SPDK的NVMe Driver层从所述QLC SSD中读取数据,否则从所述CXL内存或CXL SSD中读取数据。
第二方面,本发明提供一种写I/O汇聚装置,应用于存储设备,所述存储设备和客户端通信连接,所述存储设备包括四层单元固态硬盘QLC SSD和计算快速链接CXL内存或包括QLC SSD和计算快速链接固态硬盘CXL SSD,所述CXL内存或CXL SSD中存储有第一缓存表和第二缓存表,所述第一缓存表包括多个写I/O的元数据和数据,所述元数据包括待写地址和待写长度,每一所述写I/O对应所述客户端下发至所述存储设备中运行的存储性能开发工具包SPDK的通用块Blob层的一个写请求,所述装置包括:
拼接模块,用于若所述多个写I/O中存在多个目标写I/O,则将所述多个目标写I/O拼接成一个下盘I/O,所述多个目标写I/O的数据连续、且待写长度之和等于预设长度,所述预设长度为所述QLC SSD的写入单位的整数倍、且是根据所述CXL内存或CXL SSD的剩余容量的百分比确定的;
所述拼接模块,还用于将所述多个目标写I/O中最小的待写地址作为所述下盘I/O的待写地址,将所述预设长度作为所述下盘I/O的待写长度;
写入模块,用于将所述下盘I/O的待写地址和待写长度作为所述下盘I/O的元数据、并将所述多个目标写I/O的数据作为所述下盘I/O的数据写入至所述第二缓存表,以根据所述第二缓存表将所述下盘I/O通过所述SPDK的非易失性内存表达驱动NVMe Driver层下发至所述QLC SSD。
第三方面,本发明提供一种存储设备,包括处理器和存储器,所述存储器用于存储程序,所述处理器用于在执行所述程序时,实现前述实施方式中任一项所述的写I/O汇聚方法。
第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前述实施方式中任一项所述的写I/O汇聚方法。
本发明实施例将客户端下发的写请求以第一缓存表的方式暂存于计算快速链接CXL(Compute Express Link,CXL)接口的CXL 内存或CXL 固态硬盘即CXL内存或CXL SSD中,并在CXL内存或CXL SSD中将第一缓存表中的写I/O拼接大小为QLC SSD的写入单位的整数倍的预设长度的下盘I/O,再将下盘I/O写入至QLC SSD,由于多个写I/O被拼成一个I/O发送至QLC SSD进行存储,减小了写放大,提升了QLC SSD的寿命。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的应用场景的示例图。
图2为本发明实施例提供的存储设备的方框示例图。
图3为本发明实施例提供的现有技术中SPDK架构的示例图。
图4为本发明实施例提供的改进后的SPDK架构图的示例图。
图5为本发明实施例提供的写I/O汇聚方法的流程示例图。
图6为本发明实施例提供的写I/O拼接的示例图。
图7为本发明实施例提供的写I/O汇聚过程的示例图。
图8为本发明实施例提供的写I/O汇聚装置的方框示例图。
图标:10-存储设备;11-处理器;12-存储器;13-总线;20-客户端;100-写I/O汇聚装置;110-拼接模块;120-写入模块;130-确定模块;140-读取模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
请参考图1,图1为本发明实施例提供的应用场景的示例图,图1中,存储设备10和客户端20通信连接,客户端20下发数据写请求或者读请求至存储设备10,基于写请求将数据存储至存储设备10,基于读请求从存储设备10中读取数据。
在本实施例中,存储设备10包括QLC SSD和CXL内存或包括QLC SSD和CXL SSD,一种实现方式是存储设备10包括CXL内存和QLC SSD,另一种实现方式是存储设备10包括CXLSSD和QLC SSD,由于CXL内存或CXL SSD能够提供更高的存储性能和更低的延迟,存储设备10接收到客户端20下发的写请求后,直接将写请求需要写的数据先暂存至CXL内存或CXLSSD中的第一缓存表,再在CXL内存或CXL SSD中对写请求进行拼接,合并成一个长度为QLCSSD的写入单位的整数倍的下盘请求,将其存入第二缓存表,再将第二缓存表中的下盘请求下发至QLC SSD,最终将数据存储至QLC SSD,由于写入QLC SSD的下盘请求减小了写放大,因而提高了QLC SSD的寿命。
存储设备10可以是存储服务器、存储阵列、存储集群中的存储节点等。
客户端20可以是移动终端、平板电脑、可穿戴设备等,可以是主机或者虚拟机等。
基于图1,本实施例还提供了一种存储设备的方框示意图,请参照图2,图2为本发明实施例提供的存储设备10的方框示意图。存储设备10包括处理器11、存储器12和总线13。处理器11、存储器12通过总线13连接。
处理器11可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器11中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器11可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
存储器12用于存储程序,例如本发明实施例中的写I/O汇聚装置100,写I/O汇聚装置100包括至少一个可以软件或固件(firmware)的形式存储于存储器12中的软件功能模块,处理器11在接收到执行指令后,执行程序以实现本发明实施例中的写I/O汇聚方法。
存储器12可能包括高速随机存取存储器(RAM:Random Access Memory),也可能还包括非易失存储器(non-volatile memory)。可选地,存储器12可以是内置于处理器11中的存储装置,也可以是独立于处理器11的存储装置。
存储器12还可以包括QLC SSD和CXL内存或者包括QLC SSD和CXL SSD。
总线13可以是ISA总线、PCI总线或EISA总线等。图2仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
图1的应用场景和图2的存储设备中的存储应用程序通常基于SPDK架构,请参照图3,图3为本发明实施例提供的现有技术中SPDK架构的示例图,图3中,SPDK架构包括应用软件层、文件系统/对象接口层、通用块Blob层、块驱动Bdev层和SPDK NVMe(Non-VolatileMemory Express,非易失性内存表达)驱动Driver层,应用软件层接收到客户端20下发的写请求后,依次经过文件系统/对象接口层、Blob层、Bdev层和SPDK NVMe Driver层的处理,最终存储至QLC SSD。
应用软件层负责接收客户端20发送的写请求。
文件系统/对象接口层实现了文件系统和对象存储的核心功能,可以轻松地进行数据索引、数据组织和元数据管理。
Blob层提供了一种抽象的存储模型,可以将数据存储为任意大小的Blobs(二进制大对象)。每个Blob都有唯一的键名,可类比于对象存储中的键值对,可以通过键名来读取或写入数据。
Bdev层为底层存储设备提供了一个标准的、高性能的接口,并提供了非常灵活和丰富的I/O操作扩展,帮助开发人员轻松地构建高性能、高可靠性和可扩展性的块设备存储应用程序。
NVMe Driver层是一组用于NVMe设备的软件驱动程序,提供NVMe设备支持,实现高性能NVMe设备访问等。
基于图3的SPDK架构,由于I/O写的数据量有大有小,对于存储设备而言,最友好的访问方式,是按顺序读写大量的数据,对于机械硬盘和SSD均是如此。原因是机械硬盘是旋转介质,机械硬盘的数据安排是按照磁盘旋转一圈尽量多读取数据的原则。如果每次应用程序读取的都是小段的数据内容,对于机械硬盘而言,这些数据的位置不在磁头对准的磁道上,那么磁盘需要较长的时间来调整,读写效率会变低,性能变差。而对固态硬盘则是按页page(一般由4K到几十KB不等)大小读写数据,如果写下去的数据小于页(page) 的大小,其实固态硬盘也会写满这一页的空间,这就是所谓的写放大,而闪存的寿命和写的次数相关,因此频繁的小I/O写操作无论对机械硬盘还是固态硬盘都是不友好的。
然而,用户应用程序的I/O随应用的不同而呈现很大的差异性, 可以是随机的,也可以是顺序的,并且和应用的类型密切相关。I/O可以是几百字节或者几M字节不等。
为了克服这个问题,一种实现方式是:使用日志文件的方式来聚合I/O 操作,这样做可以提高数据的读写性能,以及延长固态硬盘的使用寿命。这种方式虽然可以解决日志数据的持久化的问题,以避免数据因断电而丢失,但是因为其需要通过文件系统,性能会受到极大地影响,同时需要自行设计日志格式,性能和效率都不高。
有鉴于此,本实施例对图3的SPDK架构进行了改进,以实现写I/O的有效汇聚,在保证性能和效率的同时,提高了QLC SSD的寿命。请参考图4,图4为本发明实施例提供的改进后的SPDK架构图的示例图,图4中,本实施例在Blob层和NVMe Driver层之间增加了一个I/O汇聚层,用于I/O汇聚,I/O汇聚层在接收到来自Blob层的写I/O后,首先利用I/O语义解释器对其进行I/O语义解释,将写I/O的操作元数据和需要写的数据段分开存储,分别存储至I/O元数据缓存表和I/O数据缓存表,其中两个表中的条目一一对应,数据段过滤器根据I/O元数据缓存表和I/O数据缓存表中的信息分析其中的I/O操作的数据起始地址和偏移量是否可以连续拼接,若可以,则将其进行拼接,并将拼接后的下盘I/O的元数据存储至重定位元数据缓存表、数据存储至重定位I/O数据缓存表,同时将I/O元数据缓存表和I/O数据缓存表中对应的信息删除。I/O元数据缓存表、I/O数据缓存表、重定位元数据缓存表、重定位I/O数据缓存表均存储至CXL内存或CXL SSD的存储空间。I/O汇聚层会将下盘I/O发送给NVMeDriver层,通过NVMe Driver层下盘I/O的数据写入至QLC SSD中。
需要说明的是,为了能正确读出存入的数据,CXL内存或CXL SSD的存储空间还记录了一个汇聚日志表,该汇聚日志表记录数据是否存储至QLC SSD中的标志,通过汇聚日志表中的标志可以得知应该从CXL内存或CXL SSD中读取数据,还是从QLC SSD中读取数据。数据写到QLC SSD空间成功后,通过Bdev层更新汇聚日志表,对于存储至QLC SSD中的数据,还需要同时将该数据在重定位元数据缓存表、重定位I/O数据缓存表中的信息删除。
本实施例还提供了一种能够应用于图4的SPDK架构的写I/O汇聚方法,该方法能够运行于图1~图2中的存储设备10,请参照图5,图5为本发明实施例提供的写I/O汇聚方法的流程示例图,该方法包括以下步骤:
步骤S101,若多个写I/O中存在多个目标写I/O,则将多个目标写I/O拼接成一个下盘I/O,多个目标写I/O的数据连续、且待写长度之和等于预设长度,预设长度为QLC SSD的写入单位的整数倍、且是根据CXL内存或CXL SSD的剩余容量的百分比确定的。
在本实施例中,客户端20每下发一个写请求,该写请求就会经由Blob层下发到I/O语义解释器进行I/O语义解析,得到对应写I/O的元数据和数据,并存储至第一缓存表,存储设备10可以周期性地对第一缓存表中的写I/O进行聚合,以便将数据连续、且待写长度之和等于预设长度的写I/O拼接成一个下盘I/O,将下盘I/O的元数据和数据写入至第二缓存表,存储设备10会根据第二缓存表中的信息将下盘I/O下发至QLC SSD。作为一种判断写I/O数据是否连续的方法,可以通过一个I/O的待写地址和待写长度和另一个I/O的待写地址进行判断,若一个I/O的待写地址+待写长度=另一个I/O的待写地址,则表明这两个I/O的数据是连续的。请参照图6,图6为本发明实施例提供的写I/O拼接的示例图,图6中,I/O_1和I/O_2数据连续,I/O_2和I/O_3数据连续,因此,可以将I/O_1、I/O_2和I/O_3这三个I/O拼接成一个I/O,若三个I/O的待写长度之和等于预设长度,则这三个I/O可以拼接成一个下盘I/O,该下盘I/O的待写地址为I/O_1的待写地址,该下盘I/O的待写长度为这三个I/O的待写长度之和,即预设长度。
需要说明的是,图6只是一种示例,事实上,实际处理时,可以是两个I/O拼接成一个下盘I/O,也可以是三个以上的I/O拼接成一个下盘I/O,只要拼接的I/O满足数据连续、且待写长度之和等于预设长度这个条件即可。
在本实施例中,为了尽可能地避免写放大,预设长度为QLC SSD的写入单位的整数倍,整数倍的值可以根据实际需要预先设定,也可以根据CXL内存或CXL SSD的剩余容量进行动态调整。
步骤S102,将多个目标写I/O中最小的待写地址作为下盘I/O的待写地址,将预设长度作为下盘I/O的待写长度。
步骤S103,将下盘I/O的待写地址和待写长度作为下盘I/O的元数据、并将多个目标写I/O的数据作为下盘I/O的数据写入至第二缓存表,以根据第二缓存表将下盘I/O通过SPDK的非易失性内存表达驱动NVMe Driver层下发至QLC SSD。
在本实施例中,由于第一缓存表和第二缓存表的结构一样,只是其中写I/O的待写地址和待写长度有区别,因而I/O在拼接前后对于上层Blob层和下层Bde层处理都是无感的,更方便在已有的结构上进行适配和调整,适配和调整的成本也相对较小。
可以理解的是,若一个写I/O的待写长度等于预设长度,则该写I/O无需拼接,可以直接下发至QLC SSD。
本实施例提供的上述方法,将客户端下发的写请求以第一缓存表的方式暂存于CXL内存或CXL SSD中,将第一缓存表中的写I/O拼接大小为QLC SSD的写入单位的整数倍的预设长度的下盘I/O,再将下盘I/O写入至QLC SSD,由于多个写I/O被拼成一个I/O发送至QLC SSD进行存储,减小了写放大,提升了QLC SSD的寿命。
在本实施例中,为了更快地响应客户端20,本实施例还提供了一种处理写请求的方式:
首先,接收客户端下发的写请求,写请求包括待写地址、待写长度和待写数据;
其次,将写请求的待写地址和待写长度作为写I/O的元数据、并将写请求的待写数据作为写I/O的数据,将写I/O的元数据和数据写入至第一缓存表。
在本实施例中,可以对写请求进行语义解析,得到其中的待写地址、待写长度和待写数据,将待写地址和待写长度作为写I/O的元数据、将待写数据作为写I/O的数据,作为一条写I/O的信息记录写入至第一缓存表,作为一种实现方式,第一缓存表可以为两个独立的表:I/O元数据缓存表和I/O数据缓存表,前者用于存储写I/O的元数据,后者用于存储写I/O的数据,这两个表中的每一项数据一一对应,例如,I/O元数据缓存表的第一条记录的元数据和I/O数据缓存表中第一条记录的数据是属于同一个写I/O的。
在本实施例中,当写I/O的元数据和数据写入至第一缓存表之后,存储设备10即可向客户端20回复写入成功,一方面,后续写I/O的数据写入QLC SSD由后台线程执行,无需等到数据写入QLC SSD之后再返回客户端20,另一方面,第一缓存表处于CXL内存或CXL SSD中,CXL内存或CXL SSD的访问速度会快于一般的NVMe SSD,由此,提高了写I/O响应的及时性和写I/O性能。
在本实施例中,为了更清楚地描述写I/O汇聚方法的处理过程,本实施提供了写I/O汇聚过程的示例,请参照图7,图7为本发明实施例提供的写I/O汇聚过程的示例图,图7中,数据缓存表和元数据缓存表为第一缓存表,数据缓存表中包括data0~datan,其元数据分别存储至元数据缓存表,元数据缓存表中包括的元数据为:ns结构、qpair结构、lba变量、lba_count变量;其中,ns结构指定了具体访问QLC SSD的命令空间namespace,qpair结构则指定了要提交的数据在内存中的地址等信息,lba变量指定了数据要写到的目标起始地址,lba_count变量指定了要写的数据的长度。
需要说明的是,根据实际实现的需要,元数据还可以包括除此之外的其他的结构和变量。根据元数据中的lba变量、lba_count变量可以判断出多个I/O的数据是否连续,连续的多个I/O的待写长度之和是否为预设长度,若是,则进行拼接,将拼接后的下盘I/O写入第二缓存表,第二缓存表包括重定位元数据缓存表和重定位数据缓存表,前者用于存储下盘I/O的元数据,后者用于存储下盘I/O的数据,图7中,data0、data1和data2拼接成一个下盘I/O,其中,lba_count_new=lba_count0+lba_count1+lab_count2,datax、datay和dataz与之类似,同时,data0、data1和data2、datax、datay和dataz的数据和元数据分别从数据缓存表和元数据缓存表中删除,第一缓存表中其余的不能拼接的I/O仍然留在第一缓存表中。
在本实施例中,预设长度越长,则待拼接的写I/O占用CXL内存或CXL SSD的存储空间的时间也越长,为了使预设长度更合理,既能够达到较好的聚合效果,又能够使得CXL内存或CXL SSD的空间得以合理利用,本实施例还提供了一种确定预设长度的方式:
(1)获取CXL内存或CXL SSD的剩余容量的百分比;
在本实施例中,CXL内存或CXL SSD的剩余容量的百分比=CXL内存或CXL SSD剩余容量/CXL内存或CXL SSD的总容量。
(2)根据百分比确定倍数;
在本实施例中,若百分比小于或者等于30%,则将倍数设置为1;若百分比大于30%且小于或者等于70%,则将倍数设置为2;若百分比大于70%,则将倍数设置为4。
公式表示如下:
(3)根据倍数及QLC SSD的写入单位,确定预设长度。
在本实施例中,写入单位是可以是QLC SSD一个page的大小,一个page可以是几十KB到上百KB,预设长度=写入单位×倍数。
在本实施例中,若CXL内存或CXL SSD中剩余容量过少时,为了使CXL内存或CXLSSD不会成为存储设备的性能瓶颈,此时可以将第一缓存表中的写I/O直接写入QLC SSD,而不再先汇聚,再将汇聚后的下盘I/O写入QLC SSD,一种实现方式为:
若百分比小于或者等于最小预设值,则将第一缓存表中的写I/O的数据写入至QLCSSD,并暂停接收客户端发送的写请求,最小预设值小于30%。
在本实施例中,最小预设值可以根据需要进行设置,例如,最小预设值为20%。
在本实施例中,当CXL内存或CXL SSD的剩余空间重新变得充足时,为了及时恢复处理客户端20的写请求,本实施例还提供了一种实现方式:
若百分比大于最小预设值、且存储设备当前暂停接收客户端发送的写请求,则继续接收客户端发送的写请求。
在本实施例中,随着第一缓存表中的写I/O的数据逐渐写入QLC SSD,CXL内存或CXL SSD中的剩余容量的百分比会重新恢复到大于最小预设值,此时,如果之前存储设备被设置为暂停接收客户端20发送的写请求,此时,可以重新恢复,继续接收客户端20发送的写请求。
在本实施例中,由于数据可能存储至QLC SSD,也可能暂存至CXL内存或CXL SSD,为了高效、正确地读出数据,本实施例还提供了一种实现方式:
首先,通过SPDK的Blob层接收客户端发送的读请求;
其次,从汇聚日志表中获取读请求欲读取的数据的目标标志位;
最后,若目标标志位表征读请求欲读取的数据在QLC SSD中,则通过SPDK的NVMeDriver层从QLC SSD中读取数据,否则从CXL内存或CXL SSD中读取数据。
在本实施例中,CXL内存或CXL SSD还存储有汇聚日志表,汇聚日志表包括表征数据是否写入QLC SSD的标志位,根据数据的标志位可以判定数据是存储在CXL内存或CXLSSD还是QLC SSD。
为了执行上述实施例及各个可能的实施方式中的相应步骤,下面给出一种写I/O汇聚装置100的实现方式。写I/O汇聚装置100应用于图1和图2中的存储设备10,请参照图8,图8为本发明实施例提供的写I/O汇聚装置的方框示意图。需要说明的是,本实施例所提供的写I/O汇聚装置100,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及指出。
写I/O汇聚装置100包括拼接模块110、写入模块120、确定模块130及读取模块140。
拼接模块110,用于若多个写I/O中存在多个目标写I/O,则将多个目标写I/O拼接成一个下盘I/O,多个目标写I/O的数据连续、且待写长度之和等于预设长度,预设长度为QLC SSD的写入单位的整数倍、且是根据CXL内存或CXL SSD的剩余容量的百分比确定的。
拼接模块110,还用于将多个目标写I/O中最小的待写地址作为下盘I/O的待写地址,将预设长度作为下盘I/O的待写长度。
写入模块120,用于将下盘I/O的待写地址和待写长度作为下盘I/O的元数据、并将多个目标写I/O的数据作为下盘I/O的数据写入至第二缓存表,以根据第二缓存表将下盘I/O通过SPDK的非易失性内存表达驱动NVMe Driver层下发至QLC SSD。
在可选的实施方式中,写入模块120还用于:接收客户端下发的写请求,写请求包括待写地址、待写长度和待写数据;将写请求的待写地址和待写长度作为写I/O的元数据、并将写请求的待写数据作为写I/O的数据,将写I/O的元数据和数据写入至第一缓存表。
在可选的实施方式中,写入模块120还用于:若百分比小于或者等于最小预设值,则将第一缓存表中的写I/O的数据写入至QLC SSD,并暂停接收客户端发送的写请求,最小预设值小于30%。
在可选的实施方式中,写入模块120还用于:若百分比大于最小预设值、且存储设备当前暂停接收客户端发送的写请求,则继续接收客户端发送的写请求。
在可选的实施方式中,写I/O汇聚装置100还包括确定模块130。
确定模块130中确定预设长度的方式为:获取CXL内存或CXL SSD的剩余容量的百分比;根据百分比确定倍数;根据倍数及QLC SSD的写入单位,确定预设长度。
在可选的实施方式中,确定模块130在用于根据百分比确定倍数时具体用于:若百分比小于或者等于30%,则将倍数设置为1;若百分比大于30%且小于或者等于70%,则将倍数设置为2;若百分比大于70%,则将倍数设置为4。
在可选的实施方式中,写I/O汇聚装置100还包括读取模块140,CXL内存或CXL SSD还存储汇聚日志表,汇聚日志表包括表征数据是否写入QLC SSD的标志位,读取模块140用于:通过SPDK的Blob层接收客户端发送的读请求;从汇聚日志表中获取读请求欲读取的数据的目标标志位;若目标标志位表征读请求欲读取的数据在QLC SSD中,则通过SPDK的NVMeDriver层从QLC SSD中读取数据,否则从CXL内存或CXL SSD中读取数据。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前述实施方式中任一项的写I/O汇聚方法。
综上所述,本发明实施例提供了一种写I/O汇聚方法、装置、存储设备和存储介质,应用于存储设备,存储设备和客户端通信连接,存储设备包括QLC SSD和CXL内存或包括QLCSSD和CXL SSD,CXL内存或CXL SSD中存储有第一缓存表和第二缓存表,第一缓存表包括多个写I/O的元数据和数据,元数据包括待写地址和待写长度,每一写I/O对应客户端下发至存储设备中运行的存储性能开发工具包SPDK的Blob层的一个写请求,方法包括:若多个写I/O中存在多个目标写I/O,则将多个目标写I/O拼接成一个下盘I/O,多个目标写I/O的数据连续、且待写长度之和等于预设长度,预设长度为QLC SSD的写入单位的整数倍、且是根据所述CXL内存或CXL SSD的剩余容量的百分比确定的;将多个目标写I/O中最小的待写地址作为下盘I/O的待写地址,将预设长度作为下盘I/O的待写长度;将下盘I/O的待写地址和待写长度作为下盘I/O的元数据、并将多个目标写I/O的数据作为下盘I/O的数据写入至第二缓存表,以根据第二缓存表将下盘I/O通过SPDK的Bdev层下发至QLC SSD。与现有技术相比,至少具有以下优势:(1)使用第一缓存表和第二缓存表这种双层缓存表的数据和元数据分离存储的方式,当数据被分解写入CXL内存或CXL SSD中的第一层缓存表后,由于CXL内存或CXL SSD是非易失介质,数据写成功后,就可以认为I/O写操作可以返回成功应答了,这是因为当下发的I/O操作被分解成元数据和数据,并且双层缓存表不在传统的内存空间也不在QLC SSD的存储空间,而是被存储在一种使用内存语义访问的CXL内存或CXL SSD中,这些CXLSSD被当作内存使用,但是数据可以持久化到CXL内存或CXL SSD里的持久介质上,因此,既可以保证I/O数据的读写性能,也同时可以保证数据不会丢失。CXL内存或CXL SSD使用内存语义访问,速度远超普通的NVMe SSD。CXL内存或CXL SSD可以使用16个lane的PCIe插槽,访问速度仅略逊于DRAM的访问速度。在CXL架构中,一个设备可以有多个lane,每个lane的数据传输速率都是2.5GB/s,CXL内存或CXL SSD中的lane指的是连接主机CPU和SSD控制器之间的通道数量,lane的数量越多,数据传输速率也就相应地越快。(2)由于CXL内存或CXLSSD的存储空间是按内存方式访问,因此,元数据和数据的缓存可以用最简单的数组方式组织,可以按查表方式访问元数据记录空间,为I/O数据的汇聚操作提供了极大的便捷。由于元数据和数据的操作都在内存空间,但是却没有占用DRAM的空间,而且CXL内存或CXL SSD的存储密度大,可使用的空间容量远超一般的RDAM,因此即有按内存空间访问的高性能,同时也能缓存更多的I/O元数据和数据。按内存访问的方式,使得I/O汇聚的数据存储方式和数据结构可以按类似数组、表格的方式安排,使得检索、排序、聚合等操作都比较容易实现;(3)CXL内存或CXL SSD上备有电池/超级电容,可以在掉电时可以将正在处理的数据妥善保存,是一种同时具有内存和存储特性的设备,数据非易失,不需要执行flush操作(即把设备易失介质里的数据写到非易失介质里去的操作)。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种写I/O汇聚方法,其特征在于,应用于存储设备,所述存储设备和客户端通信连接,所述存储设备包括四层单元固态硬盘QLC SSD和计算快速链接CXL内存或包括QLC SSD和计算快速链接固态硬盘CXL SSD,所述CXL内存或CXL SSD中存储有第一缓存表和第二缓存表,所述第一缓存表包括多个写I/O的元数据和数据,所述元数据包括待写地址和待写长度,每一所述写I/O对应所述客户端下发至所述存储设备中运行的存储性能开发工具包SPDK的通用块Blob层的一个写请求,所述方法包括:
若所述多个写I/O中存在多个目标写I/O,则将所述多个目标写I/O拼接成一个下盘I/O,所述多个目标写I/O的数据连续、且待写长度之和等于预设长度,所述预设长度为所述QLC SSD的写入单位的整数倍、且是根据所述CXL内存或CXL SSD的剩余容量的百分比确定的;
将所述多个目标写I/O中最小的待写地址作为所述下盘I/O的待写地址,将所述预设长度作为所述下盘I/O的待写长度;
将所述下盘I/O的待写地址和待写长度作为所述下盘I/O的元数据、并将所述多个目标写I/O的数据作为所述下盘I/O的数据写入至所述第二缓存表,以根据所述第二缓存表将所述下盘I/O通过所述SPDK的非易失性内存表达驱动NVMe Driver层下发至所述QLC SSD。
2.如权利要求1所述的写I/O汇聚方法,其特征在于,所述若所述多个写I/O中存在多个目标写I/O,则将所述多个目标写I/O拼接成一个下盘I/O的步骤之前包括:
接收所述客户端下发的写请求,所述写请求包括待写地址、待写长度和待写数据;
将所述写请求的待写地址和待写长度作为写I/O的元数据、并将所述写请求的待写数据作为写I/O的数据,将所述写I/O的元数据和数据写入至所述第一缓存表。
3.如权利要求1所述的写I/O汇聚方法,其特征在于,所述预设长度是通过以下方式确定:
获取所述CXL内存或CXL SSD的剩余容量的百分比;
根据所述百分比确定倍数;
根据所述倍数及所述QLC SSD的写入单位,确定所述预设长度。
4.如权利要求3所述的写I/O汇聚方法,其特征在于,所述根据所述百分比确定倍数的步骤包括:
若所述百分比小于或者等于30%,则将所述倍数设置为1;
若所述百分比大于30%且小于或者等于70%,则将所述倍数设置为2;
若所述百分比大于所述70%,则将所述倍数设置为4。
5.如权利要求1所述的写I/O汇聚方法,其特征在于,所述方法还包括:
若所述百分比小于或者等于最小预设值,则将所述第一缓存表中的写I/O的数据写入至所述QLC SSD,并暂停接收所述客户端发送的写请求,所述最小预设值小于30%。
6.如权利要求1所述的写I/O汇聚方法,其特征在于,所述方法还包括:
若所述百分比大于最小预设值、且所述存储设备当前暂停接收所述客户端发送的写请求,则继续接收所述客户端发送的写请求。
7.如权利要求1所述的写I/O汇聚方法,其特征在于,所述CXL内存或CXL SSD还存储汇聚日志表,所述汇聚日志表包括表征数据是否写入所述QLC SSD的标志位,所述方法还包括:
通过所述SPDK的Blob层接收所述客户端发送的读请求;
从所述汇聚日志表中获取所述读请求欲读取的数据的目标标志位;
若所述目标标志位表征所述读请求欲读取的数据在所述QLC SSD中,则通过所述SPDK的NVMe Driver层从所述QLC SSD中读取数据,否则从所述CXL内存或CXL SSD中读取数据。
8.一种写I/O汇聚装置,其特征在于,应用于存储设备,所述存储设备和客户端通信连接,所述存储设备包括四层单元固态硬盘QLC SSD和计算快速链接CXL内存或包括QLC SSD和计算快速链接固态硬盘CXL SSD,所述CXL内存或CXL SSD中存储有第一缓存表和第二缓存表,所述第一缓存表包括多个写I/O的元数据和数据,所述元数据包括待写地址和待写长度,每一所述写I/O对应所述客户端下发至所述存储设备中运行的存储性能开发工具包SPDK的通用块Blob层的一个写请求,所述装置包括:
拼接模块,用于若所述多个写I/O中存在多个目标写I/O,则将所述多个目标写I/O拼接成一个下盘I/O,所述多个目标写I/O的数据连续、且待写长度之和等于预设长度,所述预设长度为所述QLC SSD的写入单位的整数倍、且是根据所述CXL内存或CXL SSD的剩余容量的百分比确定的;
所述拼接模块,还用于将所述多个目标写I/O中最小的待写地址作为所述下盘I/O的待写地址,将所述预设长度作为所述下盘I/O的待写长度;
写入模块,用于将所述下盘I/O的待写地址和待写长度作为所述下盘I/O的元数据、并将所述多个目标写I/O的数据作为所述下盘I/O的数据写入至所述第二缓存表,以根据所述第二缓存表将所述下盘I/O通过所述SPDK的非易失性内存表达驱动NVMe Driver层下发至所述QLC SSD。
9.一种存储设备,其特征在于,包括处理器和存储器,所述存储器用于存储程序,所述处理器用于在执行所述程序时,实现权利要求1-7中任一项所述的写I/O汇聚方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该计算机程序被处理器执行时实现如权利要求1-7中任一项所述的写I/O汇聚方法。
CN202310921682.9A 2023-07-26 2023-07-26 写i/o汇聚方法、装置、存储设备和存储介质 Active CN116665727B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310921682.9A CN116665727B (zh) 2023-07-26 2023-07-26 写i/o汇聚方法、装置、存储设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310921682.9A CN116665727B (zh) 2023-07-26 2023-07-26 写i/o汇聚方法、装置、存储设备和存储介质

Publications (2)

Publication Number Publication Date
CN116665727A CN116665727A (zh) 2023-08-29
CN116665727B true CN116665727B (zh) 2023-09-22

Family

ID=87722734

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310921682.9A Active CN116665727B (zh) 2023-07-26 2023-07-26 写i/o汇聚方法、装置、存储设备和存储介质

Country Status (1)

Country Link
CN (1) CN116665727B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5321823A (en) * 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
CN114020655A (zh) * 2022-01-05 2022-02-08 苏州浪潮智能科技有限公司 一种内存扩展方法、装置、设备及存储介质
WO2023016407A1 (zh) * 2021-08-11 2023-02-16 华为技术有限公司 数据传输方法、系统、装置及设备
CN115827524A (zh) * 2022-11-18 2023-03-21 超聚变数字技术有限公司 一种数据传输方法以及装置
WO2023049584A1 (en) * 2021-09-27 2023-03-30 Intel Corporation Network layer 7 offload to infrastructure processing unit for service mesh
CN115905146A (zh) * 2021-09-22 2023-04-04 华为技术有限公司 数据处理方法、装置、计算设备及存储系统
CN116486891A (zh) * 2022-01-22 2023-07-25 美光科技公司 用于cxl驱动器中的高ras特征的具有crc+raid架构的影子dram、系统及方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220011966A1 (en) * 2021-09-24 2022-01-13 Intel Corporation Reduced network load with combined put or get and receiver-managed offset
US20220201103A1 (en) * 2022-03-09 2022-06-23 Intel Corporation Metadata compaction in packet coalescing

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5321823A (en) * 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
WO2023016407A1 (zh) * 2021-08-11 2023-02-16 华为技术有限公司 数据传输方法、系统、装置及设备
CN115905146A (zh) * 2021-09-22 2023-04-04 华为技术有限公司 数据处理方法、装置、计算设备及存储系统
WO2023049584A1 (en) * 2021-09-27 2023-03-30 Intel Corporation Network layer 7 offload to infrastructure processing unit for service mesh
CN114020655A (zh) * 2022-01-05 2022-02-08 苏州浪潮智能科技有限公司 一种内存扩展方法、装置、设备及存储介质
CN116486891A (zh) * 2022-01-22 2023-07-25 美光科技公司 用于cxl驱动器中的高ras特征的具有crc+raid架构的影子dram、系统及方法
CN115827524A (zh) * 2022-11-18 2023-03-21 超聚变数字技术有限公司 一种数据传输方法以及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Compute Express Link (CXL) changing the game for Cloud Computing;Das Sharma, D.;2021 IEEE Symposium on High-Performance Interconnects (HOTI);全文 *
基于CXL的高速网卡中DMA的设计与实现;黄明慧;中国优秀硕士学位论文全文数据库 信息科技辑;I137-36 *

Also Published As

Publication number Publication date
CN116665727A (zh) 2023-08-29

Similar Documents

Publication Publication Date Title
KR102556431B1 (ko) 이종 불휘발성 메모리 형태를 갖는 솔리드 스테이트 드라이브
US8924659B2 (en) Performance improvement in flash memory accesses
US20160085585A1 (en) Memory System, Method for Processing Memory Access Request and Computer System
KR102044023B1 (ko) 키 값 기반 데이터 스토리지 시스템 및 이의 운용 방법
JP2019067417A (ja) 最終レベルキャッシュシステム及び対応する方法
US20140189032A1 (en) Computer system and method of controlling computer system
CN111007991B (zh) 基于nvdimm分离读写请求的方法及其计算机
US11210020B2 (en) Methods and systems for accessing a memory
GB2507410A (en) Storage class memory having low power, low latency, and high capacity
US20130111103A1 (en) High-speed synchronous writes to persistent storage
US8694563B1 (en) Space recovery for thin-provisioned storage volumes
CN112262365B (zh) 存储器系统或子系统中的等待时间指示
US11934319B2 (en) Memory system for binding data to a memory namespace
CN111338561B (zh) 存储器控制器与存储器页面管理方法
KR102517685B1 (ko) 메모리 블록 복구 방법 및 디바이스
WO2023035646A1 (zh) 一种扩展内存的方法、装置及相关设备
WO2021035555A1 (zh) 一种固态硬盘的数据存储方法、装置及固态硬盘ssd
US20240020014A1 (en) Method for Writing Data to Solid-State Drive
US11294812B2 (en) Obtaining cache resources for expected writes to tracks in a write set after the cache resources were released for the tracks in the write set
CN115203079A (zh) 一种将数据写入固态硬盘的方法
CN116665727B (zh) 写i/o汇聚方法、装置、存储设备和存储介质
US20190012279A1 (en) Computer system, communication device, and storage control method
CN111290974A (zh) 用于存储设备的缓存淘汰方法与存储设备
CN111290975A (zh) 使用统一缓存处理读命令与预读命令的方法及其存储设备
CN104424124A (zh) 内存装置、电子设备和用于控制内存装置的方法

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