保证原子性和顺序性的数据存储方法和装置

文档序号:1963705 发布日期:2021-12-14 浏览:22次 >En<

阅读说明:本技术 保证原子性和顺序性的数据存储方法和装置 (Data storage method and device for ensuring atomicity and sequency ) 是由 舒继武 廖晓坚 王硕 于 2021-09-09 设计创作,主要内容包括:本申请提出了一种保证原子性和顺序性的数据存储方法,涉及计算机技术领域,其中,该方法包括:在数据存储过程中,通过主机以事务为单位顺序地发送传输命令至设备端的持久性存储区域,并通过提交门铃通知设备处理传输命令;在设备处理完请求时,通过主机以事务为单位顺序地完成请求并通知上层应用,从而保证原子性和顺序性。采用上述方案的本申请在保证原子性和顺序性的同时,降低了数据和命令传输延迟和所消耗的带宽,提升了数据存储的效率。(The application provides a data storage method for ensuring atomicity and sequency, and relates to the technical field of computers, wherein the method comprises the following steps: in the data storage process, sequentially sending a transmission command to a persistent storage area of an equipment end by a host in a transaction unit, and informing the equipment to process the transmission command by submitting a doorbell; when the device finishes processing the request, the host completes the request in order by taking transaction as a unit and informs the upper application, thereby ensuring atomicity and orderliness. By adopting the scheme, atomicity and sequence are guaranteed, data and command transmission delay and consumed bandwidth are reduced, and data storage efficiency is improved.)

保证原子性和顺序性的数据存储方法和装置

技术领域

本申请涉及计算机技术领域,尤其涉及一种保证原子性和顺序性的数据存储方法和装置。

背景技术

数据存储的原子性是指一组请求要么全部执行成功要么全部执行失败。数据存储的顺序性描述了数据落入持久性介质的特定顺序。原子性和顺序性在存储系统中起着至关重要的作用。例如,文件系统中的日志以及数据库中的事务都依赖原子性和特定的存取顺序保证存储系统的正确性和一致性。

由于现有的存储协议/方法不保证原子性和顺序性,存储系统必须依赖日志机制原子地顺序地存储数据,以保证正确性和一致性。现有较先进且广泛使用的非易失性内存主机控制器接口规范(Non-Volatile Memory Express,NVMe)不保证原子性和顺序性。日志机制构建于NVMe之上,为保证原子性和顺序性需要付出高昂的开销。例如,为了原子地存储N个数据块,现有日志机制至少需要主机向设备发送2N+4个MMIO指令,N+2个块I/O指令;设备至少需要2N+4个DMA指令从主机拉取传输命令,并发送N+2个中断指令通知主机数据块的完成情况。这些命令显著地消耗了物理链路的带宽流量。此外,主机端日志机制需要同步地等待这些命令的完成,增加了数据存储的延迟。

发明内容

本申请旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本申请的第一个目的在于提出一种保证原子性和顺序性的数据存储方法,解决了现有方法消耗物理链路的带宽流量,以及数据存储延迟的技术问题,在保证原子性和顺序性的同时,降低了数据和命令传输延迟和所消耗的带宽,提升了数据存储的效率。

本申请以事务为单位发送传输命令,使得CPU有更多机会将多个传输命令合并成一个大请求,缓解单个传输命令需要对齐CPU和物理链路最小传输单元的写放大问题,同时以事务为单位通知设备,降低了主机写门铃的次数,从而降低了流量消耗。本申请将传输命令按顺序发送至设备端的持久性存储区域,使得主机即使在崩溃(例如突然掉电)恢复之后也能追踪事务的原子性和顺序性状态,从而保证了原子性和顺序性,并且本申请将原子性和顺序性从数据持久存储分离,使得主机无需同步等待块I/O、DMA以及中断指令的完成,降低了数据存储延迟。另外,本申请相比日志机制,无需额外的日志提交块,从而降低了流量消耗,提升了数据存储效率。

