数据访问方法、装置和第一计算设备

文档序号:1904107 发布日期:2021-11-30 浏览:1次 >En<

阅读说明:本技术 数据访问方法、装置和第一计算设备 (Data access method and device and first computing equipment ) 是由 李涛 维克多·吉辛 于海鑫 于 2019-10-18 设计创作,主要内容包括:本申请公开了一种数据访问方法、装置和第一计算设备,属于计算机技术领域。该数据访问方法包括:第一计算设备接收第二计算设备发送的第二写操作命令,该第二写操作命令由第二计算设备对主机生成的第一写操作命令进行预处理后得到,该第一写操作命令用于向存储池中写入待写入数据;第一计算设备基于第二写操作命令,对待写入数据执行数据处理操作;第一计算设备将处理后的待写入数据写入存储池。本申请减小了主机的系统开销。(The application discloses a data access method, a data access device and first computing equipment, and belongs to the technical field of computers. The data access method comprises the following steps: the method comprises the steps that a first computing device receives a second write operation command sent by a second computing device, the second write operation command is obtained after the second computing device preprocesses a first write operation command generated by a host, and the first write operation command is used for writing data to be written into a storage pool; the first computing device executes data processing operation on the data to be written based on the second write operation command; and the first computing device writes the processed data to be written into the storage pool. The method and the device reduce the system overhead of the host.)

数据访问方法、装置和第一计算设备

技术领域

本申请涉及计算机技术领域,尤其涉及数据访问方法、装置和第一计算设备。

背景技术

随着云计算技术的快速发展,云服务的使用越来越普遍,通常,云服务提供商将云服务部署在主机上来为用户提供服务。对于云服务提供商来说,主机的系统开销与主机的利用率有关。其主要表现为:主机的系统开销占用主机的计算资源的比例越大,该主机能够用于提供云服务的计算资源就越少,则主机的利用率越低。因此,减小主机的系统开销是提高主机的利用率的有效措施。

发明内容

本申请提供了一种数据访问方法、装置和第一计算设备,可以减小主机的系统开销。

第一方面,提供了一种数据访问方法,该方法可应用于第一计算设备,第一计算设备连接至主机、第二计算设备以及存储池,该方法包括:接收第二计算设备发送的第二写操作命令,第二写操作命令由第二计算设备对主机生成的第一写操作命令进行预处理后得到,第一写操作命令用于向存储池中写入待写入数据;基于第二写操作命令,对待写入数据执行数据处理操作;将处理后的待写入数据写入存储池。

在本申请实施例提供的数据访问方法中,通过使用第一计算设备对需要写入存储池中的待写入数据执行数据处理操作,提高了对数据执行数据处理操作的速度,这样一来,一方面能够减小主机的系统开销,另一方面能够提高计算机系统的处理性能,降低I/O时延。并且,该第一计算设备具有硬件功能,可以使用该第一计算设备的硬件功能对待写入数据执行数据处理操作,能够保证对数据执行数据处理操作的速度。

其中,第一计算设备基于第二写操作命令,对待写入数据执行数据处理操作,可以包括:基于第二写操作命令,对待写入数据执行纠删码、数据一致性保护和加密中的一项或多项。

由于纠删码、数据一致性保护和加密等操作包含大量的计算工作,通过第一计算设备执行纠删码、数据一致性保护和加密中的一项或多项时,使得数据的I/O速度可以不受限于第二计算设备的主频率和指令集等因素影响,能够保证第一计算设备和第二计算设备所在存储计算机系统的处理性能。

在一种可实现方式中,处理后的待写入数据可以包括:待写入数据的校验数据,将处理后的待写入数据写入存储池,包括:将校验数据存储至第一计算设备的内存;将校验数据从第一计算设备的内存存储至存储池。

并且,处理后的待写入数据还包括:待写入数据。相应的,在基于第二写操作命令,对待写入数据执行数据处理操作之前,该方法还可以包括:将待写入数据从主机存储至第一计算设备的内存。此时,将处理后的待写入数据写入存储池,还包括:将待写入数据从第一计算设备的内存存储至存储池。

通过将待写入数据存储在主机的内存中,将校验数据存储在第一计算设备的内存中,可以避免在计算机系统中存储重复数据,能够有效利用计算机系统的内存空间。

或者,处理后的待写入数据还包括:待写入数据。此时,由于为将待写入数据从主机村处置第一计算设备的内存中,因此,将处理后的待写入数据写入存储池,还可以包括:将待写入数据从主机存储至存储池。

通过将待写入数据和校验数据均存储在第一计算设备的内存中,使得网卡可以从同一内存中读取待写入数据和校验数据,无需分别到第一计算设备的内存和主机的内存中读取数据,能够减少读取数据所耗费的时间,能够降低写时延。

可选的,第二计算设备和主机之间可以通过第一计算设备连接,此时,在接收第二计算设备发送的第二写操作命令之前,该方法还可以包括:获取主机生成的第一写操作命令;向第二计算设备发送第一写操作命令。

并且,当第一计算设备接收到包括第一写操作命令的多个写操作命令时,在向第二计算设备发送第一写操作命令之前,该方法还可以包括:按照指定策略对多个写操作命令进行排序。此时,向第二计算设备发送第一写操作命令的实现过程,可以包括:在依次向第二计算设备发送排序后的多个写操作命令的过程中,按照第一写操作命令在排序后的多个写操作命令中的顺序,向第二计算设备发送第一写操作命令。

对该多个写操作命令进行排序,并向第二计算设备发送排序后的多个写操作命令,使得第二计算设备能够优先处理具有较高优先级的写操作命令,以提高用户体验。

在一种实现方式中,第一计算设备可以通过网卡与存储池电连接,此时,在基于第二写操作命令,对待写入数据执行数据处理操作之后,该方法还可以包括:向第二计算设备发送第二写操作响应,第二写操作响应用于指示已完成数据处理操作;接收第二计算设备基于第二写操作响应发送的第三写操作命令,第三写操作命令用于指示网卡读取处理后的待写入数据,将处理后的待写入数据写入存储池;向网卡转发第三写操作命令。

可选的,在基于第二写操作命令,对待写入数据执行数据处理操作之后,该方法还可以包括:接收第二计算设备针对第一写操作命令发送的第一写操作响应,该第一写操作响应由第二计算设备根据存储池发送的写完成命令进行预处理后得到;在根据第一写操作响应确定完成第一写操作命令所请求的数据写入操作后,向主机发送第一写操作响应。

在读取数据的过程中,该第一计算设备还可以接收读取数据,读取数据为基于第二计算设备的第二读操作命令,从存储池中读取的数据,第二读操作命令由第二计算设备对主机生成的第一读操作命令进行预处理后得到,第一读操作命令用于从存储池中读取读取数据;向主机转发读取数据。

在本申请实施例提供的数据访问方法中,通过使用第一计算设备对从存储池中读取的数据执行数据处理操作,提高对数据执行数据处理操作的速度,这样一来,一方面能够减小主机的系统开销,另一方面能够提高计算机系统的处理性能,降低I/O时延。

可选的,在接收读取数据之前,该方法还可以包括:获取主机生成的第一读操作命令;向第二计算设备发送第一读操作命令。

可选的,当第一计算设备接收到包括第一读操作命令的多个读操作命令时,在向第二计算设备发送第一读操作命令之前,该方法还可以包括:按照指定策略对多个读操作命令进行排序。相应的,向第二计算设备发送第一读操作命令的实现过程,可以包括:在依次向第二计算设备发送排序后的多个读操作命令的过程中,按照第一读操作命令在排序后的多个读操作命令中的顺序,向第二计算设备发送第一读操作命令。

对该多个读操作命令进行排序,并向第二计算设备发送排序后的多个读操作命令,使得第二计算设备能够优先处理具有较高优先级的读操作命令,以提高用户体验。

并且,在向主机转发读取数据之后,该方法还可以包括:接收第二计算设备针对第一读操作命令发送的第一读操作响应,第一读操作响应基于读取数据得到;在根据第一读操作响应确定完成第一读操作命令所请求的数据读取操作后,向主机发送第一读操作响应。

第二方面,提供了一种数据访问装置,该数据访问装置可以部署在第一计算设备中,该装置包括:接收模块,用于接收第二计算设备发送的第二写操作命令,第二写操作命令由第二计算设备对主机生成的第一写操作命令进行预处理后得到,第一写操作命令用于向存储池中写入待写入数据;处理模块,用于基于第二写操作命令,对待写入数据执行数据处理操作;

写入模块,用于将处理后的待写入数据写入存储池。

可选的,处理模块,具体用于:基于第二写操作命令,对待写入数据执行纠删码、数据一致性保护和加密中的一项或多项。

可选的,处理后的待写入数据包括:待写入数据的校验数据,写入模块,具体用于:将校验数据存储至第一计算设备的内存;将校验数据从第一计算设备的内存存储至存储池。

可选的,处理后的待写入数据还包括:待写入数据,装置还包括:存储模块,用于将待写入数据从主机存储至第一计算设备的内存。相应的,写入模块,具体还用于:将待写入数据从第一计算设备的内存存储至存储池。

可选的,处理后的待写入数据还包括:待写入数据,写入模块,具体还用于:将待写入数据从主机存储至存储池。

可选的,该装置还包括:获取模块,用于获取主机生成的第一写操作命令;发送模块,用于向第二计算设备发送第一写操作命令。

