CN115729444A - 一种数据处理方法及装置 - Google Patents

一种数据处理方法及装置 Download PDF

Info

Publication number
CN115729444A
CN115729444A CN202111022655.5A CN202111022655A CN115729444A CN 115729444 A CN115729444 A CN 115729444A CN 202111022655 A CN202111022655 A CN 202111022655A CN 115729444 A CN115729444 A CN 115729444A
Authority
CN
China
Prior art keywords
copy
data
address
read
memory
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.)
Pending
Application number
CN202111022655.5A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202111022655.5A priority Critical patent/CN115729444A/zh
Priority to PCT/CN2022/113098 priority patent/WO2023030013A1/zh
Priority to EP22863153.7A priority patent/EP4386536A1/en
Publication of CN115729444A publication Critical patent/CN115729444A/zh
Priority to US18/591,561 priority patent/US20240201890A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

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)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种数据处理方法及装置,该方法包括:客户端的处理器或网卡生成数据的第一副本和第二副本,由客户端的网卡使用一次单边远程内存访问RDMA方式将第一副本写入存储设备的内存的第一地址以及将第二副本写入该内存的第二地址,或者,由存储设备的网卡根据客户端发送的单边RDMA写请求将数据的第一副本和第二副本分别写入内存的第一地址和第二地址。在存储设备检测到从第一地址读取的第一副本与从第二地址读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作,以使两个内存地址存储的数据相同。实施本申请,通过一次IO消耗实现了数据写入的原子性,降低了数据写入的时延,提高了存储***的性能。

Description