本申请的第二个目的在于提出一种保证原子性和顺序性的数据存储装置。

本申请的第三个目的在于提出一种非临时性计算机可读存储介质。

为达上述目的,本申请第一方面实施例提出了一种保证原子性和顺序性的数据存储方法,包括:在数据存储过程中,通过主机以事务为单位顺序地发送传输命令至设备端的持久性存储区域,并通过提交门铃通知设备端处理传输命令;在设备处理完请求时,通过主机以事务为单位顺序地完成请求并通知上层应用,从而保证原子性和顺序性。

可选地,在本申请的一个实施例中,事务包括一组全部执行,或者,全部不执行的请求。

可选地,在本申请的一个实施例中,主机完成请求的顺序为用户所看到的请求完成的顺序。

可选地,在本申请的一个实施例中,传输命令为计算机向存储设备发出的存储数据的命令。

可选地,在本申请的一个实施例中,持久性存储区域为一段掉电后数据不丢失的存储空间。

可选地,在本申请的一个实施例中,提交门铃为主机通知设备处理传输命令的中间媒介,包括持久性存储区域的一段空间。

可选地,在本申请的一个实施例中,通过提交门铃通知设备处理传输命令,具体为:

通过主机在将事务的传输命令写入到持久性存储区域后,向提交门铃区域写入一个特定的数值,以通知设备处理请求。

可选地,在本申请的一个实施例中,原子性为事务中的请求或全部执行或不执行的状态。

为达上述目的,本申请第二方面实施例提出了一种保证原子性和顺序性的数据存储装置,包括主机、设备端,其中,

主机,用于在数据存储过程中,以事务为单位顺序地发送传输命令至设备端的持久性存储区域,并通过提交门铃通知设备端处理传输命令;

设备端,用于完成传输命令中的请求;

主机,还用于在设备处理完请求时,以事务为单位顺序地完成请求并通知上层应用,从而保证原子性和顺序性。

为了实现上述目的,本申请第三方面实施例提出了一种非临时性计算机可读存储介质,当存储介质中的指令由处理器被执行时,能够执行一种保证原子性和顺序性的数据存储方法。

本申请实施例的保证原子性和顺序性的数据存储方法、保证原子性和顺序性的数据存储装置和非临时性计算机可读存储介质,解决了现有方法消耗物理链路的带宽流量,以及数据存储延迟的技术问题,在保证原子性和顺序性的同时,降低了数据和命令传输延迟和所消耗的带宽,提升了数据存储的效率。

本申请以事务为单位发送传输命令,使得CPU有更多机会将多个传输命令合并成一个大请求,缓解单个传输命令需要对齐CPU和物理链路最小传输单元的写放大问题,同时以事务为单位通知设备,降低了主机写门铃的次数,从而降低了流量消耗。本申请将传输命令按顺序发送至设备端的持久性存储区域,使得主机即使在崩溃(例如突然掉电)恢复之后也能追踪事务的原子性和顺序性状态,从而保证了原子性和顺序性,并且本申请将原子性和顺序性从数据持久存储分离,使得主机无需同步等待块I/O、DMA以及中断指令的完成,降低了数据存储延迟。另外,本申请相比日志机制,无需额外的日志提交块,从而降低了流量消耗,提升了数据存储效率。

本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。

附图说明

本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1为本申请实施例一所提供的一种保证原子性和顺序性的数据存储方法的流程图;

图2a为本申请实施例的原有数据存储方法的示意图;

图2b为本申请实施例的保证原子性和顺序性的数据存储方法的示意图;

图3为本申请实施例的计算机系统在崩溃恢复时保证原子性和顺序性的示意图;

图4为本申请实施例二所提供的一种保证原子性和顺序性的数据存储装置的结构示意图。

具体实施方式

下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。

下面参考附图描述本申请实施例的保证原子性和顺序性的数据存储方法和装置。

图1为本申请实施例一所提供的一种保证原子性和顺序性的数据存储方法的流程图。

如图1所示,该保证原子性和顺序性的数据存储方法包括以下步骤:

步骤101,在数据存储过程中,通过主机以事务为单位顺序地发送传输命令至设备端的持久性存储区域,并通过提交门铃通知设备端处理传输命令;

步骤102,在设备处理完请求时,通过主机以事务为单位顺序地完成请求并通知上层应用,从而保证原子性和顺序性。

本申请实施例的保证原子性和顺序性的数据存储方法,通过在数据存储过程中,通过主机以事务为单位顺序地发送传输命令至设备端的持久性存储区域,并通过提交门铃通知设备端处理传输命令;在设备处理完请求时,通过主机以事务为单位顺序地完成请求并通知上层应用,从而保证原子性和顺序性。由此,能够解决现有方法消耗物理链路的带宽流量,以及数据存储延迟的技术问题,在保证原子性和顺序性的同时,降低了数据和命令传输延迟和所消耗的带宽,提升了数据存储的效率。

本申请以事务为单位发送传输命令,使得CPU有更多机会将多个传输命令合并成一个大请求,缓解单个传输命令需要对齐CPU和物理链路最小传输单元的写放大问题,同时以事务为单位通知设备,降低了主机写门铃的次数,从而降低了流量消耗。本申请将传输命令按顺序发送至设备端的持久性存储区域,使得主机即使在崩溃(例如突然掉电)恢复之后也能追踪事务的原子性和顺序性状态,从而保证了原子性和顺序性,并且本申请将原子性和顺序性从数据持久存储分离,使得主机无需同步等待块I/O、DMA以及中断指令的完成,降低了数据存储延迟。另外,本申请相比日志机制,无需额外的日志提交块,从而降低了流量消耗,提升了数据存储效率。

进一步地,在本申请实施例中,事务包括一组全部执行,或者,全部不执行的请求。

进一步地,在本申请实施例中,主机完成请求的顺序为用户所看到的请求完成的顺序。

进一步地,在本申请实施例中,传输命令为计算机向存储设备发出的存储数据的命令。

进一步地,在本申请实施例中,持久性存储区域为一段掉电后数据不丢失的存储空间。

进一步地,在本申请实施例中,提交门铃为主机通知设备处理传输命令的中间媒介,包括持久性存储区域的一段空间。

进一步地,在本申请实施例中,通过提交门铃通知设备处理传输命令,具体为:

通过主机在将事务的传输命令写入到持久性存储区域后,向提交门铃区域写入一个特定的数值,以通知设备处理请求。

进一步地,在本申请实施例中,原子性为事务中的请求或全部执行或不执行的状态。

图2a为本申请实施例的原有数据存储方法的示意图。

如图2a所示,在原有数据存储方法中,主机向设备存储数据主要分为7个步骤,主机将传输命令放入主机端的环形队列中;并将队列的尾指针写入设备端的提交门铃;设备观察到门铃变化后通过DMA指令从主机拉取提交队列中的传输命令并进行处理;设备通过块I/O指令从主机拉取数据块并进行存储;设备通过DMA向完成队列中放置完成命令;并通过中断请求通知主机进行处理;主机处理完成队列后通过门铃操作设置完成命令并通知用户数据的完成状态。对于一个包含N个请求的事务,为了保证原子性,主机至少需要经历N+2个以上流程,其中2为日志机制中的描述符块和提交块;为了保证顺序性,主机需要同步执行并等待N+2个以上流程。

图2b为本申请实施例的保证原子性和顺序性的数据存储方法的示意图。

如图2b所示,在保证原子性和顺序性的数据存储方法中,主机向设备存储数据并保证原子性和顺序性主要分为6个步骤,首先,提交队列、提交门铃以及提交队列头指针均放置于设备端的持久性存储区域,以事务为单位,将事务中所有请求的传输命令批量发送至设备端的提交队列中;对于整个事务仅需发送一个提交门铃操作;设备通过块I/O指令从主机拉取数据块并进行存储;设备通过DMA向完成队列中放置完成命令;并通过中断请求通知主机进行处理;在设备处理完事务请求后,对于事务中的所有请求,主机仅向设备的持久性存储区域写入一个提交队列头指针的值,并仅设置一次完成门铃。

本申请以事务为单位设置提交门铃和完成门铃,故能保证在系统正常运行时属于同一事务中的所有请求同时被设备接收和完成(即原子性),同时,按顺序将事务放入提交队列以及提交门铃和完成门铃,故能保证在系统正常运行时事务完成的顺序性。

在本申请中,对于一个包含N个请求的事务,为了保证原子性和顺序性,主机只需4次MMIO指令(门铃也为MMIO),设备只需N+1次DMA指令、块I/O指令以及中断指令,极大降低了所需指令数量。同时,事务的原子性和顺序性状态能够通过持久性的提交队列、提交门铃以及提交头指针推断,极大降低了原子性和顺序性保证的延迟。

图3为本申请实施例的计算机系统在崩溃恢复时保证原子性和顺序性的示意图。

图3所示是计算机系统在崩溃(如突然掉电)恢复时请求和事务的完成状态。位于提交队列头指针之前的请求均已保证原子性和顺序性,故无需额外处理。位于提交队列头指针和提交门铃之间的请求可能存在非原子或者乱序的现象,故需恢复处理。对于请求2和请求3,它们同属于一个事务2,由于事务2中有请求2未完成,故在系统崩溃之前,提交队列头指针未移动到请求4处,因此,事务2的原子性未满足,事务2中请求的数据被擦除。事务3仅包含一个请求4且请求4已经完成(即原子性已保证),然而,由于事务3之前的事务2原子性未保证,故事务3请求的数据也应该被擦除以保证顺序性。综合以上情况,位于提交队列头指针和提交门铃之间的请求均被擦除,以保证顺序性和原子性。

图4为本申请实施例二所提供的一种保证原子性和顺序性的数据存储装置的结构示意图。

如图4所示,该保证原子性和顺序性的数据存储装置,包括主机10、设备端20,其中,

主机10,用于在数据存储过程中,以事务为单位顺序地发送传输命令至设备端的持久性存储区域,并通过提交门铃通知设备端处理传输命令;

设备端20,用于完成传输命令中的请求;

主机10,还用于在设备处理完请求时,以事务为单位顺序地完成请求并通知上层应用,从而保证原子性和顺序性。

本申请实施例的保证原子性和顺序性的数据存储装置,包括主机、设备端,其中,主机,用于在数据存储过程中,以事务为单位顺序地发送传输命令至设备端的持久性存储区域,并通过提交门铃通知设备端处理传输命令;设备端,用于完成传输命令中的请求;主机,还用于在设备处理完请求时,以事务为单位顺序地完成请求并通知上层应用,从而保证原子性和顺序性。由此,能够解决现有方法消耗物理链路的带宽流量,以及数据存储延迟的技术问题,在保证原子性和顺序性的同时,降低了数据和命令传输延迟和所消耗的带宽,提升了数据存储的效率。

本申请以事务为单位发送传输命令,使得CPU有更多机会将多个传输命令合并成一个大请求,缓解单个传输命令需要对齐CPU和物理链路最小传输单元的写放大问题,同时以事务为单位通知设备,降低了主机写门铃的次数,从而降低了流量消耗。本申请将传输命令按顺序发送至设备端的持久性存储区域,使得主机即使在崩溃(例如突然掉电)恢复之后也能追踪事务的原子性和顺序性状态,从而保证了原子性和顺序性,并且本申请将原子性和顺序性从数据持久存储分离,使得主机无需同步等待块I/O、DMA以及中断指令的完成,降低了数据存储延迟。另外,本申请相比日志机制,无需额外的日志提交块,从而降低了流量消耗,提升了数据存储效率。

为了实现上述实施例,本申请还提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例的保证原子性和顺序性的数据存储方法。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种自定义hash防止缓存穿透的方法及系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!