可选的,当第一计算设备接收到包括第一写操作命令的多个写操作命令时,该装置还包括:排序模块,用于按照指定策略对多个写操作命令进行排序。此时,发送模块,具体用于:在依次向第二计算设备发送排序后的多个写操作命令的过程中,按照第一写操作命令在排序后的多个写操作命令中的顺序,向第二计算设备发送第一写操作命令。

可选的,第一计算设备可以通过网卡与存储池电连接,此时,发送模块,还用于向第二计算设备发送第二写操作响应,第二写操作响应用于指示已完成数据处理操作;接收模块,还用于接收第二计算设备基于第二写操作响应发送的第三写操作命令,第三写操作命令用于指示网卡读取处理后的待写入数据,将处理后的待写入数据写入存储池;发送模块,还用于向网卡转发第三写操作命令。

可选的,接收模块,用于接收第二计算设备针对第一写操作命令发送的第一写操作响应,该第一写操作响应由第二计算设备根据存储池发送的写完成命令进行预处理后得到。发送模块,还用于在根据第一写操作响应确定完成第一写操作命令所请求的数据写入操作后,向主机发送第一写操作响应。

可选的,接收模块,还用于接收读取数据,读取数据为基于第二计算设备的第二读操作命令,从存储池中读取的数据,第二读操作命令由第二计算设备对主机生成的第一读操作命令进行预处理后得到,第一读操作命令用于从存储池中读取读取数据;发送模块,还用于向主机转发读取数据。

可选的,该装置还包括:获取模块,用于获取主机生成的第一读操作命令;排序模块,用于当第一计算设备接收到包括第一读操作命令的多个读操作命令时,按照指定策略对多个读操作命令进行排序;发送模块,用于在依次向第二计算设备发送排序后的多个读操作命令的过程中,按照第一读操作命令在排序后的多个读操作命令中的顺序,向第二计算设备发送第一读操作命令。

可选的,接收模块,还用于接收第二计算设备针对第一读操作命令发送的第一读操作响应,第一读操作响应基于读取数据得到;发送模块,还用于在根据第一读操作响应确定完成第一读操作命令所请求的数据读取操作后,向主机发送第一读操作响应。

第三方面,提供了一种数据访问方法,应用于第二计算设备,第二计算设备连接至第一计算设备,还方法可以包括:获取主机生成的第一写操作命令,第一写操作命令用于向存储池中写入待写入数据;对第一写操作命令进行预处理,得到第二写操作命令,第二写操作命令用于指示第一计算设备对待写入数据执行数据处理操作;将第二写操作命令发送至第一计算设备。

可选的,该方法还包括:获取主机生成的第一读操作命令,第一读操作命令用于从存储池中读取所需的读取数据;对第一读操作命令进行预处理,得到第二读操作命令,第二读取操作命令用于从存储池中读取读取数据;将第二读操作命令发送至第一计算设备。

第四方面,提供了一种数据访问装置,该数据访问装置可以部署在第二计算设备中,第二计算设备连接至第一计算设备,该装置包括:获取模块,用于获取主机生成的第一写操作命令,第一写操作命令用于向存储池中写入待写入数据;处理模块,用于对第一写操作命令进行预处理,得到第二写操作命令,第二写操作命令用于指示第一计算设备对待写入数据执行数据处理操作;发送模块,用于将第二写操作命令发送至第一计算设备。

可选的,获取模块,还用于获取主机生成的第一读操作命令,第一读操作命令用于从存储池中读取所需的读取数据;处理模块,还用于对第一读操作命令进行预处理,得到第二读操作命令,第二读取操作命令用于从存储池中读取读取数据;发送模块,还用于将第二读操作命令发送至第一计算设备。

第五方面,提供了一种第一计算设备,该第一计算设备包括处理单元,第一计算设备通过处理单元执行第一方面的数据访问方法。

第六方面,提供了一种第一计算设备,该第一计算设备包括逻辑电路,第一计算设备通过逻辑电路执行第一方面的数据访问方法。

在一种可实现方式中,该第一计算设备为现场可编程门阵列FPGA或专用集成电路ASIC。

第七方面,提供了一种第二计算设备,第二计算设备包括处理单元,第二计算设备通过处理单元执行第三方面的数据访问方法。

在一种可实现方式中,第二计算设备为进阶精简指令集计算集机器ARM。

第八方面,提供了一种存储卸载系统,该存储卸载系统包括:第一计算设备和第二计算设备,第一计算设备用于执行第一方面的数据访问方法,第二计算设备用于执行第三方面的数据访问方法。

附图说明

图1为本申请实施例提供的一种数据访问方法所涉及的应用场景的结构示意图;

图2为本申请实施例提供的一种计算机系统的结构示意图;

图3为本申请实施例提供的另一种计算机系统的结构示意图;

图4为本申请实施例提供的一种包括存储卸载系统的计算机系统的结构示意图;

图5为本申请实施例提供的另一种包括存储卸载系统的计算机系统的结构示意图;

图6为本申请实施例提供的又一种包括存储卸载系统的计算机系统的结构示意图;

图7为本申请实施例提供的一种主机向存储池中写数据的方法流程图;

图8为本申请实施例提供的一种写操作子队列的示意图;

图9为本申请实施例提供的一种读取处理后的待写入数据的示意图;

图10为本申请实施例提供的另一种读取处理后的待写入数据的示意图;

图11为本申请实施例提供的写操作子队列对应的报文的示意图;

图12为本申请实施例提供的主机向存储池中读数据的流程图;

图13为本申请实施例提供的一种发送读取数据的示意图;

图14为本申请实施例提供的一种数据访问装置的结构示意图;

图15为本申请实施例提供的另一种数据访问装置的结构示意图;

图16为本申请实施例提供的又一种数据访问装置的结构示意图;

图17为本申请实施例提供的一种第一计算设备的结构示意图;

图18为本申请实施例提供的另一种第一计算设备的结构示意图;

图19为本申请实施例提供的一种第二计算设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

为了便于理解,下文首先对本申请实施例涉及的名词进行解释。

云计算(cloud computing):云计算是分布式计算的一种,指对大量计算资源和存储资源进行统一管理和调度,向用户提供按需服务的网络。该计算资源和存储资源均通过设置在数据中心的计算设备集群提供。并且,云计算可以为用户提供多种类型的服务类型,例如,可以提供基础设置即服务(infrastructure as a service,IaaS)、平台即服务(platform as a service,PaaS)和软件即服务(software as a service,SaaS)等。

虚拟化(virtualization)是一种资源管理技术,是将主机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破主机的实体结构间的不可切割的障碍,使用户可以采用比原本的组态更好的方式来应用这些资源。通过虚拟化使用的资源称为虚拟化资源,虚拟化资源不受现有资源的架设方式、地域或物理组态所限制。一般地,虚拟化资源包括计算资源和存储资源。

虚拟机(virtual machine,VM):指通过虚拟化技术模拟得到的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整的计算机系统。虚拟机的部分指令子集可以在主机中处理,其它部分指令可以以仿真的方式执行。用户可以通过租用虚拟机的形式购买云服务。

主机是指部署虚拟机的计算机,或者说物理机。

直接内存访问(direct memory access,DMA):也可以称为直接内存操作或者组数据传输方式,是指一种不经过计算机的中央处理器(central processing unit,CPU)而直接从计算机的内存存取数据的数据交互模式。在DMA模式下传输数据时,由计算机的CPU向DMA控制器下达指令,以指示DMA控制器控制数据的传输,DMA控制器在完成数据传输后向CPU反馈传输完成的信息。可以看出,在该DMA传输数据的过程中,无需计算机的CPU执行传输操作,可以省去计算机的CPU取指令、取数、送数等操作,减轻了计算机的CPU的资源占有率,能够节省系统资源。

DMA可以包括远程DMA(remote direct memory access,RDMA)和本地DMA。RDMA是指通过网络将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入的数据传输方式。本地DMA是指无需通过网络进行的数据传输方式。

外围组件互连快速(peripheral component interconnect express,PCIe)总线:一种高速串行计算机扩展总线标准。

超级通道互连(ultra path interconnect,UPI):一种扩展总线标准。

网卡:也可以称为网络接口控制器(network interface controller,NIC)、网络适配器、或者局域网接收器,是一种被设计为允许主机或计算设备在网络上进行通信的计算机硬件。

内存(memory):也可以称为内存储器或者主存储器,其作用是暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。

非易失性存储器标准(Non-Volatile Memory express,NVMe):是一个逻辑设备接口标准,基于设备逻辑接口的总线传输协议规范,访问通过总线附加的非易失性内存介质。

虚拟输入/输出(virtio input/output,virtio I/O)协议:可以简称为Virtio协议或者Virtio,是指一种半虚拟化的虚拟I/O接口框架,可以支持多种类型的I/O设备,相对于全虚拟化I/O,Virtio I/O协议具有良好的扩展性和兼容性,被广泛用在虚拟化场景中,成为一种事实标准。随着虚拟机的单机租户数目提升和对网络性能带宽诉求的逐渐强烈,承载Virtio I/O协议的主机开销越来越大,因此可以将Virtio I/O的后端负载卸载到网卡或其它硬件,以提升主机的效率。

纠删码(erasure code,EC):是一种编码容错技术,其基本原理是把传输的数据分为多个数据块,并根据不同的数据块生成校验数据块,通过校验数据块使多个数据块之间存在联系,使得在部分数据块失效时,能够通过有效的数据块和校验数据块还原出失效的数据块。通过执行EC操作对数据进行处理,能够保证数据的可靠性。

图1是本申请实施例提供的数据访问方法所涉及的应用场景的结构示意图。如图1所示,应用场景包括计算机系统101、存储池102以及客户端103。存储池102用于存储应用场景中产生的数据。其中,客户端103与计算机系统101之间通过网络连接,客户端103可以通过网络访问计算机系统101。计算机系统101与存储池102之间通过网络连接,计算机系统101可以通过网络与该存储池102进行数据交互。在一种可实现方式中,计算机系统101中可以配置有网卡,该计算机系统101可以通过网卡与存储池102进行通信。并且,客户端103可以通过网络向计算机系统101发送写数据指令,计算机系统101可以根据该写数据指令将数据写入存储池102中,或者,客户端103可以通过网络向计算机系统101发送读数据指令,计算机系统101可以根据该读数据指令从存储池102中读出数据。

可选地,图1中的计算机系统101可以是由若干台主机和/或计算设备组成的集群。计算机系统101中可以运行有虚拟机,客户端103可以通过访问计算机系统101使用该计算机系统101中运行的虚拟机。存储池102可以是包括若干个存储设备的存储设备集群。客户端103可以为包括若干个客户端的集群。

需要说明的是,图1所示的应用场景是本申请实施例提供的数据访问方法所涉及的应用场景的一种示例,并不用于限定本申请实施例提供的数据访问方法所涉及的应用场景,还应用场景还可以具有其它类型的架构或变形。

图2是本申请实施例提供的一种计算机系统200的结构示意图。该计算机系统200可以应用于图1所示的应用场景中的计算机系统101。如图2所示,该计算机系统200中包括主机21和网卡22。主机21和网卡22之间通过PCIe总线连接。网卡22通过网络与存储池102连接。相应的,主机21通过网卡22与存储池102连接,使得主机21与存储池102进行数据传输。可选的,主机21可以为英特尔公司的X86架构的处理器。

如图2所示,主机21包括虚拟机211和虚拟机监视器212。虚拟机211与虚拟机监视器212之间可以根据通信协议规范通信。在一种可实现方式中,虚拟机211中设置有NVMe/Virtio前端模块211a,NVMe/Virtio前端模块211a用于执行NVMe协议的前端部分和/或Virtio协议的前端部分。虚拟机监视器212中设置有NVMe/Virtio后端模块212a,NVMe/Virtio后端模块212a用于执行NVMe协议的后端部分和/或Virtio协议的后端部分。通过NVMe/Virtio前端模块211a与NVMe/Virtio后端模块212a配合,能够实现虚拟机211与虚拟机监视器212的通信。

如图2所示,虚拟机监视器212还包括:虚拟块系统处理(virtual block systemprocess,VBS process)模块212b和RDMA模块212c。其中,虚拟块系统处理模块212b用于对该虚拟机监视器212管理的数据进行分块处理。RDMA模块212c用于执行远程DMA数据传输。

在该计算机系统200中,由于主机21需要对I/O请求进行流量管理、对数据进行搬移、对数据执行纠删码(erasure code,EC)、数据一致性保护(data integrity field,DIF)、加密和解密等数据处理操作,导致主机21占用的系统开销较大。因此,云服务商需要购置更多的服务器,才能达到客户要求的计算资源容量,导致云服务的成本较高。

为了解决上述问题,可以在计算机系统中添加进阶精简指令集计算集机器(advanced reduced instruction set computer machine,ARM),通过ARM执行主机的部分数据处理操作,将该部分数据处理操作的执行功能卸载到ARM中,减少主机的系统开销,达到降低成本的目的。图3是本申请实施例提供的另一种计算机系统300的结构示意图。如图3所示,计算机系统300包括主机31、ARM 32和网卡33。主机31和ARM 32之间通过PCIe总线连接,ARM 32和网卡33之间通过PCIe总线连接。网卡33可以通过网络与存储池102连接。相应的,ARM 32可以通过网卡33与存储池102连接,使得ARM 32与存储池102可以进行数据传输。

如图3所示,主机31包括虚拟机311和虚拟机监视器312。虚拟机311中设置有NVMe/Virtio前端模块311a。ARM 32包括NVMe/Virtio后端模块321、虚拟块系统处理模块322和RDMA模块323。该ARM 32中各个部件的功能请相应参考图2所示的计算机系统200中的对应描述,此处不再赘述。

与图2所示的计算机系统200相比,图3所示的计算机系统300将主机31的数据处理操作的执行功能卸载到ARM 32中,即在该计算机系统300中由ARM 32执行数据的数据处理操作,能够在一定程度上减小主机31的系统开销。

但是,在计算机系统300中,数据的I/O速度受限于ARM 32的主频率和指令集等因素,导致该计算机系统300的处理性能受到限制。例如,计算机系统300需要16个ARM才能使计算机系统300每秒的输入输出量达到1兆。另外,数据处理操作涉及到的EC、DIF、加密和解密等操作,包含大量的计算工作,而ARM 32使用软件实现这些计算工作,存在I/O延时较大的问题。例如,最优延时只能做到150微秒(μs)左右。并且,由于通过ARM执行数据处理操作,其实质仍是通过软件实现,但由于线程和调度冲突等原因,导致该ARM执行数据处理操作的性能不稳定。由此可见,采用ARM 32卸载主机31的数据处理操作的执行功能,虽然能在一定程度上减小主机31的系统开销,但其处理性能仍不不理想。因此,亟需提出一种既能减小主机31的系统开销,又能保证处理性能的计算机系统。

为了解决上述问题,如图4所示,本申请实施例提供了一种包括存储卸载系统41的计算机系统400,该计算机系统400还包括主机42。该计算机系统400可以应用于图1中的应用场景中的计算机系统101。该存储卸载系统41包括第一计算设备411和第二计算设备412。该第一计算设备411与主机42电连接,该第一计算设备411与第二计算设备412电连接,且第一计算设备411与存储池102电连接。该第一计算设备411具有硬件功能,可以使用该第一计算设备411的硬件功能对需要写入存储池中的数据和/或从存储池中读取的数据执行数据处理操作,提高对数据执行数据处理操作的速度,这样一来,一方面能够减小主机42的系统开销,另一方面能够提高计算机系统400的处理性能,降低I/O时延。

其中,主机42与第一计算设备411之间通过总线连接,该总线可以为PCIe总线或UPI总线等。第二计算设备412与第一计算设备411之间通过总线连接,该总线可以为PCIe总线等。第一计算设备411与存储池102之间通过网络连接,此时,该第一计算设备411可以配置有网卡的功能。并且,存储池102可以是分布式存储系统,该分布式存储系统可以包括多个存储服务器。

在一种实现方式中,主机42可以为复杂指令集计算集(complex instruction setcomputer,CISC)处理器,第二计算设备412可以为精简指令集计算集(reducedinstruction set compute,RISC)处理器。例如,主机42可以是X86架构的处理器,第二计算设备412可以是ARM。该第一计算设备411可以包括:现场可编程门阵列(fieldprogrammable gate array,FPGA)或者专用集成电路(application specific integratedcircuit,ASIC)等通过硬件执行数据处理操作的器件。

其中,主机42、第一计算设备411及第二计算设备412之间可以有多种连接方式。在一种可实现的连接方式中,主机42与第一计算设备411电连接,第二计算设备412与第一计算设备411电连接,且第二计算设备412通过第一计算设备411与主机42连接。此时,该主机和第二计算设备之间可以通过第一计算设备实现通信。可知,图4为第二计算设备412通过第一计算设备411与主机42连接的连接示意图。

在另一种可实现的连接方式中,主机42与第一计算设备411电连接,第二计算设备412与第一计算设备411电连接,且第二计算设备412与主机42连接(如图5中虚线所示)。可选的,当第二计算设备412与主机42连接时,主机42和第二计算设备412之间也可以通过总线直接连接。此时,该主机42和第二计算设备412可以直接通信,或者,该主机42和第二计算设备412也可以通过第一计算设备411实现通信,即可以通过第一计算设备411转发需要在主机42和第二计算设备412之间传输的信息。

其中,主机42内部可以配置有内存,该内存用于存放主机42运行时所缓存的数据。或者,如图5所示,主机42可以与外部的第一内存43连接,该第一内存43用于存放主机42运行时所缓存的数据,此时,主机42与该外部的第一内存43之间可以通过双倍速率(doubledata rate,DDR)总线连接。

第一计算设备411内部可以配置有内存,用于存放第一计算设备411运行时所缓存的数据。或者,如图5所示,第一计算设备411也可以与外部的第二内存44连接,用于存放第一计算设备411运行时所缓存的数据,此时,第一计算设备411与该外部的第二内存44之间可以通过DDR总线连接。

其中,用于存放主机42运行时所缓存的数据的内存和用于存放第一计算设备411运行时所缓存的数据的内存均可以为双倍速率同步动态随机存取内存(double data ratesynchronous dynamic random access memory,DDR SDRAM)。

可选的,该第一计算设备411也可以不具有网卡的功能。此时,如图5所示,该计算机系统400还可以包括网卡45,第一计算设备411可以通过网卡45与存储池102电连接。其中,第一计算设备411与网卡45之间可以通过PCIe等总线连接。

并且,第二计算设备412与网卡45之间也可以通过总线连接(如图5中虚线所示)。当第二计算设备412与网卡45之间通过总线连接时,该第二计算设备412与网卡45可以直接通信,或者,该第二计算设备412与网卡45可以通过第一计算设备411实现通信,即可以通过第一计算设备411转发需要在网卡45和第二计算设备412之间传输的信息。当第二计算设备412与网卡45之间通过第一计算设备411连接时,该第二计算设备412与网卡45之间可以通过第一计算设备411实现通信。

在本申请实施例提供的存储卸载系统41中,第二计算设备412用于根据主机42生成的写操作命令和/或读操作命令等I/O命令进行预处理,以指示第一计算设备411执行相关操作。当计算机系统400包括网卡45时,该第二计算设备412还用于根据预处理后的I/O命令指示网卡45执行相关操作。也即是,该第二计算设备412主要用于根据预处理后的I/O命令,对计算机系统中的其他器件进行控制。例如,第二计算设备412可以根据主机42生成的I/O命令进行命令解析。或者,第二计算设备412可以根据I/O命令进行凑分条处理,并根据凑分条结果控制网卡45读取数据。或者,第二计算设备412可以根据主机42生成的I/O命令,生成指示第一计算设备对I/O命令涉及的数据执行数据处理操作的命令。其中,该数据处理操作可以包括:对数据执行EC、DIF、加密和解密等数据处理操作中的一项或多项。

并且,当主机42通过第一计算设备411向第二计算设备412传输I/O命令时,该第一计算设备411还可以对I/O命令进行流量管理,以指示根据I/O命令的优先级顺序按序对I/O命令进行处理。或者,该对I/O命令进行流量管理的操作也可以由第二计算设备412执行,本申请实施例对此不做具体限定。

由上可知,本申请实施例提供的第一计算设备,可以执行原本由主机42执行的数据处理操作和流量管理等操作,能够将主机42执行数据处理操作和流量管理等操作的功能卸载到该第一计算设备中,减小了主机的系统开销。并且,第一计算设备411可以用硬件实现该数据处理功能,相较于使用软件执行数据处理操作,能够有效提高处理速度,并减小软件实现对计算机系统的处理性能的影响。因此,通过本申请实施例提供的第一计算设备、包括该第一计算设备的存储卸载系统及包括该存储卸载系统的计算机系统,一方面能够减小主机的系统开销,另一方面能够提高计算机系统的处理性能,降低I/O时延。

图6是本申请实施例提供的又一种包括存储卸载系统41的计算机系统400的结构示意图。如图6所示,主机42中包括虚拟机421。该虚拟机421包括NVMe/Virtio前端模块421a,第一计算设备411包括:NVMe/Virtio后端模块411a、端节点(end point,EP)模块411b和数据处理模块411c。其中,NVMe/Virtio后端模块411a用于与NVMe/Virtio前端模块421a对接,实现主机42与第一计算设备411的通信。EP模块411b用于处理PCIe标准下的接口规范,实现第二计算设备412与第一计算设备411的通信。数据处理模块411c用于对待写入存储池中的数据执行数据处理操作。例如,数据处理模块411c用于对数据执行EC、DIF、加密和解密等数据处理操作中的一项或多项。

可选的,第一计算设备411中还可以包括以下一个或多个模块:虚拟机I/O处理模块(图6中未示出)、服务质量(quality of service,QoS)模块411d和DMA模块411e。其中,虚拟机I/O处理模块用于分析从主机42处接收的I/O命令。QoS模块411d用于实现对I/O命令进行流量管理。DMA模块411e用于通过DMA方式实现第一计算设备411与主机42之间、第一计算设备411和存储池102之间的数据传输。

该计算机系统400中的其他结构的功能请相应参考前述描述中的功能,此处不再赘述。

本申请实施例还提供了一种数据访问方法,该数据访问方法可应用于本申请实施例提供的计算机系统400。该数据访问方法涉及主机向存储池中写数据和主机从存储池中读取数据两个方面。下面分别对该两个方面进行说明。且对该两方面进行说明时,以主机和第二计算设备通过第一计算设备连接为例进行说明。

图7是本申请实施例提供的一种主机向存储池中写数据的方法流程图。该数据访问方法可应用于图4、图5或图6所示的计算机系统400。如图7所示,该方法可以包括以下步骤:

步骤501、第一计算设备获取主机生成的第一写操作命令。

其中,第一写操作命令用于向存储池中写入待写入数据。主机生成第一写操作命令后,第一计算设备可以获取该第一写操作命令。例如,当主机和第二计算设备通过第一计算设备连接时,在主机生成第一写操作命令后,可以向第一计算设备发送该第一写操作命令,以通过该第一计算设备将该第一写操作命令发送至第二计算设备。其中,在主机生成第一写操作命令后,该待写入数据可以暂时存储在主机的内存中。需要说明的是,该主机的内存可以指主机42内部配置的内存,也可以为主机42所连接的第一内存,本申请实施例对其不做具体区分。作为一种示例,步骤501可以由NVMe/Virtio后端模块执行。

可选的,在第一写操作命令的传输过程中,可以传输第一写操作命令本身,也可以采用标识的方式传输第一写操作命令。当采用标识的方式传输第一写操作命令时,第一计算设备获取第一写操作命令后,可以为第一写操作命令分配I/O命令标识,并在后续传输第一写操作命令的过程中传输该I/O命令标识。

相应的,该第一计算设备还可以根据第一写操作命令,生成用于记载该第一写操作命令的内容的控制信息块,以便于接收到第一写操作命令的I/O命令标识的接收端(例如第二计算设备),可以通过读取该第一写操作命令的控制信息块,获取该第一写操作命令的内容。其中,控制信息块中可以保存有第一写操作命令的描述信息,该描述信息用于指示第一写操作命令的内容。该第一写操作命令的内容可以包括第一写操作命令所涉及的待写入数据的存储地址和数据长度等信息。并且,控制信息块可以存储在第一计算设备的内存中。此处第一计算设备的内存可以指第一计算设备内部配置的内存,也可以为第一计算设备所连接的第二内存,本申请实施例对其不做具体区分。

通过第一计算设备为第一写操作命令分配I/O命令标识,并在计算机系统中传输该I/O命令标识,使得无需直接传输第一写操作命令本身,能够减少传输的数据量,简化命令的传输过程,保证了计算机系统的处理性能。

需要说明的是,在第一计算设备接收到第一写操作命令后,若第一计算设备为第一写操作命令分配了I/O命令标识,则在后续第一写操作命令的传输过程中均使用第一写操作命令的I/O命令标识进行传输,若第一计算设备未向第一写操作命令分配I/O命令标识,则在后续第一写操作命令的传输过程中使用第一写操作命令进行传输。在下文描述中,对该两种传输方式不进行区分。

步骤502、第一计算设备对第一写操作命令进行流量管理。

第一计算设备获取主机生成的第一写操作命令的过程中,若该第一计算设备同时获取了包括该第一写操作命令的多个写操作命令,第一计算设备可以先对该多个写操作命令进行预处理,并将经过预处理的多个写操作命令发送至第二计算设备。例如,第一计算设备可以按照指定策略对多个写操作命令进行排序,以在依次向第二计算设备发送排序后的多个写操作命令的过程中,按照第一写操作命令在排序后的多个写操作命令中的顺序,向第二计算设备发送第一写操作命令。作为一种示例,该步骤502可以由QOS模块执行。

其中,该指定策略可以根据应用需求确定。例如,该指定策略可以为服务质量管理策略。此时,第一计算设备可以根据多个写操作命令的服务指令优先级,对该多个写操作命令进行排序,以便于按照排序顺序依次向第二计算设备发送排序后的多个写操作命令,使得第二计算设备优先处理具有较高优先级的写操作命令,以提高用户体验。

需要说明的是,该步骤502为可选步骤,在执行本申请实施例提供的数据访问方法时,可以根据应用需求确定是否执行该步骤502。在不执行该步骤502时,第一计算设备在接收到第一写操作命令后,可直接将该第一写操作命令发送至第二计算设备。并且,对第一写操作命令进行流量管理的操作也可以由第二计算设备执行,例如,在第二计算设备获取到包括第一写操作命令的多个写操作命令后,可以对该多个写操作命令进行流量管理。

步骤503、第一计算设备向第二计算设备发送经过流量管理后的第一写操作命令。

在第一计算设备获取到第一写操作命令后,可以向第二计算设备发送该第一写操作命令,以便于第二计算设备根据该第一写操作命令向第一计算设备发送控制命令,例如,向第一计算设备发送指示该第一计算设备执行数据处理操作的第二写操作命令。并且,在第一计算设备获取到包括第一写操作命令的多个写操作命令后,若第一计算设备按照指定策略对多个写操作命令进行了排序,则第一计算设备可以在依次向第二计算设备发送排序后的多个写操作命令的过程中,按照第一写操作命令在排序后的多个写操作命令中的顺序,向第二计算设备发送第一写操作命令。作为一种示例,该步骤503可以由QOS模块执行。

步骤504、第二计算设备基于第一写操作命令,向第一计算设备发送第二写操作命令。

第二计算设备接收到第一写操作命令后,可以根据该第一写操作命令生成第二写操作命令,并将第二写操作命令发送至第一计算设备。其中,第二写操作命令用于指示第一计算设备对待写入数据执行数据处理操作。此时,第二计算设备对第一写操作命令进行预处理是指根据该第一写操作命令生成第二写操作命令。该对待写入数据执行数据处理操作可以包括:对待写入数据执行纠删码、数据一致性保护、加密和解密中的一项或多项。

可选地,第二写操作命令中可以携带有待写入数据在主机的内存中的地址信息,以指示第一计算设备在该地址信息所指示的地址中读取待写入数据,并对该待写入数据执行数据处理操作。示例的,待写入数据在主机的内存中的地址信息可包括待写入数据在主机的内存中的起始地址和数据长度。

并且,第二写操作命令还可以携带有用于存储经过数据处理操作后的待写入数据(下文简称为处理后的待写入数据)的地址信息,以指示第一计算设备对待写入数据执行数据处理操作后,将处理后的待写入数据存储在该地址信息所指示的地址中。示例的,用于处理后的待写入数据的地址信息可以包括起始地址和数据长度。

需要说明的是,在本申请实施例中,存储池可以为分布式存储系统,该分布式存储系统可以包括多个存储服务器,可以将待写入数据分别存储在多个存储服务器中。因此,第二计算设备在生成第二写操作命令前,该第二计算设备还可以将写操作命令分解为多个写操作子命令,并依次将该多个写操作子命令分别写入多个写操作子队列中,以分别在每个写操作子队列中对写操作子命令执行凑分条处理,得到与该多个写操作子队列对应的多个写操作条带,并根据该多个写操作条带中的写操作子命令生成第二写操作命令。其中,每个写操作子队列与一个写操作目的地对应,该写操作目的地为用于存储该写操作子队列中写操作子命令所涉及的数据的存储服务器。

其中,同一写操作子队列中指定数量个写操作子命令的集合称为一个写操作条带,一个写操作条带内的写操作子命令可以来自不同的写操作命令。凑分条是指根据写操作子命令凑写操作条带。通过凑分条处理,使得一个写操作条带包括的指定数量个写操作子命令涉及的数据,可以通过一条写入命令写入同一写操作目的地,能够提高写数据的效率。

示例的,假设指定数量的取值为32,如图8所示,每个写操作子队列对应一个写操作目的地,每个写操作子队列中32个写操作子命令的集合称为一个写操作条带,在每凑齐32个写操作子命令后,可以使用一条写入命令将该32个写操作子命令涉及的数据写入同一写操作目的地。

并且,由于在凑分条过程中,是依次将多个写操作子命令分别写入多个写操作子队列的,因此,根据多个写操作条带中的写操作子命令生成第二写操作命令的实现方式可以包括:当多个写操作子队列中每个写操作子队列均被写入第i个写操作子命令(即写操作子命令i)时,根据该多个写操作子队列中每个写操作子队列中的第i个写操作子命令,生成一条第二写操作命令。并且,根据第一写操作命令生成的校验数据的信息也可以保存在校验子队列中,该校验数据的信息用于指示生成的校验数据的地址信息等。其中,i指写操作子命令在对应写操作子队列中的顺序。

示例的,如图8所示,当写操作子队列N0、写操作子队列N1和写操作子队列N2的第三行中均被写入属于自身队列的第i个写操作子命令时,可以根据写操作子队列N0的第i个写操作子命令、写操作子队列N1的第i个写操作子命令,及写操作子队列N2的第i个写操作子命令,生成第二写操作命令2。相应的,当根据第二写操作命令2生成两份校验数据时,可以将该两份校验数据的信息保存在校验子队列M0和校验子队列M1中。例如,假设第二计算设备生成的第二写操作命令用于指示第一计算设备对写操作子命令涉及的待写入数据执行EC算法,且该EC算法用于根据N(如N=3)个数据块生成M(如M=2)个校验数据块。在执行第二写操作命令指令2后,会生成两个校验数据块,则可将该两个校验数据块的信息分别保存在校验子队列M0和校验子队列M1中。

步骤505、第一计算设备基于第二写操作命令,对待写入数据执行数据处理操作,并对处理后的待写入数据进行存储。

其中,第一计算设备基于第二写操作命令对待写入数据执行数据处理操作,包括:第一计算设备基于第二写操作命令对待写入数据执行纠删码、数据一致性保护、加密和解密等操作中的一项或多项。作为一种示例,该步骤505可以由数据处理模块执行。

当对待写入数据执行纠删码操作时,处理后的待写入数据可以包括:待写入数据和该待写入数据的校验数据。例如,处理后的待写入数据包括待写入数据的数据块和校验数据块。当对待写入数据执行数据一致性保护操作时,处理后的待写入数据可以包括:待写入数据和数据一致性保护数据(也称校验数据)。例如,数据一致性保护操作为对数据执行哈希算法时,该处理后的待写入数据包括待写入数据的数据块和根据待写入数据计算得到的哈希值。当对待写入数据执行加密操作时,处理后的待写入数据可以包括:对待写入数据加密后的数据。

可选的,按照不同的数据存储方式,第一计算设备基于第二写操作命令,对待写入数据执行数据处理操作的实现方式至少可以包括以下两种:

在步骤505的第一种可实现方式中,如图9中虚线箭头所示,第一计算设备可以基于第二写操作命令,从主机的内存中读取待写入数据,并对从主机的内存中读取的待写入数据执行数据处理操作,并将处理后的待写入数据中除待写入数据外的数据存储在该第一计算设备的内存中。其中,该图9为第一计算设备与第二内存连接时,存储处理后的待写入数据的一种示意图。

例如,当处理后的待写入数据包括待写入数据和该待写入数据的校验数据时,可以将该校验数据存储在第一计算设备的内存中,且待写入数据仍存储在主机的内存中。或者,当处理后的待写入数据包括待写入数据的校验数据时,可以将该校验数据存储在第一计算设备的内存中。

在步骤505的第二种可实现方式中,如图10中虚线箭头所示,第一计算设备可以基于第二写操作命令,从主机的内存中读取待写入数据,第一计算设备将从主机的内存中读取的待写入数据,存储在第一计算设备的内存中,并对存储在第一计算设备的内存中的待写入数据执行数据处理操作,得到处理后的待写入数据,并将处理后的待写入数据存储在该第一计算设备的内存中。其中,该图10为第一计算设备与第二内存连接时,存储处理后的待写入数据的另一种示意图。

例如,当处理后的待写入数据包括待写入数据和该待写入数据的校验数据时,在执行数据处理操作后,可以将校验数据存储在第一计算设备的内存中,且由于预先将待写入数据存储在第一计算设备的内存中,因此,第一计算设备的内存中既保存有待写入数据,又保存有校验数据。或者,当处理后的待写入数据包括待写入数据的校验数据时,可以将该校验数据存储在第一计算设备的内存中。

其中,在第一计算设备从主机的内存中读取数据的方式可以采用DMA方式。并且,在本申请实施例中,所有读取数据的方式均可以为采用DMA方式,后续涉及读取数据的步骤中均不再赘述。

需要说明的是,当第一计算设备内部配置有内存时,第一计算设备可以将需要存储的数据存储在该第一计算设备内部配置的内存中,当第一计算设备与外部的第二内存连接时,该第一计算设备可以将需要存储的数据存储在该第二内存中。为便于描述,下文中不对该第一计算设备内部配置的内存和该第二内存进行区分,均称为第一计算设备的内存。

并且,第一计算设备完成第二写操作命令所指示的数据处理操作后,第一计算设备可以向第二计算设备发送第二写操作响应,以告知第二计算设备该第一计算设备已完成数据处理操作。

步骤506、第二计算设备向网卡发送第三写操作命令,第三写操作命令用于指示网卡读取处理后的待写入数据,并将处理后的待写入数据写入存储池中。

在第二计算设备确定第一计算设备完成数据处理操作后,可以发送指示读取处理后的待写入数据,并将处理后的待写入数据写入存储池中的指令。例如,当第一计算设备通过网卡与存储池连接时,该第二计算设备可以向网卡发送第三写操作命令,以指示网卡读取处理后的待写入数据,并将处理后的待写入数据写入存储池中。

并且,在步骤504中,若第二计算设备对写操作子命令执行了凑分条处理,则该步骤506的执行条件为:第二计算设备在凑够一个或多个写操作条带后,基于每个写操作条带中的写操作子命令生成一条第三写操作命令,以指示网卡将写操作条带中写操作子命令涉及的处理后的待写入数据写入一个写操作目的地。

在该写操作条带对应的第三写操作命令中,可以携带有该写操作条带中写操作子命令涉及的处理后的待写入数据的消息头和数据相关信息。该该消息头可以包括携带有处理后的待写入数据的网络报文头格式的关键域段。比如,关键域段可以包括整个净荷长度和网络报文的目标地址等信息。数据相关信息可以包括处理后的待写入数据中各个数据块的地址信息等描述信息,以指示网卡在在数据相关信息的指示下读取对应的数据。该存储位置可以包括数据块存储位置的起始地址和数据长度。

需要说明的是,当第二计算设备与网卡通过总线连接时,第二计算设备可以通过总线直接向网卡发送第三写操作命令,当第二计算设备与网卡通过第一计算设备连接时,该第二计算设备可以现将该第一写入指令发送至第一计算设备,然后通过第一计算设备将该第一写入指令发送至网卡。

步骤507、网卡基于第三写操作命令,读取处理后的待写入数据。

对待写入数据执行不同的数据处理操作后,生成的处理后的待写入数据包括的数据种类不同。例如,处理后的待写入数据可以包括:校验数据,此时,网卡可以根据第三写操作命令的指示,在用于存储该处理后的待写入数据的内存中读取该处理后的待写入数据(此时也称为校验数据)。

或者,处理后的待写入数据可以包括:待写入数据和校验数据,此时,需要分别读取待写入数据和检验数据。对应与步骤505的两种可实现方式,该分别读取待写入数据和检验数据的实现方式也可以以下两种:

对应步骤505的第一种可实现方式,当处理后的待写入数据包括:待写入数据和校验数据时,由于待写入数据存储在主机的内存中,校验数据存储在第一计算设备的内存中,此时,如图9所示,网卡可以根据第三写操作命令的指示,从主机的内存中读取待写入数据,从第一计算设备的内存中读取校验数据,或者,当处理后的待写入数据包括待写入数据的校验数据时,可以从第一计算设备的内存中读取校验数据。

由此可知,通过将待写入数据存储在主机的内存中,将校验数据存储在第一计算设备的内存中,可以避免在计算机系统中存储重复数据,能够有效利用计算机系统的内存空间。

对应步骤505的第二种可实现方式,当处理后的待写入数据包括:待写入数据和校验数据时,由于待写入数据和校验数据均存储在第一计算设备的内存中。此时,如图10所示,网卡可以根据第三写操作命令的指示,在第一计算设备的内存读取待写入数据和校验数据。或者,当处理后的待写入数据包括待写入数据的校验数据时,可以从第一计算设备的内存中读取校验数据。

由此可知,通过将待写入数据和校验数据均存储在第一计算设备的内存中,使得网卡可以从同一内存中读取待写入数据和校验数据,无需分别到第一计算设备的内存和主机的内存中读取数据,能够减少读取数据所耗费的时间,能够降低写时延。

步骤508、网卡将处理后的待写入数据写入存储池中。

网卡在读取处理后的待写入数据后,可以根据第三写操作命令中携带的处理后的待写入数据的消息头和数据相关信息,根据处理后的待写入数据组建报文,并将报文发送至存储池。示例的,网卡可以根据第三写操作命令中携带的处理后的待写入数据的消息头构建报文的报文头,并根据第三写操作命令中携带的处理后的待写入数据的数据相关信息,使用数据相关信息指示的数据块填充报文净荷,以得到报文。

例如,在图11中,图8中各个写操作子队列对应的报文分别为报文MSG 0、报文MSG1、报文MSG 2、报文MSG 3和报文MSG 4。其对应关系如下:

报文MSG 0中的数据块为写操作子队列N0中写操作子命令涉及的数据块,报文头0为根据写操作子队列N0对应的第三写操作命令中携带的消息头构建报文的报文头。

报文MSG 1中的数据块为写操作子队列N1中写操作子命令涉及的数据块,报文头0为根据写操作子队列N1对应的第三写操作命令中携带的消息头构建报文的报文头。

报文MSG 2中的数据块为写操作子队列N2中写操作子命令涉及的数据块,报文头2为根据写操作子队列N2对应的第三写操作命令中携带的消息头构建报文的报文头。

报文MSG 3中的数据块为校验子队列M0中校验数据的信息所指示的校验数据块,报文头3为校验子队列M0对应的第三写操作命令中携带的消息头构建报文的报文头。

报文MSG 4中的数据块为校验子队列M1中校验数据的信息所指示的校验数据块,报文头0为根据校验子队列M1对应的第三写操作命令中携带的消息头构建报文的报文头。

步骤509、网卡接收存储池发送的写完成命令。

步骤510、网卡向第二计算设备发送写完成命令。

网卡在接收到存储池发送的写完成命令后,可以向第二计算设备发送该写完成命令,以指示已经完成了第一写操作命令所请求的写操作。并且,由于网卡通常是将处理后的待写入数据携带在多个数据包中发送至存储池的,此时,存储池可以在每收到一个数据包即向网卡发送一条写完成命令,相应的,网卡可以每收到一条写完成命令即向第二计算设备发送该写完成命令。

并且,第二计算设备向网卡发送的第三写操作命令中可以携带有指示存储写完成命令的位置,在网卡接收到写完成命令后,可以将写完成命令存储在该位置中,以便于第二计算设备从该位置中读取该写完成命令。

需要说明的是,当第二计算设备与网卡通过总线连接时,网卡可以通过总线直接向第二计算设备发送写完成命令,当第二计算设备与网卡通过第一计算设备连接时,该网卡可以将该写完成命令发送至第一计算设备,然后通过第一计算设备将该写完成命令发送至第二计算设备。

还需要说明的是,上述步骤506至步骤510是以第一计算设备不具有网卡的功能为例,对第二计算设备向网卡发送指示读取处理后的待写入数据的指令,网卡根据该读取数据的指令读取处理后的待写入数据,并写入存储池中,及网卡接收存储池发送写完成命令,并将写完成命令发送至第二计算设备的过程进行说明的。当第一计算设备配置有网卡的功能时,该过程的实现流程为:第二计算设备向第一计算设备发送指示读取处理后的待写入数据的指令,第一计算设备根据该读取数据的指令读取处理后的待写入数据,并写入存储池中,及第一计算设备接收存储池发送写完成命令,并将写完成命令发送至第二计算设备。

步骤511、第二计算设备在根据写完成命令确定完成写操作命令所请求的数据写入操作后,向第一计算设备发送第一写操作响应。

第二计算设备在接收到网卡发送的写完成命令后,会解析写完成命令,以确定写完成命令的内容,并在确定写完成命令用于指示完成了第一写操作命令所请求的数据写入操作后,向第一计算设备发送该第一写操作响应。

并且,若网卡在每收到一条写完成命令即向第二计算设备发送该写完成命令,该第二计算设备可以根据接收到的一条写完成命令的总条数,判断是否完成了第一写操作命令所请求的数据写入操作,并在接收到的写完成命令的总条数等于期望接收到的写完成命令的总条数时,确定完成了第一写操作命令所请求的数据写入操作。其中,数据包中携带的数据量可以是预先设定的,在写数据的过程中,第二计算设备可以根据每个数据包携带的数据量和待写入数据的大小,确定期望接收到的写完成命令的总条数。

步骤512、第一计算设备在根据第一写操作响应确定完成写操作命令所请求的数据写入操作后,向主机发送第一写操作响应。

第一计算设备在接收到第二计算设备发送的第一写操作响应后,会解析该第一写操作响应,以确定该第一写操作响应的内容,并在确定该第一写操作响应用于指示完成了第一写操作命令所请求的数据写入操作后,向主机发送该第一写操作响应。作为一种示例,步骤512可以由NVMe/Virtio后端模块执行。

在一种可实现方式中,上述步骤501至步骤512可以通过队列实现。下面对通过队列实现上述步骤501至步骤512的实现过程进行说明。

在主机生成第一写操作命令后,主机可以按照NVMe格式将第一写操作命令填充到写操作命令队列中。

在上述步骤501中,第一计算设备可以从该写操作命令队列中获取第一写操作命令。

并且,第一计算设备从写操作命令队列中获取第一写操作命令后,可以根据第一写操作命令的信息生成控制信息块,并向第一写操作命令分配I/O命令标识。

在上述步骤502中,当第一计算设备获取了包括该第一写操作命令的多个写操作命令时,该第一计算设备可以将该多个写操作命令先写入逻辑卷队列,然后按照进行流量管理的指定策略,依次从该逻辑卷队列中读取该多个写操作命令。

其中,主机中运行有多个虚拟机,该多个虚拟机与多个逻辑卷队列(volumequeue)对应,每个逻辑卷队列用于存储对应虚拟机生成的写操作命令。不同虚拟机生成的写操作命令中可以携带有与其对应的逻辑卷队列的标识,第一计算设备接收到写操作命令时,可以根据该写操作命令携带的逻辑卷队列的标识,将该写操作命令写入对应的逻辑卷队列。

在上述步骤503中,第一计算设备可以按照从逻辑卷队列中读取多个写操作命令顺序,将该多个写操作命令依次写入指定数量个子队列中。

其中,由于每个写操作命令通常由多个数据包组成,第一计算设备读取写操作命令的实现过程可以是:读取数据包,解析读取的数据包,并根据解析内容重建写操作命令。并且,由于第一计算设备需要向第二计算设备发送经过流量管理后的写操作命令,且第二计算设备中可能配置有多个处理器,每个处理器用于根据一个子队列中的写操作命令进行预处理,因此,第一计算设备将读出的多个写操作命令按序写入子队列的过程可以包括:第一计算设备将读出的多个写操作命令按序分别写入多个处理器对应的多个子队列中。

在上述步骤504中,第二计算设备可以从子队列中读取写操作命令,根据写操作命令生成第二写操作命令,然后将生成的第二写操作命令写入第二写操作命令队列中。

并且,若第二计算设备需要对写操作子命令执行凑分条处理时,第二计算设备还可以分别对从每个子队列中读取的写操作命令进行命令分解,然后根据分解后的写操作子命令进行凑分条处理,然后根据凑分条结果生成第二写操作命令。

在上述步骤505中,第一计算设备在从第二写操作命令队列中读取第二写操作命令后,即可基于第二写操作命令,对待写入数据执行数据处理操作,得到处理后的待写入数据并存储。

并且,在第一计算设备完成第二写操作命令后,可以将第二写操作响应写入第一写操作响应队列中,以供第二计算设备从该第一写操作响应队列中读取第二写操作响应,使得第二计算设备根据该第二写操作响应确定第一计算设备完成了数据处理操作。

在上述步骤506中,第二计算设备可以将第三写操作命令写入第三写操作命令队列,使得网卡从第三写操作命令队列中获取第三写操作命令。

在上述步骤507中,网卡从第三写操作命令队列中获取第三写操作命令后,可以根据第三写操作命令读取处理后的待写入数据。

在上述步骤510中,网卡可以将写完成命令写入写完成命令队列,以向第二计算设备发送第一写操作响应。

在上述步骤511中,第二计算设备从写完成命令队列中获取写完成命令后,可以根据写完成命令确定是否完成了第一写操作命令所请求的数据写入操作,并在确定完成第一写操作命令所请求的数据写入操作后,生成第一写操作响应,并将该第一写操作响应写入第一写操作响应队列。

在上述步骤512中,第一计算设备从第一写操作响应队列列中获取第一写操作响应后,可以根据第一写操作响应确定是否完成了第一写操作命令所请求的数据写入操作,并在确定完成第一写操作命令所请求的数据写入操作后,将该第一写操作响应写入写操作完成队列,以便于主机从该写操作完成队列中读取该第一写操作响应。

需要说明的是,在通过队列实现上述步骤时,接收方(即在上述步骤中从队列中读取命令或响应的一方)可以工作在查询模式或中断模式下。查询模式是指:接收方主动查询队列中是否有待读取的命令或响应,并在查询到有待读取的命令或响应时,从队列中读取该待读取的命令或响应。中断模式是指:当发送方(即在上述步骤中将命令或响应写入队列中的一方)将命令或响应写入队列后,向接收方发送中断信号,在接收方接收到中断信号后,查询队列中是否有待读取的命令或响应,并在查询到有待读取的命令或响应时,从队列中读取该待读取的命令或响应。

在本申请实施例提供的数据访问方法中,通过使用第一计算设备对需要写入存储池中的数据执行数据处理操作,提高对数据执行数据处理操作的速度,这样一来,一方面能够减小主机的系统开销,另一方面能够提高计算机系统的处理性能,降低I/O时延。

图12是本申请实施例提供的一种数据访问方法的流程图。该数据访问方法涉及主机从储池中读数据的过程。该数据访问方法可应用于图4、图5或图6所示的计算机系统400。如图12所示,该方法可以包括以下步骤:

步骤601、第一计算设备获取主机生成的第一读操作命令。

其中,第一读操作命令为用于从存储池中读取数据。该步骤601的实现过程请相应参考步骤501的实现过程。作为一种示例,步骤501可以由NVMe/Virtio后端模块执行。

步骤602、第一计算设备对第一读操作命令进行流量管理。

该步骤602的实现过程请相应参考步骤502的实现过程。例如,第一计算设备可以按照指定策略对多个读操作命令进行排序。该步骤602可以由QOS模块执行。

需要说明的是,该步骤602为可选步骤,在执行本申请实施例提供的数据访问方法时,可以根据应用需求确定是否执行该步骤602。在不执行该步骤602时,第一计算设备在接收到第一读操作命令后,可直接将该第一读操作命令发送至第二计算设备。并且,对第一读操作命令进行流量管理的操作也可以由第二计算设备执行,例如,在第二计算设备获取到包括第一读操作命令的多个读操作命令后,可以对该多个读操作命令进行流量管理。

步骤603、第一计算设备向第二计算设备发送经过流量管理后的第一读操作命令。

该步骤603的实现过程请相应参考步骤503的实现过程。并且,若第一计算设备按照指定策略对多个读操作命令进行了排序,该步骤603的实现过程包括:第一计算设备在依次向第二计算设备发送排序后的多个读操作命令的过程中,按照第一读操作命令在排序后的多个读操作命令中的顺序,向第二计算设备发送第一读操作命令。作为一种示例,该步骤603可以由QOS模块执行。

步骤604、第二计算设备基于第一读操作命令,向网卡发送第二读操作命令,第二读操作命令用于指示网卡从存储池中读取数据。

在第二计算设备接收到第一读操作命令后,可以发送指示从存储池中读取第一读操作命令所请求的读取数据的指令。例如,当第一计算设备通过网卡与存储池连接时,该第二计算设备可以向网卡发送第二读操作命令,以指示网卡从存储池中读取第一读操作命令所请求的读取数据。其中,该第二读操作命令中携带有所请求的读取数据的标识,该标识用于指示需要读取的数据。并且,该第二读操作命令可以携带有用于存储读取数据的地址信息,以便于网卡将读取数据存储在该地址信息所指示的地址中。

并且,第二计算设备也可以将第二读操作命令分解为多个读操作子命令,并将该多个读操作子命令分别写入多个读操作子队列中,以分别在每个读操作子队列中对读操作子命令执行凑分条处理,相应的,该步骤604的执行条件为:第二计算设备在凑够一个或多个读操作条带后,基于每个读操作条带中的读操作子命令生成一条第二读操作命令,以指示网卡根据读操作条带中的读操作子命令从存储池中读取数据。其中,每个读操作条带与一个读操作目的地对应,供读操作子命令读取数据的存储服务器均可以称为读操作子命令的读操作目的地。该对读操作子命令执行凑分条处理的实现过程,请相应参考对写操作子命令执行凑分条处理的实现过程。

需要说明的是,当第二计算设备与网卡通过总线连接时,第二计算设备可以通过总线直接向网卡发送第二读操作命令,当第二计算设备与网卡通过第一计算设备连接时,该第二计算设备可以将该第二读操作命令发送至第一计算设备,然后通过第一计算设备将该第二读操作命令发送至网卡。

步骤605、网卡将第二读操作命令发送至存储池。

网卡在接收到第二读操作命令后,可以将该第二读操作命令发送至存储池,以请求从存储池中读取该第二读操作命令所请求的读取数据。

步骤606、存储池根据第二读操作命令向网卡发送第二读操作命令所请求的读取数据。

存储池在接收第二读操作命令后,可以根据该第二读操作命令中携带的所请求的读取数据的标识,从存储有该读取数据的存储位置中读取该读取数据,并将该读取数据发送至网卡。

步骤607、网卡将读取数据发送至第一计算设备,以通过第一计算设备将该读取数据写入主机中。

网卡在接收到该读取数据后,可以将该读取数据发送至第一计算设备,并指示第一计算设备将该读取数据发送至主机。

步骤608、第一计算设备在确定需要将读取数据发送至主机时,将该读取数据发送至主机。

示例的,如图13中虚线箭头所示,网卡接收到存储池发送的读取数据后,可以将该读取数据发送至第一计算设备,第一计算设备在确定需要将该读取数据发送至主机时,第一计算设备即向主机转发该读取数据。根据该读取数据的过程可以看出,在该读取数据的过程中,读取数据在第一计算设备中实现了数据透传。作为一种示例,步骤608可以由NVMe/Virtio后端模块执行。

需要说明的是,根据读操作指令读取数据的过程中,若需要对读取数据执行数据处理操作,第一计算设备也可以对读取数据进行对应的数据处理操作。例如,若存储池发送的读取数据是经过加密的读取数据,第一计算设备在接收到该经过加密的读取数据后,还可以对该经过加密的读取数据进行解密,并将解密后的数据发送至主机。这样可以将对读取数据的数据处理操作也卸载至该第一计算设备中,进一步减小了主机的系统开销。

步骤609、网卡向第二计算设备发送第一读操作响应。

网卡在接收到存储池发送的读取数据后,可以向第二计算设备发送第一读操作响应,以通知第二计算设备已经获取到了读取数据。

并且,第二计算设备向网卡发送的第二读操作命令中可以携带有指示存储第一读操作响应的位置,在网卡接收到第一读操作响应后,可以将第一读操作响应存储在该位置中,以便于第二计算设备从该位置中读取该第一读操作响应。

同时,由于存储池通常是将读取数据携带在多个数据包中发送至网卡的,此时,网卡可以在每收到一个数据包即向第二计算设备发送一条读操作子响应。

需要说明的是,当第二计算设备与网卡通过总线连接时,网卡可以通过总线直接向第二计算设备发送第一读操作响应,当第二计算设备与网卡通过第一计算设备连接时,该网卡可以将该第一读操作响应发送至第一计算设备,然后通过第一计算设备将该第一读操作响应发送至第二计算设备。

还需要说明的是,上述步骤604至步骤606是以第一计算设备不具有网卡的功能为例,对第二计算设备向网卡发送第二读操作命令,网卡根据该第二读操作命令根据该第二读操作命令从存储池中读取数据的过程进行说明的。当第一计算设备配置有网卡的功能时,该过程的实现流程为:第二计算设备向第一计算设备发送第二读操作命令,第一计算设备根据该第二读操作命令从存储池中读取数据。

步骤610、第二计算设备在根据第一读操作响应确定完成第一读操作命令所请求的数据读取操作后,向第一计算设备发送第一读操作响应。

该步骤610的实现过程请相应参考步骤511的实现过程。

步骤611、第一计算设备在根据第一读操作响应确定完成第一读操作命令所请求的数据读取操作后,向主机发送第一读操作响应。

第一计算设备在接收到第二计算设备发送的第一读操作响应后,会解析该第一读操作响应,以确定该第一读操作响应的内容,并在确定该第一读操作响应用于指示完成了第一读操作命令所请求的数据读取操作后,向主机发送该第一读操作响应。作为一种示例,步骤611可以由NVMe/Virtio后端模块执行。

需要说明的是,上述步骤601至步骤611也可以通过队列的方式实现。其实现过程尅响应参考上述步骤501至步骤512通过队列实现的实现过程。

在本申请实施例提供的数据访问方法中,通过使用第一计算设备对从存储池中读取的数据执行数据处理操作,提高对数据执行数据处理操作的速度,这样一来,一方面能够减小主机的系统开销,另一方面能够提高计算机系统的处理性能,降低I/O时延。

本申请实施例提供了一种数据访问装置,如图14所示,该装置700可以包括:

接收模块701,用于接收第二计算设备发送的第二写操作命令,第二写操作命令由第二计算设备对主机生成的第一写操作命令进行预处理后得到,第一写操作命令用于向存储池中写入待写入数据。

处理模块702,用于基于第二写操作命令,对待写入数据执行数据处理操作。

写入模块703,用于将处理后的待写入数据写入存储池。

可选的,处理模块702,具体用于:基于第二写操作命令,对待写入数据执行纠删码、数据一致性保护和加密中的一项或多项。

可选的,处理后的待写入数据包括:待写入数据的校验数据。写入模块703,具体用于:将校验数据存储至第一计算设备的内存,将校验数据从第一计算设备的内存存储至存储池。

可选的,处理后的待写入数据还包括:待写入数据。此时,如图15所示,该装置700还包括:存储模块704,用于将待写入数据从主机存储至第一计算设备的内存。

相应的,写入模块703,具体还用于:将待写入数据从第一计算设备的内存存储至存储池。

可选的,处理后的待写入数据还包括:待写入数据。此时,写入模块703,具体还用于:将待写入数据从主机存储至存储池。

可选的,如图15所示,该装置700还包括:

获取模块705,用于获取主机生成的第一写操作命令。

发送模块706,用于向第二计算设备发送第一写操作命令。

可选的,当第一计算设备接收到包括第一写操作命令的多个写操作命令时,如图15所示,该装置700还包括:排序模块707,用于按照指定策略对多个写操作命令进行排序。

此时,发送模块706,具体用于:在依次向第二计算设备发送排序后的多个写操作命令的过程中,按照第一写操作命令在排序后的多个写操作命令中的顺序,向第二计算设备发送第一写操作命令。

可选的,第一计算设备可以通过网卡与存储池电连接,此时,发送模块706,还用于向第二计算设备发送第二写操作响应,第二写操作响应用于指示已完成数据处理操作。

接收模块701,用于接收第二计算设备基于第二写操作响应发送的第三写操作命令,第三写操作命令用于指示网卡读取处理后的待写入数据,将处理后的待写入数据写入存储池。发送模块,还用于向网卡转发第三写操作命令。

可选的,接收模块701,还用于接收第二计算设备针对第一写操作命令发送的第一写操作响应,该第一写操作响应由第二计算设备根据存储池发送的写完成命令进行预处理后得到。

发送模块706,还用于在根据第一写操作响应确定完成第一写操作命令所请求的数据写入操作后,向主机发送第一写操作响应。

在本申请实施例提供的数据访问装置中,处理模块用于对需要写入存储池中的数据执行数据处理操作,提高对数据执行数据处理操作的速度,这样一来,一方面能够减小主机的系统开销,另一方面能够提高计算机系统的处理性能,降低I/O时延。

可选的,接收模块701,还用于接收读取数据,读取数据为基于第二计算设备的第二读操作命令,从存储池中读取的数据,第二读操作命令由第二计算设备对主机生成的第一读操作命令进行预处理后得到,第一读操作命令用于从存储池中读取读取数据。

发送模块706,还用于向主机转发读取数据。

可选的,获取模块705,还用于获取主机生成的第一读操作命令。

排序模块707,还用于当第一计算设备接收到包括第一读操作命令的多个读操作命令时,按照指定策略对多个读操作命令进行排序。

发送模块706,还用于在依次向第二计算设备发送排序后的多个读操作命令的过程中,按照第一读操作命令在排序后的多个读操作命令中的顺序,向第二计算设备发送第一读操作命令。

可选的,接收模块701,还用于接收第二计算设备针对第一读操作命令发送的第一读操作响应,第一读操作响应基于读取数据得到。

发送模块706,还用于在根据第一读操作响应确定完成第一读操作命令所请求的数据读取操作后,向主机发送第一读操作响应。

在本申请实施例提供的数据访问装置中,处理模块用于对从存储池中读取的数据执行数据处理操作,提高对数据执行数据处理操作的速度,这样一来,一方面能够减小主机的系统开销,另一方面能够提高计算机系统的处理性能,降低I/O时延。

本申请实施例提供了一种数据访问装置,该数据访问装置可以部署在第二计算设备中,第二计算设备连接至第一计算设备。如图16所示,该装置800可以包括:

获取模块801,用于获取主机生成的第一写操作命令,第一写操作命令用于向存储池中写入待写入数据。

处理模块802,用于对第一写操作命令进行预处理,得到第二写操作命令,第二写操作命令用于指示第一计算设备对待写入数据执行数据处理操作。

发送模块803,用于将第二写操作命令发送至第一计算设备。

可选的,获取模块801,还用于获取主机生成的第一读操作命令,第一读操作命令用于从存储池中读取所需的读取数据。

处理模块802,还用于对第一读操作命令进行预处理,得到第二读操作命令,第二读取操作命令用于从存储池中读取读取数据。

发送模块803,还用于将第二读操作命令发送至第一计算设备。

本申请实施例提供了一种第一计算设备。如图17所示,该第一计算设备可以包括处理单元901、通信接口902和总线903。第一计算设备通过处理单元901执行本申请实施例提供的数据访问方法。

在第一计算设备中,处理单元901的数量可以是一个或多个,图17仅示意了其中一个处理单元901。可选的,处理单元901可以是CPU。若第一计算设备具有多个处理单元901,多个处理单元901的类型可以不同,或者可以相同。可选的,第一计算设备的多个处理器还可以集成为多核处理器。

通信接口902可以是以下器件的任一种或任一种组合:网络接口(如以太网接口)、无线网卡等具有网络接入功能的器件。通信接口902用于第一计算设备与其他节点或者终端设备进行数据通信。

可选的,该第一计算设备还可以包括:存储器(图17中未示出)。该存储器可以存储实现本申请提供的数据访问方法所需的数据等。该存储器可以用作前述方法实施例中的第二内存。该存储器可以是以下存储介质的任一种或任一种组合:非易失性存储器(如只读存储器(Read-Only Memory,ROM)、固态硬盘(Solid State Disk,SSD)、硬盘(Hard DiskDrive,HDD)、光盘等)、易失性存储器。

本申请实施例还提供了另一种第一计算设备。如图18所示,该第一计算设备可以包括逻辑电路1001、通信接口1002和总线1003。第一计算设备通过逻辑电路1001执行本申请实施例提供的数据访问方法。

在一种可实现方式中,逻辑电路1001可以为专用集成电路(Application-Specific Integrated Circuit,ASIC)或可编程逻辑器件(Programmable Logic Device,PLD)。该PLD可以是复杂程序逻辑器件(Complex Programmable Logical Device,CPLD),现场可编程门阵列(Field-Programmable Gate Array,FPGA),通用阵列逻辑(Generic ArrayLogic,GAL),专用集成电路或其任意组合,本申请不作具体限定。

在第一计算设备中,逻辑电路1001的数量可以是一个或多个,图18仅示意了其中一个逻辑电路1001。可选的,逻辑电路1001可以是CPU。若第一计算设备具有多个逻辑电路1001,多个逻辑电路1001的类型可以不同,或者可以相同。可选的,第一计算设备的多个处理器还可以集成为多核处理器。

通信接口1002可以是以下器件的任一种或任一种组合:网络接口(如以太网接口)、无线网卡等具有网络接入功能的器件。通信接口1002用于第一计算设备与其他节点或者终端设备进行数据通信。

可选的,该第一计算设备还可以包括:存储器(图18中未示出)。该存储器可以存储实现本申请提供的数据访问方法所需的数据等。该存储器可以用作前述方法实施例中的第二内存。该存储器可以是以下存储介质的任一种或任一种组合:非易失性存储器(如只读存储器、固态硬盘、硬盘、光盘等)、易失性存储器。

本申请实施例提供了一种第二计算设备。如图19所示,该第二计算设备可以包括处理单元1101、通信接口1102和总线1103。第二计算设备通过处理单元1101执行本申请实施例提供的数据访问方法。

在第二计算设备中,处理单元1101的数量可以是一个或多个,图19仅示意了其中一个处理单元1101。可选的,处理单元1101可以是CPU。若第二计算设备具有多个处理单元1101,多个处理单元1101的类型可以不同,或者可以相同。可选的,第二计算设备的多个处理器还可以集成为多核处理器。在一种可实现方式中,处理单元1101可以为ARM。

通信接口1102可以是以下器件的任一种或任一种组合:网络接口(如以太网接口)、无线网卡等具有网络接入功能的器件。通信接口1102用于第二计算设备与其他节点或者终端设备进行数据通信。

可选的,该第二计算设备还可以包括:存储器(图19中未示出)。该存储器可以存储实现本申请提供的数据访问方法所需的数据等。该存储器可以是以下存储介质的任一种或任一种组合:非易失性存储器(如只读存储器、固态硬盘、硬盘、光盘等)、易失性存储器。

本申请实施例还提供了一种第一存储介质,该第一存储介质为非易失性计算机可读存储介质,当第一存储介质中的指令被处理器执行时,实现如本申请实施例中数据访问方法中第一计算设备所实现的功能。

本申请实施例还提供了一种第二存储介质,该第二存储介质为非易失性计算机可读存储介质,当第二存储介质中的指令被处理器执行时,实现如本申请实施例中数据访问方法中第二计算设备所实现的功能。

本申请实施例还提供了一种包含指令的第一计算机程序产品,当第一计算机程序产品在计算机上运行时,使得计算机执行本申请实施例中数据访问方法中第一计算设备所实现的功能。

本申请实施例还提供了一种包含指令的第二计算机程序产品,当第二计算机程序产品在计算机上运行时,使得计算机执行本申请实施例中数据访问方法中第二计算设备所实现的功能。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本申请实施例中,术语“第一”、“第二”和“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的构思和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

40页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种数据存取方法、装置、设备及存储介质

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类