一种数据处理方法及装置
技术领域
本申请涉及数据存储领域,尤其涉及一种数据处理方法及装置。
背景技术
为了解决数据在写入存储介质的过程中因断电等造成的数据撕裂,即部分数据写入成功以及部分数据写入失败,提出了二次提交方式、三次提交方式等保证了数据写入的原子性,使得该次写请求携带的数据全部写入或全部未写入。
但是,二次提交方式或三次提交方式都是基于日志的方式将待写入数据在持久化存储,导致输入输出(Input/Output,IO)开销大、网络往返时间长,降低了存储***的性能。
发明内容
本申请公开了一种数据处理方法及装置,能够实现数据写入的原子性,节省IO开销,提高了存储***的性能。
第一方面,本申请提供了一种数据处理方法,该方法包括:客户端的处理器或者网卡生成数据的第一副本和第二副本;其中,处理器与网卡通信;该网卡使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入第一副本,向该内存的第二地址写入第二副本。
其中,客户端的网卡采用单边RDMA将数据写入存储设备的内存,避免了数据写入过程中双方操作***的接入,能够减小数据写入过程中内存的带宽、计算力的消耗,提高数据写入的效率。
上述方法中,客户端的网卡通过一次单边RDMA技术实现了数据的第一副本和第二副本在存储设备的内存中的连续双写,即将第一副本写入存储设备的内存中的第一地址,待第一副本写入第一地址之后,再将第二副本写入该内存的第二地址。如此,节省了数据写入时的IO开销,降低了数据写入的时延,有效提高了存储***的性能。
可选地,上述内存为持久化内存。
实施上述实现方式,持久化内存能提高客户端读、写数据的速度及效率,实现存储的数据的持久性。
可选地,该方法还包括:该网卡使用单边RDMA方式从第一地址读取第一副本以及从第二地址读取第二副本;该处理器或者网卡校验读取的第一副本和读取的第二副本,并从读取的第一副本和读取的第二副本中确定有效数据。
实施上述实现方式,客户端的处理器或者网卡还可以验证从第一地址读取的第一副本和从第二地址读取的第二副本的有效性或完整性,以从中取有效的数据使用。
可选地,该处理器或者网卡校验读取的第一副本和读取的第二副本,并从读取的第一副本和读取的第二副本中确定有效数据,具体是:该处理器或者网卡检测到读取的第一副本与读取的第二副本相同时,确定读取的第一副本和读取的第二副本为有效数据。
其中,读取的第一副本与读取的第二副本相同包括以下两种实施方式中的任意一种:
一具体实施中,读取的第一副本与数据的第一副本相同,且读取的第二副本与数据的第二副本相同。在此情况下,说明数据的第一副本已成功写入内存的第一地址,数据的第二副本已成功写入内存的第二地址。如此,客户端的处理器或网卡确认读取的第一副本和读取的第二副本为有效数据,确保了数据写入的原子性。
另一具体实施中,读取的第一副本与内存的第一地址存储的初始数据相同,且读取的第二副本与内存的第二地址存储的初始数据相同,其中,第一地址存储的初始数据为数据的第一副本写入内存的第一地址前该第一地址存储的数据,第二地址存储的初始数据为数据的第二副本写入内存的第二地址前该第二地址存储的数据,第一地址存储的初始数据与第二地址存储的初始数据相同。如此,客户端的处理器或网卡确认读取的第一副本和读取的第二副本为有效数据,确保了数据写入的原子性。
第二方面,本申请提供了一种数据处理方法,该方法包括:存储设备的网卡接收客户端发送的单边远程内存访问RDMA写请求;单边RDMA写请求包含数据的第一副本和第二副本,以及第一副本在存储设备的内存的第一地址和第二副本在该内存的第二地址;网卡将第一副本写入第一地址,以及将第二副本写入第二地址。
上述方法中,存储设备的网卡使用一次单边RDMA方式实现数据的第一副本和数据的第二副本在存储设备的内存中的连续双写,即将第一副本写入内存的第一地址之后再将第二副本写入内存的第二地址,不仅减少了IO消耗,还降低了数据写入的延时,有效提高了存储***的性能。
可选地,该内存为持久化内存。
实施上述实现方式,持久化内存能提高客户端读、写数据的速度及效率,实现存储的数据的持久性。
可选地,该方法还包括:存储设备的网卡或处理器从第一地址读取第一副本以及从第二地址读取第二副本;存储设备的网卡或处理器校验读取的第一副本和读取的第二副本,在检测到读取的第一副本与读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作。
实施上述实现方式,存储设备的网卡或处理器在检测到读取的第一副本和读取的第二副本不一致时,可以执行数据覆盖操作以使第一地址存储的数据与第二地址存储的数据相同,从而实现了数据写入的原子性。
可选地,读取的第一副本包括第一数据和第一校验码,读取的第二副本包括第二数据和第二校验码,在满足以下至少一个条件时,读取的第一副本与读取的第二副本不一致:第一数据与第二数据不相同;或第一校验码与第二校验码不相同。
其中,第一数据与第二数据不相同是指第一数据的内容与第二数据的内容不相同。第一校验码与第二校验码不相同是指第一校验码的内容与第二校验码的内容不相同。
一具体实施中,第一数据的长度与第二数据的长度相同,第一校验码的长度与第二校验码的长度相同。
可选地,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作,包括:在基于第一校验码校验第一数据成功时,使用第一数据和第一校验码覆盖第二地址存储的数据。
实施上述实现方式,基于第一校验码校验第一数据成功说明读取的第一副本是完整、有效的,也就是说,第一地址存储的数据是完整、有效的,因此,使用第一数据和第一校验码覆盖第二地址存储的数据,以使第一地址存储的数据与第二地址存储的数据完全相同,从而实现了数据写入的原子性。
可选地,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作,包括:在基于第一校验码校验第一数据失败且基于第二校验码校验第二数据成功时,使用第二数据和第二校验码覆盖第一地址存储的数据。
实施上述实现方式,基于第一校验码校验第一数据失败说明读取的第一副本发生了数据撕裂,也就是说,第一地址存储的数据发生了数据撕裂。基于第二校验码校验第二数据成功说明读取的第二副本是完整、有效的,也就是说,第二地址存储的数据是完整、有效的,因此,使用第二数据和第二校验码覆盖第一地址存储的数据,以使第一地址存储的数据与第二地址存储的数据完全相同,从而实现了数据写入的原子性。
可选地,该方法还包括:存储设备的网卡或处理器在检测到读取的第一副本与读取的第二副本一致时,确定读取的第一副本与读取的第二副本为有效数据。
实施上述实现方式,存储设备的处理器或者网卡还可以验证从第一地址读取的第一副本和从第二地址读取的第二副本的有效性或完整性,以从中取有效的数据使用。
第三方面,本申请提供了一种数据处理装置,该装置包括:生成单元,用于生成数据的第一副本和第二副本;写入单元,用于使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入第一副本,向内存的第二地址写入第二副本。
可选地,该内存为持久化内存。
可选地,该装置还包括:读取单元,用于使用单边RDMA方式从第一地址读取第一副本以及从第二地址读取第二副本;校验单元,用于校验读取的第一副本和读取的第二副本,并从读取的第一副本和读取的第二副本中确定有效数据。
可选地,校验单元,具体用于:检测到读取的第一副本与读取的第二副本相同时,确定读取的第一副本和读取的第二副本为有效数据。
第四方面,本申请提供了一种数据处理装置,该装置包括:接收单元,用于接收客户端发送的单边远程内存访问RDMA写请求;RDMA写请求包含数据的第一副本和第二副本,以及第一副本在存储设备的内存的第一地址和第二副本在该内存的第二地址;
写入单元,用于将第一副本写入第一地址,以及将第二副本写入第二地址。
可选地,该内存为持久化内存。
可选地,该装置还包括:读取单元,用于从第一地址读取第一副本以及从第二地址读取第二副本;处理单元,用于校验读取的第一副本和读取的第二副本,在检测到读取的第一副本与读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作。
可选地,读取的第一副本包括第一数据和第一校验码,读取的第二副本包括第二数据和第二校验码,在满足以下至少一个条件时,读取的第一副本与读取的第二副本不一致:第一数据与第二数据不相同;或第一校验码与第二校验码不相同。
可选地,处理单元,具体用于:在基于第一校验码校验第一数据成功时,使用第一数据和第一校验码覆盖第二地址存储的数据。
可选地,处理单元,具体用于:在基于第一校验码校验第一数据失败且基于第二校验码校验第二数据成功时,使用第二数据和第二校验码覆盖第一地址存储的数据。
可选地,处理单元,具体用于:在检测到读取的第一副本与读取的第二副本一致时,确定读取的第一副本与读取的第二副本为有效数据。
第五方面,本申请提供了一种装置,该装置包括至少一个处理器和网卡,其中,处理器与网卡通信;处理器或者网卡用于生成数据的第一副本和第二副本;网卡用于使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入第一副本,向内存的第二地址写入第二副本。
可选地,该内存为持久化内存。
可选地,网卡还用于使用单边RDMA方式从第一地址读取第一副本以及从第二地址读取第二副本;处理器或者网卡还用于校验读取的第一副本和读取的第二副本,并从读取的第一副本和读取的第二副本中确定有效数据。
可选地,处理器或者网卡还用于校验读取的第一副本和读取的第二副本,并从读取的第一副本和读取的第二副本中确定有效数据,包括:处理器或者网卡还检测到读取的第一副本与读取的第二副本相同时,确定读取的第一副本和读取的第二副本为有效数据。该装置可以是芯片或集成电路,也可以为上述第三方面所述的装置。
第六方面,本申请提供了一种装置,该装置包括网卡和内存,其中,网卡用于接收客户端发送的单边远程内存访问RDMA写请求;单边RDMA写请求包含数据的第一副本和第二副本,以及第一副本在内存的第一地址和第二副本在内存的第二地址;该网卡用于将第一副本写入第一地址,以及将第二副本写入第二地址。
可选地,该内存为持久化内存。
可选地,数据处理装置还包含处理器;该处理器与上述网卡通信;该网卡或处理器用于从第一地址读取第一副本以及从第二地址读取第二副本;网卡或处理器还用于校验读取的第一副本和读取的第二副本,在检测到读取的第一副本与读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作。
可选地,读取的第一副本包括第一数据和第一校验码,读取的第二副本包括第二数据和第二校验码,在满足以下至少一个条件时,读取的第一副本与读取的第二副本不一致:第一数据与第二数据不相同;或第一校验码与第二校验码不相同。
可选地,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作,包括:在基于第一校验码校验第一数据成功时,使用第一数据和第一校验码覆盖第二地址存储的数据。
可选地,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作,包括:在基于第一校验码校验第一数据失败且基于第二校验码校验第二数据成功时,使用第二数据和第二校验码覆盖第一地址存储的数据。
可选地,该网卡或处理器还用于:检测到读取的第一副本与读取的第二副本相同时,确定读取的第一副本和读取的第二副本为有效数据。该装置可以是芯片或集成电路,也可以为上述第四方面所述的装置。
第七方面,本申请提供了一种计算机可读存储介质,包括计算机指令,当所述计算机指令在被处理器运行时,实现上述第一方面或者第一方面的任一可能的实现方式中的方法。
第八方面,本申请提供了一种计算机可读存储介质,包括计算机指令,当所述计算机指令在被处理器运行时,实现上述第二方面或者第二方面的任一可能的实现方式中的方法。
第九方面,本申请提供了一种计算机程序产品,当该计算机程序产品被处理器执行时,实现上述第一方面或者第一方面的任一可能的实施例中的所述方法。该计算机程序产品,例如可以为一个软件安装包,在需要使用上述第一方面的任一种可能的设计提供的方法的情况下,可以下载该计算机程序产品并在处理器上执行该计算机程序产品,以实现第一方面或者第一方面的任一可能的实施例中的所述方法。
第十方面,本申请提供了一种计算机程序产品,当该计算机程序产品被处理器执行时,实现上述第二方面或者第二方面的任一可能的实施例中的所述方法。该计算机程序产品,例如可以为一个软件安装包,在需要使用上述第二方面的任一种可能的设计提供的方法的情况下,可以下载该计算机程序产品并在处理器上执行该计算机程序产品,以实现第二方面或者第二方面的任一可能的实施例中的所述方法。
附图说明
图1是一种数据写入过程发生数据撕裂的示意图;
图2是本申请实施例提供的一种***架构示意图;
图3是本申请实施例提供的一种数据处理方法的流程图;
图4是本申请实施例提供的一种数据写入第一地址之前发生中断事件的示意图;
图5是本申请实施例提供的一种数据写入第一地址的过程中发生中断事件的示意图;
图6是本申请实施例提供的一种数据正准备写入第二地址时发生中断事件的示意图;
图7是本申请实施例提供的一种数据写入第二地址的过程中发生中断事件的示意图;
图8是本申请实施例提供的一种数据写入第二地址后发生中断事件的示意图;
图9是本申请实施例提供的一种统一操作的示意图;
图10是本申请实施例提供的又一种统一操作的示意图;
图11是本申请实施例提供的又一种数据处理方法的流程图;
图12是本申请实施例提供的又一种数据处理方法的流程图;
图13是本申请本实施例提供的一种装置的功能结构示意图;
图14是本申请本实施例提供的一种装置的功能结构示意图;
图15是本申请本实施例提供的又一种设备的结构示意图。
具体实施方式
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。本申请实施例中的说明书和权利要求书中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
数据在写入存储介质(例如,内存、硬盘驱动器HDD)的过程中若发生了断电、宕机等事件时,导致数据的一部分写入成功,数据的另一部分写入失败,造成了存储介质中的数据的撕裂。
参见图1,图1是一种数据写入过程中发生数据撕裂的示意图,如图1所示,t1时刻存储区域0存储有数据“1234”和校验码“CRC0”。假设在此时刻客户端欲将数据“4312”和校验码“CRC1”写入存储区域0,假设在t2时刻成功写入校验码“CRC1”和数据“43”后***发生了断电,则断电后存储区域0存储的数据变为“4334”以及存储的校验码为“CRC1”,由此可以看出,数据“4312”中仅有部分数据“43”成功写入,导致数据撕裂发生。
在客户端向存储设备的存储区域0发起远程直接内存访问(Remote DirectMemory Access,RDMA)写入操作写入数据“4312”后,若写入成功,则存储区域0存储的是数据“4312”和校验码“CRC1”,相当于数据全部写入成功;若写入失败,则期望存储区域0存储的仍然为该次写操作之前的数据,即数据“1234”和校验码“CRC0”,相当于数据全部未写入成功。如果可以保证数据全部写入成功或者数据全部未写入成功,即,不存在数据撕裂发生,就保证了数据写入的原子性。
在一种可能的实施例中,可以通过两次提交的方式解决数据写入的原子性问题,例如,应用将待写入的数据/元数据先不直接写入,而是先写入一日志文件中,该日志文件可称作日志log,在此过程中。后续第二次将该日志文件中的数据/元数据写入进行持久化写入。例如,按照预设周期触发一次目标文件中的数据/元数据的写入,这个过程叫做检查点checkpoint或者提交commit。在此过程中发生了断电或宕机,则重启后文件***可以分析日志,将日志中未成功的commit操作重新执行一遍,直至该次commit执行成功。
由此可以看出,上述解决数据写入的原子性问题的方式需要多次利用IO执行同一数据的写入,IO开销大,且在分布式内存***中应用会造成地方多次的网络往返消耗,降低了***的性能。
针对上述问题,本申请实施例提供一种数据写方法,在每次需要将数据写入存储设备的内存空间时,利用一次IO将该数据进行连续双写,通过两份内存空间实现在使用较少IO消耗的情况下确保数据写的原子性,有利于提高***的性能。
下面将结合附图,对本申请中的技术方案进行描述。
参见图2,图2示例性地给出了一种***架构示意图。该***用于实现数据的原子写。如图2所示,该***包括客户端和存储设备。其中,客户端和存储设备通过网络进行连接通信,该网络可以是广域网或局域网等,本申请实施例不做具体限定。
一具体实施中,客户端用于向存储设备发送单边RDMA写请求,单边RDMA写请求用于指示存储设备将待写入数据来连续分别地写入至存储设备的内存的两个地址。存储设备用于根据单边RDMA写请求写入待写入数据以及对两个地址中的数据进行校验等处理,以保证待写入数据写入的原子性。需要说明的是,内存可以是持久内存(Persistent Memory,PMEM)。
另一具体实施中,客户端可以采用单边RDMA方式将待写入数据写入连续分别地写入至存储设备的内存中(例如,PMEM)中的两个地址,而存储设备用于对两个地址中的数据进行校验等处理。由此可以降低数据写入的时延,提高***的性能。
在一些可能的实施例中,图2所示的***可以是分布式持久化内存***,则图2所示的客户端的数量为多个,图2所示的存储设备的数量也为多个,多个客户端中的任意一个客户端可与多个存储设备进行通信,也就是说,客户端可以向至少一个存储设备发送写指令。
需要说明的是,图2仅为示例性架构图,但不限定图2所示***包括的网元的数量。虽然图2未示出,但除图2所示的功能实体外,图2还可以包括其他功能实体。另外,本申请实施例提供的方法可以应用于图2所示的通信***,当然本申请实施例提供的方法也可以适用其他通信***,本申请实施例对此不予限制。
在客户端向存储设备的内存的地址执行数据写入操作时,所谓保证数据写入的原子性是指:若数据写入操作执行成功,则地址中的数据为目标数据;若该数据写入操作执行失败,则地址中存储的数据仍为执行该数据写入操作的时刻之前存储的数据。基于该思想,提出一种基于尽可能少的IO消耗实现数据写的原子性的数据写方法。
参见图3,图3是本申请实施例提供的一种数据处理方法的流程图,能够基于尽可能少的IO开销实现数据写入的原子性,有利于减少网络往返的开销,提高***的性能。该方法包括但不限于以下步骤:
S101:客户端向存储设备发送单边RDMA写请求。
在本申请实施例中,存储设备的内存中的第一地址存储了第一目标数据,第二地址也存储了第一目标数据。其中,第一地址存储的数据和第二地址存储的数据是相同的。第一地址的地址与第二地址不同。
在本申请实施例中,第一目标数据包括数据1和校验码1,其中,校验码1与数据1对应,校验码1用于唯一表示数据1的完整性和正确性,基于校验码1可以校验数据1。示例性地,第一目标数据可以是“1234CRC1”,其中,“1234”称为数据1,“CRC1”称为校验码1。
在本申请实施例中,单边RDMA写请求包含两份第二目标数据(即第一份第二目标数据和第二份第二目标数据)、第一份第二目标数据在存储设备的内存中的第一地址以及第二份第二目标数据在该内存中的第二地址。单边RDMA写请求用于指示存储设备将第一份第二目标数据写入第一地址以及将第二份第二目标数据写入第二地址。其中,两份第二目标数据是完全相同的。
在本申请实施例中,第二目标数据包括数据2和校验码2。其中,第二目标数据中的数据2与校验码2对应,换句话说,校验码2用于唯一表示数据2的正确性和完整性,基于校验码2可以校验数据2。示例性地,第二目标数据可以是“4321CRC2”,其中,“4321”称为数据2,“CRC2”称为校验码2。
在本申请实施例中,第二目标数据的长度与第一目标数据的长度相同,但是,第二目标数据的内容与第一目标数据的内容不相同。具体地,第二目标数据的长度与第一目标数据的长度相同是指:数据2的长度与数据1的长度相等,校验码2的长度与校验码1的长度相等。第二目标数据的内容与第一目标数据的内容不相同是指,数据2的内容与数据1的内容不相同,且,校验码2的内容与校验码1的内容不相同。
在本申请实施例中,存储设备将两份第二目标数据依次分别写入存储设备的内存的第一地址和第二地址,其中,分别写入是指:将两份第二目标数据中的第一份第二目标数据写入第一地址以覆盖第一地址中的第一目标数据,将两份第二目标数据中的第二份第二目标数据写入第二地址以覆盖第二地址中的第二目标数据;依次是指:先将第一份第二目标数据写入第一地址,待第一份第二目标数据成功写入第一地址后,再将第二份第二目标数据写入第二地址。
在本申请实施例中,存储设备将第一份第二目标数据写入存储设备的第一地址的结果可能包括两种,第一种,存储设备将第一份第二目标数据写入第一地址成功,第二种,存储设备将第一份第二目标数据写入第一地址失败。
存储设备将第一份第二目标数据写入第一地址成功是指:第一份第二目标数据完全覆盖第一地址中的第一目标数据,具体地,第一份第二目标数据中的数据2完全覆盖第一地址中的第一目标数的数据1,第一份第二目标数据中的校验码2完全覆盖第一地址中的第一目标数据中的校验码1。反之,则存储设备将第一份第二目标数据写入第一地址失败。同理,存储设备将第二份第二目标数据写入第二地址成功或者失败可分别参考存储设备将第一份第二目标数据写入第一地址成功或者失败的相关描述,在此不再赘述。
在本申请实施例中,存储设备中执行数据写入操作的具体可以是存储设备的网卡。
需要说明的是,上述例子中并不限制第二目标数据中数据2和校验码2的写入顺序。以将第一份第二目标数据写入第一地址为例,在第一份第二目标数据中,可以将数据2先于校验码2写入第一地址中,也可以将校验码2先于数据2写入第一地址中,还可以将数据2和校验码2同时写入第一地址中,本申请实施例不做具体限定。
在本申请实施例中,客户端可以对第一份第二目标数据进行复制操作获得第二份第二目标数据。
S102:存储设备检测到执行单边RDMA写请求的过程中发生中断事件。
在本申请实施例中,中断事件可以是断电事件、宕机事件以及故障事件等。
在本申请实施例中,存储设备在执行单边RDMA写请求的过程中发生中断事件时,第一地址存储的内容与第二地址存储的内容包括如下几种情况:
情况1:中断事件发生在将第一份第二目标数据写入第一地址之前。此时,第一地址存储的内容与第二地址存储的内容是相同的。具体地,存储设备接收到单边RDMA写请求后,正准备开始将第一份第二目标数据写入第一地址时,发生中断事件,此时,第一地址存储的内容和第二地址存储的内容均保持为第一目标数据。
例如,参见图4,图4是本申请实施例提供的一种数据写入第一地址之前发生中断事件的示意图。在图4中,单边RDMA写请求执行前,第一地址存储的内容为第一目标数据“1234CRC1”,第二地址存储的内容也为第一目标数据“1234CRC1”,在将第一份第二目标数据“4321CRC2”写入第一地址时发生中断事件,则中断事件发生后,第一地址存储的内容仍为第一目标数据“1234CRC1”,第二地址存储的内容也为第一目标数据“1234CRC1”。
情况2:中断事件发生在将第一份第二目标数据写入第一地址的过程中。此时,第一地址存储的内容与第二地址存储的内容不相同。具体地,存储设备在将第一份第二目标数据中的部分写入第一地址时,发生中断事件,此时,第一地址存储的第一目标数据被部分改变,第二地址存储的内容保持为第一目标数据。
如果存储设备将第一份第二目标数据写入第一地址时,先写入数据2,然后,再写入校验码2,那么,第一地址存储的第一目标数据被部分改变可能包括以下状况:(1)数据2部分写入第一地址,校验码2未写入第一地址;(2)数据2全部写入第一地址,校验码2未写入第一地址;(3)数据2全部写入第一地址,校验码2部分写入第一地址。
如果存储设备将第一份第二目标数据写入第一地址时,先写入校验码2,然后,再写入数据2,那么,第一地址存储的第一目标数据被部分改变可能包括以下状况:(1)校验码2部分写入第一地址,数据2未写入第一地址;(2)校验码2全部写入第一地址,数据2未写入第一地址;(3)校验码2全部写入第一地址,数据2部分写入第一地址。
如果存储设备将第一份第二目标数据写入第一地址时,不限制第一份第二目标数据中数据2和校验码2的写入顺序,则除了上述情况外,还包括:数据2部分写入第一地址且校验码2部分写入第一地址这一情况。
例如,参见图5,图5是本申请实施例提供的一种数据写入第一地址的过程中发生中断事件的示意图,图5仅是一种示例,并不限定数据写入第一地址的过程中发生中断事件时仅为图5所示形式。在图5中,单边RDMA写请求执行前,第一地址存储的内容为第一目标数据“1234CRC1”,第二地址存储的内容也为第一目标数据“1234CRC1”,若第一份第二目标数据“4321CRC2”写入第一地址的过程中发生中断事件,则中断事件发生后,第一地址存储的第一目标数据“1234CRC1”被部分更改为“4334CRC1”(即第一地址的数据1被部分改变),第二地址存储的内容保持为第一目标数据“1234CRC1”。
情况3:中断事件发生在将第一份第二目标数据写入第一地址之后,将第二份目标数据写入第二地址之前。此时,第一地址存储的内容与第二地址存储的内容不同。具体地,存储设备在将第一份第二目标数据成功写入第一地址后,正准备将第二份第二目标数据写入第二地址之前,发生中断事件,此时,第一地址存储的内容已更新为第二目标数据;而第二份第二目标数据未写入第二地址,则第二地址存储的内容仍为第一目标数据。
例如,参见图6,图6是本申请实施例提供的一种数据正准备写入第二地址时发生中断事件的示意图。在图6中,单边RDMA写请求执行前,第一地址存储的内容为第一目标数据“1234CRC1”,第二地址存储的内容也为第一目标数据“1234CRC1”,若第一份第二目标数据“4321CRC2”成功写入第一地址后,第二份第二目标数据写入第二地址之前发生中断事件,则中断事件发生后,第一地址存储的第一目标数据“1234CRC1”被更新为第二目标数据“4321CRC2”,由于第二份第二目标数据未写入第二地址,故第二地址存储的内容保持为第一目标数据“1234CRC1”。
情况4:中断事件发生在将第二份第二目标数据写入第二地址的过程中。此时,第一地址存储的内容与第二地址存储的内容不同。具体地,存储设备将第一份第二目标数据成功写入第一地址,接着将第二份第二目标数据中的部分写入第二地址时,发生中断事件,此时,第一地址存储的内容由第一目标数据更新为第二目标数据,而第二地址存储的第一目标数据被部分改变。
如果存储设备将第二份第二目标数据写入第二地址时,先写入数据2,然后,再写入校验码2,那么,第二地址存储的第二目标数据被部分改变可能包括以下状况:(1)数据2部分写入第二地址,校验码2未写入第二地址;(2)数据2全部写入第二地址,校验码2未写入第二地址;(3)数据2全部写入第二地址,校验码2部分写入第二地址。
如果存储设备将第二份第二目标数据写入第二地址时,先写入校验码2,然后,再写入数据2,那么,第二地址存储的第二目标数据被部分改变可能包括以下状况:(1)校验码2部分写入第二地址,数据2未写入第二地址;(2)校验码2全部写入第二地址,数据2未写入第二地址;(3)校验码2全部写入第二地址,数据2部分写入第二地址。
如果存储设备将第二份第二目标数据写入第二地址时,不限制第二份第二目标数据中数据2和校验码2的写入顺序,则除了上述情况外,还包括:数据2部分写入第二地址且校验码2部分写入第二地址这一情况。
例如,参见图7,图7是本申请实施例提供的一种数据写入第二地址的过程中发生中断事件的示意图,图7仅是一种示例,并不限定数据写入第二地址的过程中发生中断事件时仅为图7所示形式。在图7中,单边RDMA写请求执行前,第一地址存储的内容为第一目标数据“1234CRC1”,第二地址存储的内容也为第一目标数据“1234CRC1”,若第二份第二目标数据“4321CRC2”写入第二地址的过程中发生中断事件,则中断事件发生后,第一地址存储的第一目标数据“1234CRC1”已被更新为第二目标数据“4321CRC2”,第二地址存储的内容保持为第一目标数据“1234CRC1”被部分更改为“4321CRC1”。
情况5:中断事件发生在将第二份第二目标数据写入第二地址之后。此时,第一地址存储的内容与第二地址存储的内容是相同的。可以理解,在此情况下,两份第二目标数据均写入成功。
例如,参见图8,图8是本申请实施例提供的一种数据写入第二地址之后发生中断事件的示意图。在图8中,单边RDMA写请求执行前,第一地址存储的内容为第一目标数据“1234CRC1”,第二地址存储的内容也为第一目标数据“1234CRC1”,若第二份第二目标数据“4321CRC2”写入第二地址后发生中断事件,则中断事件发生后,第一地址存储的第一目标数据“1234CRC1”已被更新为第二目标数据“4321CRC2”,第二地址存储的第一目标数据“1234CRC1”也被更新为第二目标数据“4321CRC2”,也就是说,单边RDMA写请求执行成功。
S103:存储设备对第一地址存储的内容和第二地址存储的内容进行检测。
在本申请实施例中,存储设备的处理器或网卡对第一地址存储的内容和第二地址存储的内容进行检测。
在本申请实施例中,在中断事件发生后,存储设备检测第一地址的内容与第二地址的内容是否相同,若检测到第一地址的内容与第二地址的内容相同的情况下,即表示两份第二目标数据写入的情况为上述情况1或情况5,证明保证了数据写入的原子性,不需要进行额外的处理,结束流程;若检测到第一地址存储的内容与第二地址的内容不相同,即表示两份第二目标数据写入的情况为上述情况2-情况4中的任意一种,证明没法保证数据写入的原子性,需要进行额外的处理,进入步骤S104。
在本申请实施例中,检测第一地址的内容与第二地址的内容是否相同,具体为:比较第一地址当前存储的数据与第二地址当前存储的数据是否相同,以及第一地址当前存储的校验码与第二地址当前存储的校验码是否相同。
其中,第一地址存储的内容与第二地址的内容相同是指:第一地址当前存储的数据与第二地址当前存储的数据是否相同,且,第一地址当前存储的校验码与第二地址存储的校验码相同。第一地址存储的内容与第二地址的内容不相同是指:第一地址当前存储的数据与第二地址当前存储的数据不同和/或第一地址当前存储的校验码与第二地址存储的校验码不同。
为了叙述方便,将第一地址当前存储的数据称作数据3以及将第一地址当前存储的校验码称作校验码3。将第二地址当前存储的数据称作数据4以及将第二地址当前存储的校验码称作校验码4。
针对上述情况2-情况4,即检测到第一地址存储的内容与第二地址存储的内容不同的情况下,需要进一步校验第一地址存储的内容以确定第一地址存储的内容是否发生数据撕裂:
针对S102中的情况2,即第一份第二目标数据写入第一地址的过程中发生中断事件,导致第一地址存储的第一目标数据被部分改变但第二地址存储的内容保持为第一目标数据。在此情况下,存储设备校验第一地址存储的内容,具体地,根据校验码3检验数据3,由于情况2中第一地址存储的第一目标数据被部分改变,会发生以下任意一种情况:(1)数据3与数据1不同但校验码3与校验码1相同;(2)数据3与数据1相同但校验码3与校验码1不同;(3)数据3与数据1不同且校验码3与校验码1不同,因此,对于上述任意一种情况,根据校验码3检测数据3均失败,则说明第一地址存储的内容发生数据撕裂。可以理解,由于在情况2中第二地址存储的内容保持为第一目标数据,意味着数据4为数据1,校验码4为校验码1,因此,基于校验码4检测数据4成功,说明第二地址存储的内容未发生数据撕裂。
针对S102中的情况3,即第一份第二目标数据写入第一地址后且第二份第二目标数据写入第二地址之前发生中断事件,使得第一地址存储的内容更新为第二目标数据但第二地址的内容保持为第一目标数据。在此情况下,存储设备校验第一地址存储的内容,即根据校验码3检验数据3,由于第一地址存储的内容已更新为第二目标数据,则数据3与数据2相同且校验码3与校验码2相同,因此,根据校验码3检验数据3成功,则说明第一地址存储的内容未发生数据撕裂。
针对S102中的情况4,即第二份第二目标数据写入第二地址的过程中发生中断事件,使得第一地址存储的内容更新为第二目标数据但第二地址存储的第一目标数据被部分改变。在此情况下,存储设备校验第一地址存储的内容,即根据校验码3检验数据3,由于第一地址存储的内容更新为第二目标数据,则数据3与数据2相同且校验码3与校验码2相同,因此,根据校验码3检验数据3成功,则说明第一地址存储的内容未发生数据撕裂。
综上,存储设备在检测到第一地址存储的内容与第二地址存储的内容不同的情况下,进一步检测第一地址存储的内容是否发生数据撕裂,检测结果显示:对于S102中的情况2,第一地址存储的内容发生数据撕裂;对于S102中的情况3和情况4,第一地址存储的内容未发生数据撕裂。
S104:在检测到第一地址存储的内容与第二地址的内容不同时,存储设备对第一地址存储的内容和第二地址存储的内容执行统一操作。
在第一地址存储的内容与第二地址的内容不同时,存储设备对第一地址存储的内容和第二地址存储的内容执行统一操作,以使第一地址存储的内容与第二地址存储的内容相同,从而确保了数据写入的原子性。需要说明的是,在本申请实施例中,统一操作也可以称作数据覆盖操作。
一具体实施中,在第一地址存储的内容与第二地址的内容不同的情况下,若第一地址存储的内容发生了数据撕裂且第二地址存储的内容未发生数据撕裂,对第一地址存储的内容和第二地址存储的内容执行统一操作,具体是:将第二地址存储的内容覆盖第一地址存储的内容,且第二地址存储的内容保持为第一目标数据,则第一地址存储的内容恢复为第一目标数据,也就是说,第一地址和第二地址存储的内容均为数据1和校验码1。
例如,参见图9,图9是本申请实施例提供的一种统一操作的示意图。在图9中,假设中断事件发生后,此时第一地址存储的内容为“4334CRC1”,即第一地址存储的第一目标数据被部分改变,第二地址存储的内容保持为第一目标数据“1234CRC1”。由于第一地址存储的内容与第二地址存储的内容不相同,且经检测发现第一地址存储的内容发生数据撕裂,因此,执行统一操作,使用第二地址存储的内容覆盖第一地址存储的内容,则第一地址和第二地址存储的内容均为第一目标数据“1234CRC1”。
一具体实施中,在第一地址存储的内容与第二地址的内容不同的情况下,若第一地址存储的内容未发生数据撕裂,对第一地址存储的内容和第二地址存储的内容执行统一操作,具体是:将第一地址存储的内容覆盖第二地址存储的内容,且第一地址存储的内容为第二目标数据,则第二地址存储的内容更新为第二目标数据,也就是说,第一地址和第二地址存储的内容均为数据2和校验码2。
例如,参见图10,图10是本申请实施例提供的一种统一操作的示意图。在图10中,假设中断事件发生后,此时第一地址存储的内容为“4321CRC2”,即第一地址存储的内容已更新为第二目标数据,第二地址存储的内容为“4321CRC1”,即第二地址存储的第一目标数据被部分改变。由于第一地址存储的内容与第二地址存储的内容不相同,且经检测发现第一地址存储的内容未发生数据撕裂,因此,执行统一操作,使用第一地址存储的内容覆盖第二地址存储的内容,则第一地址和第二地址存储的内容均为第二目标数据“4321CRC2”。
可以看到,实施本申请实施例,基于一次IO将待写入数据在存储设备的内存的存储有相同内容的两个地址上进行连续双写,在数据写入过程被中断时,根据数据在两个地址的写入情况执行统一操作使得这两个地址存储的内容相同,从而实现了数据写入的原子性,减少了IO的消耗,有利于提高***的性能。
综上可以看出,将待写入数据串行依次写入存储设备的内存中的两个地址可实现数据写入的原子性。为了降低数据写入的时延,进一步提高数据写入的效率,还可以由客户端采用单边RDMA技术将待写入数据依次写入存储设备的内存中的两个地址。
需要说明的是,基于RDMA技术可实现利用网络将一计算机内的数据传输至另一计算机,无需双方操作***的介入,消除了数据包在用户空间和内核空间复制移动以及上下文切换的开销,减小了内存带宽、计算力的消耗。
参见图11,图11是本申请实施例提供的又一种数据处理方法的流程。相较于图3实施例,在图11中,数据写入操作是由客户端执行,而非图3实施例中的存储设备执行。图11可以独立于图3实施例。该方法包括但不限于以下步骤:
S201:客户端基于单边RDMA技术将两份第二目标数据依次写入存储设备的内存的第一地址和第二地址。
在本申请实施例中,在客户端将两份第二目标数据写入存储设备之前,存储设备的内存的第一地址存储第一目标数据且第二地址也存储第一目标数据,也就是说,第一地址存储的内容和第二地址存储的内容完全相同。需要说明的是,第一目标数据、第二目标数据具体可参考图3实施例中S101中第一目标数据、第二目标数据的相关叙述,在此不再赘述。
在本申请实施例中,第一地址与第二地址不同。
在本申请实施例中,客户端采用单边RDMA技术将两份第二目标数据依次写入存储设备的内存的第一地址和第二地址,其中,分别写入是指:客户端将两份第二目标数据中的第一份第二目标数据写入存储设备的内存的第一地址以覆盖第一地址的第一目标数据,以及将两份第二目标数据中的第二份第二目标数据写入存储设备的内存的第二地址以覆盖第二地址的第一目标数据;依次是指:客户端先将第一份第二目标数据写入第一地址,待第一份第二目标数据成功写入第一地址后,客户端再将第二份第二目标数据写入第二地址。需要说明的是,有关数据写入成功或失败等叙述具体可参考图3实施例中S101的相关叙述,在此不再赘述。
在本申请实施例中,客户端中执行数据写入操作的具体可以是客户端的网卡。
可以理解,客户端使用单边RDMA技术是指:数据的写/读操作均由客户端执行。在实际通信过程中,由客户端将数据写入存储设备的内存的目标地址中,且数据写入过程中,存储设备不需要执行任何操作。需要说明的是,客户端使用单边RDMA技术之前,客户端预先获取了存储设备的内存的两个地址(例如,第一地址和第二地址)以及这两个地址的使用权限。
一具体实施中,两份第二目标数据中的第二份第二目标数据可以是客户端对第一份第二目标数据进行复制获得的。两份第二目标数据为客户端基于一次IO消耗写入第一地址和第二地址中的。
S202:数据写入过程中发生中断事件,存储设备对第一地址存储的内容与第二地址存储的内容进行检测。
在本申请实施例中,客户端执行数据写入的过程中发生中断事件,在此情况下,两份第二目标数据在存储设备的内存的第一地址和第二地址的写入情况具体可参考上述图3实施例中S102中情况1-情况5的相关叙述,在此不再赘述。需要说明的是,与S102的区别在于数据写入的执行主体由S102中的存储设备替换为客户端。
在本申请实施例中,存储设备对第一地址的内容和第二地址的内容进行检测的过程具体可参考图3中S103的相关叙述,为了说明书的简洁,在此不再赘述。
S203:存储设备在检测到第一地址存储的内容与第二地址存储的内容不同时,对第一地址存储的内容和第二地址存储的内容执行统一操作。本步骤具体可参考图3中S104的相关叙述,为了说明书的简洁,在此不再赘述。
可以看到,实施本申请实施例,采用单边RDMA技术基于一次IO将待写入数据在存储设备的内存的两个地址进行连续双写,能有效降低数据写入的时延,提高数据的写入效率。在数据写入过程被中断时,根据数据在两个地址的写入情况进行统一操作操作使得这两个地址存储的内容相同,从而实现了数据写入的原子性,减少了IO的消耗,有利于提高***的性能。
参见图12,图12是本申请实施例提供的又一种数据处理方法的流程图。图12所描述的实施例可以独立于图3和图11实施例,也可以是对图3和图11实施例的补充。该方法包括但不限于以下步骤:
S301:客户端的处理器或者网卡生成数据的第一副本和第二副本。
在本申请实施例中,第一副本与第二副本是完全相同的。需要说明的是,此数据相当于图3或图11实施例中的第二目标数据,其中,第一副本即为图3或图11实施例中的第一份第二目标数据,第二副本即为图3或图11实施例中的第二份第二目标数据。
S302:客户端的网卡使用一次单边RDMA方式向存储设备的内存的第一地址写入第一副本,向该内存的第二地址写入第二副本。
一具体实施中,存储设备独立于客户端。
一具体实施中,该内存为持久化内存。
在本申请实施例中,客户端的网卡使用单边RDMA方式向存储设备的内存的第一地址写入第一副本以及向内存的第二地址写入第二副本,也就是说,数据写入的执行主体是客户端。此步骤具体可参考图11实施例中S201的相关叙述,在此不再赘述。
需要说明的是,第一副本在第一地址中写入情况以及第二副本在第二地址中的写入情况具体可参考图3实施例中S102中情况1-情况6的相关描述,在此不再赘述。
在一些可能的实施例中,也可以不执行S302,执行下述S3021和S3022以替换S302。
S3021:客户端向存储设备发送单边RDMA写请求。
可选地,在S301之后,可以执行S3021。
在本申请实施例中,客户端向存储设备发送单边RDMA写请求。相应地,存储设备的网卡接收单边RDMA写请求。
其中,单边RDMA写请求包含数据的第一副本和第二副本,以及第一副本在存储设备的内存的第一地址和第二副本在内存的第二地址。可以理解,单边RDMA写请求用于指示将第一副本写入存储设备的内存的第一地址以及将第二副本写入该内存的第二地址。
S3022:存储设备的网卡根据单边RDMA写请求将第一副本写入第一地址,以及将第二副本写入第二地址。
可以理解,S3021和S3022也实现了将数据的第一副本写入内存的第一地址以及将数据的第二副本写入内存的第二地址,区别于S302,S3021和S3022中数据写入的执行主体为存储设备。此实施例具体可参考图3实施例中S101的相关叙述,在此不再赘述。
S303:存储设备的处理器或网卡从第一地址读取第一副本以及从第二地址读取第二副本,并校验读取的第一副本和读取的第二副本,在检测到读取的第一副本与读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作。
在本申请实施例中,读取的第一副本包括第一数据和第一校验码,所述读取的第二副本包括第二数据和第二校验码,在满足以下至少一个条件时,读取的第一副本与读取的第二副本不一致:第一数据与第二数据不相同;或第一校验码与第二校验码不相同。导致读取的第一副本与读取的第二副本不一致的原因可参考图3实施例中S102的情况2至情况4中的任意一种。
一具体实施中,在检测到读取的第一副本与读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作,可以是:在检测到读取的第一副本与读取的第二副本不一致时,若基于第一校验码校验第一数据成功时,使用第一数据和第一校验码覆盖第二地址存储的数据。此实施例与图3实施例中S104中将第一地址存储的内容覆盖第二地址的内容对应。
一具体实施中,在检测到读取的第一副本与读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作,可以是:在检测到读取的第一副本与读取的第二副本不一致时,若基于第一校验码校验第一数据失败且基于第二校验码校验第二数据成功时,使用第二数据和第二校验码覆盖第一地址存储的数据。此实施例与图3实施例中S104中将第二地址存储的内容覆盖第一地址存储的内容对应。
需要说明的是,数据覆盖操作即为图3或图11实施例中的统一操作,其目的是为了使第一地址存储的数据与第二地址存储的数据完全相同。
需要说明的是,本申请实施例并不限定客户端的处理器或者网卡生成的数据的副本的数量。
一具体实施中,客户端的处理器或网卡也可以生成数据的三个副本,分别为第一副本、第二副本和第三副本。相应地,可以由客户端的网卡使用一次单边RDMA方式向存储设备的内存的第一地址写入第一副本、向该内存的第二地址写入第二副本以及向该内存的第三地址写入第三副本,也可以由客户端向存储设备发送单边RDMA写请求以指示存储设备根据写RDMA写请求将第一副本写入内存的第一地址、将第二副本写入内存的第一地址以及将第三副本写入内存的第三地址,本申请实施例不作具体限定。存储设备的处理器或网卡从第一地址读取第一副本、从第二地址读取第二副本以及从第三地址读取第三副本,在检测到读取的第一副本、读取的第二副本和读取的第三副本中存在两个副本不一致时,对第一地址存储的数据、第二地址存储的数据或第三地址存储的数据中的至少一者执行数据覆盖操作,以使者三个地址存储的数据相同。
S304:客户端的网卡使用单边RDMA方式从第一地址读取第一副本以及从第二地址读取第二副本。
S305:客户端的处理器或网卡校验读取的第一副本和读取的第二副本,并从读取的第一副本和读取的第二副本中确定有效数据。
在本申请实施例中,客户端的处理器或者网卡检测到读取的第一副本与读取的第二副本相同时,确定读取的第一副本和读取的第二副本为有效数据。
一具体实施中,读取的第一副本与数据的第一副本相同,且读取的第二副本与数据的第二副本相同。在此情况下,说明数据的第一副本已成功写入内存的第一地址,数据的第二副本已成功写入内存的第二地址。如此,客户端的处理器或网卡确认读取的第一副本和读取的第二副本为有效数据,确保了数据写入的原子性。需要说明的是,此实施例可参考图3实施例中S102的情况5。
另一具体实施中,读取的第一副本与内存的第一地址存储的初始数据相同,且读取的第二副本与内存的第二地址存储的初始数据相同,其中,第一地址存储的初始数据为数据的第一副本写入内存的第一地址前该第一地址存储的数据,第二地址存储的初始数据为数据的第二副本写入内存的第二地址前该第二地址存储的数据,第一地址存储的初始数据与第二地址存储的初始数据相同。如此,客户端的处理器或网卡确认读取的第一副本和读取的第二副本为有效数据,确保了数据写入的原子性。需要说明的是,第一地址存储的初始数据可以是图3实施例中的第一目标数据,第二地址存储的初始数据也是图3实施例中的第一目标数据。需要说明的是,此实施例可参考图3实施例中S102的情况1。
可以看到,实施本申请实施例,采用一次单边RDMA方式将数据的两个副本写入存储设备的两个内存地址,检测到这两个内存地址中存储的数据不一致时,对相应地内存地址的数据执行数据覆盖操作使得这两个内存地址存储的数据相同,从而实现了以尽可能少的IO消耗确保数据写入的原子性,降低了数据写入的时延,有利于提高存储***的性能。
参见图13,图13是本申请实施例提供的一种装置的功能结构示意图,装置30包括生成单元310和写入单元312。该装置30可以通过硬件、软件或者软硬件结合的方式来实现。
其中,生成单元310,用于生成数据的第一副本和第二副本;写入单元312,用于使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入所述第一副本,向所述内存的第二地址写入所述第二副本。
在一些可能的实施例中,装置30还包括校验单元314和读取单元316,读取单元316用于使用单边RDMA方式从第一地址读取第一副本以及从第二地址读取第二副本;校验单元314用于校验读取的第一副本和读取的第二副本,并从所读取的第一副本和读取的第二副本中确定有效数据。
该装置30的各功能模块还可用于实现图12实施例所描述的方法。在图12实施例中,生成单元310可用于执行S301,写入单元312可用于执行S302。读取单元316可用于执行S304,校验单元314可用于执行S305。该装置30的各功能模块还可用于实现图3和图11实施例所描述的方法,为了说明书的简洁,在此不再赘述。
参见图14,图14是本申请实施例提供的一种装置的功能结构示意图,装置40包括接收单元410和写入单元412。该装置40可以通过硬件、软件或者软硬件结合的方式来实现。
其中,接收单元410,用于接收客户端发送的单边远程内存访问RDMA写请求;单边RDMA写请求包含数据的第一副本和第二副本,以及第一副本在所述存储设备的内存的第一地址和第二副本在该内存的第二地址;写入单元412,用于将第一副本写入第一地址,以及将第二副本写入第二地址。
在一些可能的实施例中,装置40还包括处理单元414和读取单元416,读取单元416用于从第一地址读取第一副本以及从第二地址读取第二副本;处理单元414用于校验读取的第一副本和读取的第二副本,在检测到读取的第一副本与读取的第二副本不一致时,对第一地址存储的数据或第二地址存储的数据执行数据覆盖操作。
该装置40的各功能模块还可用于实现图12实施例所描述的方法。在图12实施例中,接收单元410和写入单元412可用于执行S3022,读取单元416和处理单元414可用于执行S303。该装置40的各功能模块还可用于实现图3和图11实施例所描述的方法,为了说明书的简洁,在此不再赘述。
本申请实施例还提供一种设备。如图15所示,设备50至少包括:处理器501、网卡502和总线503。处理器501和网卡502之间通过总线503通信。设备50可以是上述中的客户端或存储设备。应理解,本申请不限定设备50中的处理器的个数。
总线503可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图15中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。总线503可包括在设备50各个部件(例如,网卡502、处理器501)之间传送信息的通路。
处理器501可以包括中央处理器(central processing unit,CPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
在设备50为上述中的客户端时,网卡502可以用于生成数据的第一副本和第二副本,以及还用于使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入第一副本,向该内存的第二地址写入第二副本。在设备50为上述中的存储设备时,网卡502可以用于接收客户端发送的单边远程内存访问RDMA写请求,该单边RDMA写请求包含数据的第一副本和第二副本,以及第一副本在存储设备的内存的第一地址和第二副本在该内存的第二地址;网卡502还用于将第一副本写入第一地址,以及将第二副本写入第二地址。
一具体实施中,在该设备50为上述中的客户端时,该设备50的各个模块用于执行前述图3、图11或图12实施例描述的客户端侧的方法。
在一种可能的设计方式中,例如,设备50可为执行图12所示方法的客户端中的一个或多个模块,设备50用于执行以下操作:
通过处理器501或网卡502生成数据的第一副本和第二副本;
通过网卡502使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入第一副本,向内存的第二地址写入第二副本。
另一具体实施中,在该设备50为上述中的存储设备时,设备50还包括内存504,内存504可以是持久内存(Persistent Memory,PMEM)等。该设备50的各个模块可以用于执行前述图3、图11或图12实施例描述的存储设备侧的方法。
在一种可能的设计方式中,例如,设备50可为执行图12所示方法的存储设备中的一个或多个模块,设备50用于执行以下操作:
通过网卡502接收客户端发送的单边远程内存访问RDMA写请求;单边RDMA写请求包含数据的第一副本和第二副本,以及第一副本在存储设备的内存504的第一地址和第二副本在该内存504的第二地址;
通过网卡502将第一副本写入第一地址,以及将第二副本写入第二地址。
在本文上述的实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。
需要说明的是,本领域普通技术人员可以看到上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质包括只读存储器(Read-Only Memory,ROM)、随机存储器(Random AccessMemory,RAM)、可编程只读存储器(Programmable Read-only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、一次可编程只读存储器(One-time Programmable Read-Only Memory,OTPROM)、电子抹除式可复写只读存储(Electrically-Erasable Programmable Read-Only Memory,EEPROM)、只读光盘(CompactDiscRead-Only Memory,CD-ROM)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机程序产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是个人计算机,服务器,或者网络设备、机器人、单片机、芯片、机器人等)执行本申请各个实施例所述方法的全部或部分步骤。

Claims (30)

1.一种数据处理方法,其特征在于,所述方法包括:
客户端的处理器或者网卡生成数据的第一副本和第二副本;其中,所述处理器与所述网卡通信;
所述网卡使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入所述第一副本,向所述内存的第二地址写入所述第二副本。
2.根据权利要求1所述的方法,其特征在于,所述内存为持久化内存。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
所述网卡使用单边RDMA方式从所述第一地址读取所述第一副本以及从所述第二地址读取所述第二副本;
所述处理器或者网卡校验读取的第一副本和读取的第二副本,并从所述读取的第一副本和所述读取的第二副本中确定有效数据。
4.根据权利要求3所述的方法,其特征在于,所述处理器或者网卡校验读取的第一副本和读取的第二副本,并从所述读取的第一副本和所述读取的第二副本中确定有效数据,包括:
所述处理器或者网卡检测到读取的第一副本与读取的第二副本相同时,确定所述读取的第一副本和所述读取的第二副本为有效数据。
5.一种数据处理方法,其特征在于,所述方法包括:
存储设备的网卡接收客户端发送的单边远程内存访问RDMA写请求;所述单边RDMA写请求包含数据的第一副本和第二副本,以及所述第一副本在所述存储设备的内存的第一地址和所述第二副本在所述内存的第二地址;
所述网卡将所述第一副本写入所述第一地址,以及将所述第二副本写入所述第二地址。
6.根据权利要求5所述的方法,其特征在于,所述内存为持久化内存。
7.根据权利要求5或6所述的方法,其特征在于,所述方法还包括:
所述存储设备的网卡或处理器从所述第一地址读取所述第一副本以及从所述第二地址读取所述第二副本;
所述存储设备的网卡或处理器校验读取的第一副本和读取的第二副本,在检测到所述读取的第一副本与所述读取的第二副本不一致时,对所述第一地址存储的数据或所述第二地址存储的数据执行数据覆盖操作。
8.根据权利要求7所述的方法,其特征在于,所述读取的第一副本包括第一数据和第一校验码,所述读取的第二副本包括第二数据和第二校验码,在满足以下至少一个条件时,所述读取的第一副本与所述读取的第二副本不一致:
所述第一数据与所述第二数据不相同;或
所述第一校验码与所述第二校验码不相同。
9.根据权利要求8所述的方法,其特征在于,所述对所述第一地址存储的数据或所述第二地址存储的数据执行数据覆盖操作,包括:
在基于所述第一校验码校验所述第一数据成功时,使用所述第一数据和所述第一校验码覆盖所述第二地址存储的数据。
10.根据权利要求8所述的方法,其特征在于,所述对所述第一地址存储的数据或所述第二地址存储的数据执行数据覆盖操作,包括:
在基于所述第一校验码校验所述第一数据失败且基于所述第二校验码校验所述第二数据成功时,使用所述第二数据和所述第二校验码覆盖所述第一地址存储的数据。
11.一种数据处理装置,其特征在于,所述装置包括:
生成单元,用于生成数据的第一副本和第二副本;
写入单元,用于使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入所述第一副本,向所述内存的第二地址写入所述第二副本。
12.根据权利要求11所述的装置,其特征在于,所述内存为持久化内存。
13.根据权利要求11或12所述的装置,其特征在于,所述装置还包括:
读取单元,用于使用单边RDMA方式从所述第一地址读取所述第一副本以及从所述第二地址读取所述第二副本;
校验单元,用于校验读取的第一副本和读取的第二副本,并从所述读取的第一副本和所述读取的第二副本中确定有效数据。
14.根据权利要求13所述的装置,其特征在于,所述校验单元,具体用于:
检测到读取的第一副本与读取的第二副本相同时,确定所述读取的第一副本和所述读取的第二副本为有效数据。
15.一种数据处理装置,其特征在于,所述装置包括:
接收单元,用于接收客户端发送的单边远程内存访问RDMA写请求;所述单边RDMA写请求包含数据的第一副本和第二副本,以及所述第一副本在所述存储设备的内存的第一地址和所述第二副本在所述内存的第二地址;
写入单元,用于将所述第一副本写入所述第一地址,以及将所述第二副本写入所述第二地址。
16.根据权利要求15所述的装置,其特征在于,所述内存为持久化内存。
17.根据权利要求15或16所述的装置,其特征在于,所述装置还包括:
读取单元,用于从所述第一地址读取所述第一副本以及从所述第二地址读取所述第二副本;
处理单元,用于校验读取的第一副本和读取的第二副本,在检测到所述读取的第一副本与所述读取的第二副本不一致时,对所述第一地址存储的数据或所述第二地址存储的数据执行数据覆盖操作。
18.根据权利要求17所述的装置,其特征在于,所述读取的第一副本包括第一数据和第一校验码,所述读取的第二副本包括第二数据和第二校验码,在满足以下至少一个条件时,所述读取的第一副本与所述读取的第二副本不一致:
所述第一数据与所述第二数据不相同;或
所述第一校验码与所述第二校验码不相同。
19.根据权利要求18所述的装置,其特征在于,所述处理单元,具体用于:
在基于所述第一校验码校验所述第一数据成功时,使用所述第一数据和所述第一校验码覆盖所述第二地址存储的数据。
20.根据权利要求18所述的装置,其特征在于,所述处理单元,具体用于:
在基于所述第一校验码校验所述第一数据失败且基于所述第二校验码校验所述第二数据成功时,使用所述第二数据和所述第二校验码覆盖所述第一地址存储的数据。
21.一种数据处理装置,其特征在于,所述装置包括至少一个处理器和网卡,其中,所述处理器与所述网卡通信;
所述处理器或者网卡用于生成数据的第一副本和第二副本;
所述网卡用于使用一次单边远程内存访问RDMA方式向存储设备的内存的第一地址写入所述第一副本,向所述内存的第二地址写入所述第二副本。
22.根据权利要求21所述的数据处理装置,其特征在于,所述内存为持久化内存。
23.根据权利要求21或22所述的数据处理装置,其特征在于,
所述网卡还用于使用单边RDMA方式从所述第一地址读取所述第一副本以及从所述第二地址读取所述第二副本;
所述处理器或者网卡还用于校验读取的第一副本和读取的第二副本,并从所述读取的第一副本和所述读取的第二副本中确定有效数据。
24.根据权利要求23所述的数据处理装置,其特征在于,所述处理器或者网卡还用于校验读取的第一副本和读取的第二副本,并从所述读取的第一副本和所述读取的第二副本中确定有效数据,包括:
所述处理器或者网卡还检测到读取的第一副本与读取的第二副本相同时,确定所述读取的第一副本和所述读取的第二副本为有效数据。
25.一种数据处理装置,其特征在于,所述装置包括网卡和内存,其中,
所述网卡用于接收客户端发送的单边远程内存访问RDMA写请求;所述单边RDMA写请求包含数据的第一副本和第二副本,以及所述第一副本在所述内存的第一地址和所述第二副本在所述内存的第二地址;
所述网卡用于将所述第一副本写入所述第一地址,以及将所述第二副本写入所述第二地址。
26.根据权利要求25所述的数据处理装置,其特征在于,所述内存为持久化内存。
27.根据权利要求25或26所述的数据处理装置,其特征在于,所述数据处理装置还包含处理器;所述处理器与所述网卡通信;
所述网卡或处理器用于从所述第一地址读取所述第一副本以及从所述第二地址读取所述第二副本;
所述网卡或处理器还用于校验读取的第一副本和读取的第二副本,在检测到所述读取的第一副本与所述读取的第二副本不一致时,对所述第一地址存储的数据或所述第二地址存储的数据执行数据覆盖操作。
28.根据权利要求27所述的数据处理装置,其特征在于,所述读取的第一副本包括第一数据和第一校验码,所述读取的第二副本包括第二数据和第二校验码,在满足以下至少一个条件时,所述读取的第一副本与所述读取的第二副本不一致:
所述第一数据与所述第二数据不相同;或
所述第一校验码与所述第二校验码不相同。
29.根据权利要求28所述的数据处理装置,其特征在于,所述对所述第一地址存储的数据或所述第二地址存储的数据执行数据覆盖操作,包括:
在基于所述第一校验码校验所述第一数据成功时,使用所述第一数据和所述第一校验码覆盖所述第二地址存储的数据。
30.根据权利要求28所述的数据处理装置,其特征在于,所述对所述第一地址存储的数据或所述第二地址存储的数据执行数据覆盖操作,包括:
在基于所述第一校验码校验所述第一数据失败且基于所述第二校验码校验所述第二数据成功时,使用所述第二数据和所述第二校验码覆盖所述第一地址存储的数据。
CN202111022655.5A 2021-09-01 2021-09-01 一种数据处理方法及装置 Pending CN115729444A (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202111022655.5A CN115729444A (zh) 2021-09-01 2021-09-01 一种数据处理方法及装置
PCT/CN2022/113098 WO2023030013A1 (zh) 2021-09-01 2022-08-17 一种数据处理方法及装置
EP22863153.7A EP4386536A1 (en) 2021-09-01 2022-08-17 Data processing method and apparatus
US18/591,561 US20240201890A1 (en) 2021-09-01 2024-02-29 Data processing method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111022655.5A CN115729444A (zh) 2021-09-01 2021-09-01 一种数据处理方法及装置

Publications (1)

Publication Number Publication Date
CN115729444A true CN115729444A (zh) 2023-03-03

Family

ID=85292206

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111022655.5A Pending CN115729444A (zh) 2021-09-01 2021-09-01 一种数据处理方法及装置

Country Status (4)

Country Link
US (1) US20240201890A1 (zh)
EP (1) EP4386536A1 (zh)
CN (1) CN115729444A (zh)
WO (1) WO2023030013A1 (zh)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5742843A (en) * 1994-07-20 1998-04-21 Fujitsu Limited Control system for access between processing elements in a parallel computer
US9547598B1 (en) * 2013-09-21 2017-01-17 Avego Technologies General Ip (Singapore) Pte. Ltd. Cache prefill of cache memory for rapid start up of computer servers in computer networks
JP6304406B2 (ja) * 2014-06-27 2018-04-04 日本電気株式会社 ストレージ装置、プログラム、情報処理方法
CN104571956A (zh) * 2014-12-29 2015-04-29 成都致云科技有限公司 一种数据写入方法及拆分装置
CN115061971A (zh) * 2015-12-08 2022-09-16 乌尔特拉塔有限责任公司 使用容错对象的存储器结构操作和一致性
US10732893B2 (en) * 2017-05-25 2020-08-04 Western Digital Technologies, Inc. Non-volatile memory over fabric controller with memory bypass
EP3644190B1 (en) * 2018-10-22 2021-06-23 Arm Ltd I/o coherent request node for data processing network with improved handling of write operations
CN112788079A (zh) * 2019-11-07 2021-05-11 华为技术有限公司 一种数据传输方法、网络设备、网络***及芯片
WO2021103036A1 (zh) * 2019-11-30 2021-06-03 华为技术有限公司 一种事务提交***、方法及相关设备
CN114817121A (zh) * 2021-01-22 2022-07-29 伊姆西Ip控股有限责任公司 用于处理数据的方法、电子设备和计算机程序产品

Also Published As

Publication number Publication date
US20240201890A1 (en) 2024-06-20
WO2023030013A1 (zh) 2023-03-09
EP4386536A1 (en) 2024-06-19

Similar Documents

Publication Publication Date Title
US8196110B2 (en) Method and apparatus for verifying a suspect return pointer in a stack
US8356149B2 (en) Memory migration
JP5973196B2 (ja) 1553バス動作の自己検査のためのシステムおよび方法
US20180268016A1 (en) Comparison of block based volumes with ongoing inputs and outputs
US9298592B2 (en) Testing a software interface for a streaming hardware device
JPH06242957A (ja) プログラム実行制御装置
CN109445861A (zh) ***启动方法、装置、计算机装置及存储介质
WO2019073394A1 (en) MEMORY ACCESS BROKER SYSTEM WITH APPLICATION-EARLY WRITTEN RECEIVING RECEIPT SUPPORT
WO2014088655A1 (en) Consistency of data in persistent memory
US20090271171A1 (en) Emulator device, and a method for testing a test target device
US10649950B2 (en) Disk access operation recovery techniques
CN116302659B (zh) Gpu显存错误处理方法及装置、电子设备和存储介质
CN115729444A (zh) 一种数据处理方法及装置
CN114780208B (zh) 验证多平台虚拟机备份有效性方法、***、装置及存储介质
CN107423029B (zh) 计算单元
US11231878B2 (en) Content modification control
CN111061591B (zh) 基于存储器完整性检查控制器实现数据完整性检查的***和方法
US20130055017A1 (en) Device and method for restoring information in a main storage unit
JP5635815B2 (ja) コンピュータシステム及びその制御方法
CN110647383A (zh) 一种基于docker容器的应用管理方法及计算设备
CN111013157A (zh) 游戏加载方法、装置、设备及存储介质
US20190163399A1 (en) Information processing system and information processing method
JP2626545B2 (ja) 耐故障コンピュータシステム
US6691181B2 (en) Programmatic time-gap defect detection apparatus and method
US20240211257A1 (en) Cache to Receive Firmware Generated Data During Firmware Update

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication