掌桥专利:专业的专利平台
掌桥专利
首页

访问数据的方法、计算设备和计算机系统

文献发布时间:2023-06-19 10:51:07


访问数据的方法、计算设备和计算机系统

技术领域

本申请涉及计算机技术领域,尤其涉及访问数据的方法、计算设备和计算机系统。

背景技术

云计算是指将大量用网络连接的计算资源和存储资源进行统一管理和调度,向终端用户提供按需服务。云服务商通过安置在数据中心的服务器的集合向远程终端用户提供计算资源和数据存储资源。云计算为用户提供的计算资源和存储资源能够随用户业务的实际变化而弹性伸缩,通过这种弹性计算的能力和按需配给的方式有效帮助用户降低运维成本。云计算可以为用户提供多种类型的服务类型,例如,基础设置即服务(infrastructureas a service,IaaS)、平台即服务(platform as a service,PaaS)和软件即服务(software as a service,SaaS)。其中IaaS为用户计算机基础设施服务,PaaS为用户提供可访问的完整或部分的应用程序开发服务,SaaS则为用户提供了完整的可直接使用的应用程序。虚拟化是云计算的基础,终端用户通常通过租用虚拟机(virtual machine,VM)的形式购买云服务。虚拟机可以指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

对云服务商来说,云计算服务的成本与云服务器的利用率有关。云计算自身的系统开销占用云服务器的计算资源的比例越大,能够为用户提供的计算资源就越少,则云服务器的利用率越低,这导致云计算服务的成本增加。有资料显示,当前云计算服务的系统开销高达13.6%,随着网络和存储性能的进一步提升,云计算服务的系统开销将超过25%。因此,用户需要租用更多的虚拟机才能满足工作要求,这将使得租用成本上升和业务竞争能力下降。

为了提高云服务器的利用率,云服务商通常选择将存储管理功能卸载到云服务器的中央处理器(central processor unit,CPU)之外的其它硬件上,以减少云服务器的系统开销。例如,云服务器通过PCIe端口与ARM相连。可以将云服务器的CPU的存储处理功能转移到精简指令集计算机(reduced instruction set computer,RISC)中,以减少云服务器的系统开销。典型的RISC可包括增强RISC机器(advanced RISC machine,ARM)等微处理器。但这种实现方式中,数据的输入输出(input/output,IO)性能受限于RISC处理器的主频率和指令集,需要多个RISC处理器来并行实现存储卸载功能。并且RISC处理器通过软件实现存储管理功能,其涉及到纠删码(erasure code,EC)算法、数据一致性保护(data integrityfield,DIF)算法、加解密等算法,包含大量计算工作,需要多个RISC处理器并行处理IO数据,会导致IO时延和吞吐量不稳定,同时实现成本也较高。

发明内容

本申请提供一种访问数据的方法、计算设备和计算机系统,能够减少计算机系统的系统开销,并提高数据的IO性能。

第一方面,提供了一种访问数据的方法,应用于计算机系统,所述计算机系统包括:第一处理器、第二处理器和计算设备,所述计算设备分别与所述第一处理器、所述第二处理器连接,所述第二处理器用于与存储池相连,所述方法包括:所述计算设备获取所述第一处理器发送的第一输入输出IO命令,所述第一IO命令为写操作命令或读操作命令,所述写操作命令用于请求向所述存储池写入数据,所述读操作命令用于请求从所述存储池读取数据;所述计算设备向所述第二处理器发送所述第一IO命令;所述第二处理设备根据所述第一IO命令,向所述计算设备发送指示命令,所述指示命令用于指示所述计算设备搬移数据;所述计算设备基于所述指示命令,通过直接内存访问DMA方式将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,或者通过DMA方式将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存。

本申请实施例提供了一种应用于计算机系统的访问数据的方法,该计算机系统包括计算设备,能够使用硬件实现第一处理器卸载的部分存储管理功能,上述部分存储管理功能包括通过DMA方式在第一处理器的内存和第二处理器的内存之间搬移数据,从而能够减少第一处理器和第二处理器的系统开销。并且计算设备利用硬件实现上述存储管理功能,能够减少软件上的信令交互,从而减少访问数据的IO时延,提高IO速度和提供稳定的IO性能。

结合第一方面,在第一方面的一种可能的实现方式中,所述计算设备向所述第二处理器发送所述第一IO命令,包括:所述计算设备将所述第一IO命令分配至所述第一IO命令对应的卷队列,其中不同卷队列中的IO命令对应于所述存储池中的不同逻辑硬盘;所述计算设备从所述卷队列中选择IO命令,以加入子命令队列中,所述选择的IO命令包括所述第一IO命令,所述子命令队列为所述第二处理器处理IO命令的等待队列;所述第二处理器从所述子命令队列中获取所述第一IO命令。

在本申请实施例中,计算设备可以对从第一处理器接收到的IO命令进行QoS管理,例如将IO命令划分至不同的卷队列中,或者从卷队列中选择IO命令,分配至子命令队列中。从而可以卸载第一处理器或第二处理器的部分存储管理功能,从而减少了第一处理器和第二处理器的系统开销,提高了访问数据的IO存储管理性能和效率。

结合第一方面,在第一方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述第二处理设备根据所述第一IO命令,向所述计算设备发送指示命令,包括:所述第二处理器根据所述第一IO命令,生成第一指示命令,所述第一指示命令用于指示将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存;所述第二处理器向所述计算设备发送所述第一指示命令。

结合第一方面,在第一方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述计算设备基于所述指示命令,将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,包括:所述计算设备通过DMA方式从所述第一处理器的内存中读取数据块;所述计算设备计算所述读取的数据块的校验数据块;所述计算设备通过DMA方式将所述读取的数据块及所述校验数据块搬移至所述第二处理器的内存中。

在本申请实施例中,可以在数据块从第一处理器搬移至第二处理器的过程中,实现校验计算,即在计算设备中完成校验计算。因此无需重新将数据从第二处理器的内存中读出以进行校验计算,减少了一次内存拷贝,节约了内存资源,并且简化了访问数据的流程。

结合第一方面,在第一方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述方法还包括:所述第二处理器分解所述第一IO命令,以得到多个第一子IO命令,其中不同子IO命令所请求写入的数据块对应于所述存储池中的不同物理地址;所述第二处理器确定第一条带,所述第一条带中包括所述多个第一子IO命令中的至少一个子IO命令,所述第一条带中还包括至少一个基于其它IO命令分解得到的子IO命令,其中所述第一条带中包括的子IO命令所请求写入的数据块对应于所述存储池中的同一存储设备;所述第二处理器将所述第一条带对应的数据发送至所述存储池中的同一存储设备。

在本申请实施例中,在写操作过程中,第二处理器可以将对应于存储池中的同一存储设备的多个子IO命令集合在一个条带中进行数据访问,以提高访问效率。

结合第一方面,在第一方面的一种可能的实现方式中,所述第一IO命令为读操作命令,所述第二处理设备根据所述第一IO命令,向所述计算设备发送指示命令,包括:所述第二处理器根据所述第一IO命令,生成第二指示命令,所述第二指示命令用于指示所述计算设备将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存中;所述第二处理器向所述计算设备发送所述第二指示命令。

结合第一方面,在第一方面的一种可能的实现方式中,所述第一IO命令为读操作命令,所述方法还包括:所述第二处理器根据所述第一IO命令,生成读数据请求命令,所述读数据请求命令用于向所述存储池请求待读取的数据;所述第二处理器向所述存储池发送所述读数据请求命令;所述第二处理器从所述存储池获取待读取的数据。

结合第一方面,在第一方面的一种可能的实现方式中,所述第二处理器根据所述第一IO命令,生成读数据请求命令,包括:所述第二处理器分解所述第一IO命令,以得到多个第二子IO命令,其中不同子IO命令请求获取的数据块对应于所述存储池中的不同物理地址;所述第二处理器确定第二条带,所述第二条带中包括所述多个第二子IO命令中的至少一个第二子IO命令,所述第二条带中还包括至少一个基于其它IO命令分解得到的子IO命令,其中所述第二条带中的子IO命令所请求获取的数据块对应于所述存储池中的同一存储设备;所述第二处理器根据所述第二条带,生成所述读数据请求命令,所述读数据请求命令用于向所述存储池请求获取所述第二条带对应的数据。

在本申请实施例中,在读操作过程中,可以将对应于同一存储设备的多个子IO命令集合在一个条带中进行数据访问,以提高访问效率。

结合第一方面,在第一方面的一种可能的实现方式中,所述方法还包括:所述第二处理器在确定完成所述第一IO命令的情况下,将所述第一IO命令对应的完成条目写入完成队列;所述计算设备根据所述完成队列,向所述第一处理器发送IO完成信息,所述IO完成信息用于指示第一IO命令已完成。

结合第一方面,在第一方面的一种可能的实现方式中,所述计算设备使用数据缓存系统存储IO命令,所述数据缓存系统包括:缓存空间,所述缓存空间包括K个地址范围,所述K个地址范围分别用于存储K个条目,K为大于0的整数,所述每个条目包括拥有者标志位,所述拥有者标志位用于记录存储标识或空闲标识,所述存储标识用于指示对应的条目内存储有IO命令,所述空闲标识用于指示对应的条目内未存储IO命令;所述缓存空间被配置为:在生产者指针指示的第一地址范围接收IO命令的情况下,所述第一地址范围中的第一拥有者标志位被更新为所述存储标识;所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述存储标识的情况下,所述第二地址范围中的IO命令被读取。

可选地,所述生产者指针用于指向所述K个地址范围中的下一个写入IO命令的地址范围。

可选地,所述消费者指针用于指向所述K个地址范围中的下一个读取IO命令的地址范围。

可选地,所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述空闲标识的情况下,未在所述第二地址范围中存储IO命令。

第二方面,提供了一种访问数据的方法,所述方法由计算设备执行,所述计算设备分别与所述第一处理器、所述第二处理器连接,所述第二处理器用于与存储池相连,所述方法包括:所述计算设备获取所述第一处理器发送的第一输入输出IO命令,所述第一IO命令为写操作命令或读操作命令,所述写操作命令用于请求向所述存储池写入数据,所述读操作命令用于请求从所述存储池读取数据;所述计算设备向所述第二处理器发送所述第一IO命令;所述计算设备接收所述第二处理器发送的指示命令,所述指示命令用于指示所述计算设备搬移数据;所述计算设备基于所述指示命令,通过直接内存访问DMA方式将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,或者通过DMA方式将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存。

结合第二方面,在第二方面的一种可能的实现方式中,所述计算设备向所述第二处理器发送所述第一IO命令,包括:所述计算设备将所述第一IO命令分配至所述第一IO命令对应的卷队列,其中不同卷队列中的IO命令对应于所述存储池中的不同逻辑硬盘;所述计算设备从所述卷队列中选择IO命令,以加入子命令队列中,所述选择的IO命令包括所述第一IO命令,所述子命令队列为所述第二处理器处理IO命令的等待队列。

结合第二方面,在第二方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述计算设备接收所述第二处理器发送的指示命令,包括:所述计算设备接收所述第二处理器发送的第一指示命令,所述第一指示命令是根据所述第一IO命令生成的,所述第一指示命令用于指示将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存。

结合第二方面,在第二方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述计算设备基于所述指示命令,将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,包括:所述计算设备通过DMA方式从所述第一处理器的内存中读取数据块;所述计算设备计算所述读取的数据块的校验数据块;所述计算设备通过DMA方式将所述读取的数据块及所述校验数据块搬移至所述第二处理器的内存中。

结合第二方面,在第二方面的一种可能的实现方式中,所述第一IO命令为读操作命令,所述计算设备接收所述第二处理器发送的指示命令,包括:所述计算设备接收所述第二处理器发送的第二指示命令,所述第二指示命令是根据所述第一IO命令生成的,所述第二指示命令用于指示所述计算设备将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存中。

结合第二方面,在第二方面的一种可能的实现方式中,所述方法还包括:所述计算设备在确定完成所述第一IO命令的情况下,向所述第一处理器发送IO完成信息,所述IO完成信息用于指示第一IO命令已完成。

结合第二方面,在第二方面的一种可能的实现方式中,所述计算设备使用数据缓存系统存储IO命令,所述数据缓存系统包括:缓存空间,所述缓存空间包括K个地址范围,所述K个地址范围分别用于存储K个条目,K为大于0的整数,所述每个条目包括拥有者标志位,所述拥有者标志位用于记录存储标识或空闲标识,所述存储标识用于指示对应的条目内存储有IO命令,所述空闲标识用于指示对应的条目内未存储IO命令;所述缓存空间被配置为:在生产者指针指示的第一地址范围接收IO命令的情况下,所述第一地址范围中的第一拥有者标志位被更新为所述存储标识;所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述存储标识的情况下,所述第二地址范围中的IO命令被读取。

可选地,所述生产者指针用于指向所述K个地址范围中的下一个写入IO命令的地址范围。

可选地,所述消费者指针用于指向所述K个地址范围中的下一个读取IO命令的地址范围。

可选地,所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述空闲标识的情况下,未在所述第二地址范围中存储IO命令。

第三方面,提供了一种计算机系统,包括第一处理器、第二处理器和计算设备,所述计算设备分别与所述第一处理器、所述第二处理器连接,所述第二处理器用于与存储池相连,所述计算设备用于获取所述第一处理器发送的第一输入输出IO命令,所述第一IO命令为写操作命令或读操作命令,所述写操作命令用于请求向所述存储池写入数据,所述读操作命令用于请求从所述存储池读取数据;所述计算设备用于向所述第二处理器发送所述第一IO命令;所述第二处理设备用于根据所述第一IO命令,向所述计算设备发送指示命令,所述指示命令用于指示所述计算设备搬移数据;所述计算设备还用于基于所述指示命令,通过直接内存访问DMA方式将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,或者通过DMA方式将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存。

本申请实施例提供了一种计算机系统,包括计算设备,该计算设备能够使用硬件实现第一处理器卸载的部分存储管理功能,上述部分存储管理功能包括通过DMA方式在第一处理器的内存和第二处理器的内存之间搬移数据,从而能够减少第一处理器和第二处理器的系统开销。并且计算设备利用硬件实现上述存储管理功能,能够减少软件上的信令交互,从而减少访问数据的IO时延,提高IO速度和提供稳定的IO性能。

结合第三方面,在第三方面的一种可能的实现方式中,所述计算设备具体用于:将所述第一IO命令分配至所述第一IO命令对应的卷队列,其中不同卷队列中的IO命令对应于所述存储池中的不同逻辑硬盘;从所述卷队列中选择IO命令,以加入子命令队列中,所述选择的IO命令包括所述第一IO命令,所述子命令队列为所述第二处理器处理IO命令的等待队列;所述第二处理器具体用于从所述子命令队列中获取所述第一IO命令。

结合第三方面,在第三方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述第二处理设备具体用于:根据所述第一IO命令,生成第一指示命令,所述第一指示命令用于指示将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存;向所述计算设备发送所述第一指示命令。

结合第三方面,在第三方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述计算设备具体用于:通过DMA方式从所述第一处理器的内存中读取数据块;计算所述读取的数据块的校验数据块;通过DMA方式将所述读取的数据块及所述校验数据块搬移至所述第二处理器的内存中。

结合第三方面,在第三方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述第二处理器还用于:分解所述第一IO命令,以得到多个第一子IO命令,其中不同子IO命令所请求写入的数据块对应于所述存储池中的不同物理地址;确定第一条带,所述第一条带中包括所述多个第一子IO命令中的至少一个子IO命令,所述第一条带中还包括至少一个基于其它IO命令分解得到的子IO命令,其中所述第一条带中包括的子IO命令所请求写入的数据块对应于所述存储池中的同一存储设备;将所述第一条带对应的数据发送至所述存储池中的同一存储设备。

结合第三方面,在第三方面的一种可能的实现方式中,所述第一IO命令为读操作命令,所述第二处理设备具体用于:根据所述第一IO命令,生成第二指示命令,所述第二指示命令用于指示所述计算设备将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存中;向所述计算设备发送所述第二指示命令。

结合第三方面,在第三方面的一种可能的实现方式中,所述第一IO命令为读操作命令,所述第二处理器还用于:根据所述第一IO命令,生成读数据请求命令,所述读数据请求命令用于向所述存储池请求待读取的数据;向所述存储池发送所述读数据请求命令;从所述存储池获取待读取的数据。

结合第三方面,在第三方面的一种可能的实现方式中,所述第二处理器具体用于:分解所述第一IO命令,以得到多个第二子IO命令,其中不同子IO命令请求获取的数据块对应于所述存储池中的不同物理地址;确定第二条带,所述第二条带中包括所述多个第二子IO命令中的至少一个第二子IO命令,所述第二条带中还包括至少一个基于其它IO命令分解得到的子IO命令,其中所述第二条带中的子IO命令所请求获取的数据块对应于所述存储池中的同一存储设备;根据所述第二条带,生成所述读数据请求命令,所述读数据请求命令用于向所述存储池请求获取所述第二条带对应的数据。

结合第三方面,在第三方面的一种可能的实现方式中,所述第二处理器还用在确定完成所述第一IO命令的情况下,将所述第一IO命令对应的完成条目写入完成队列;所述计算设备还用于根据所述完成队列,向所述第一处理器发送IO完成信息,所述IO完成信息用于指示第一IO命令已完成。

结合第三方面,在第三方面的一种可能的实现方式中,所述计算设备使用数据缓存系统存储IO命令,所述数据缓存系统包括:缓存空间,所述缓存空间包括K个地址范围,所述K个地址范围分别用于存储K个条目,K为大于0的整数,所述每个条目包括拥有者标志位,所述拥有者标志位用于记录存储标识或空闲标识,所述存储标识用于指示对应的条目内存储有IO命令,所述空闲标识用于指示对应的条目内未存储IO命令;所述缓存空间被配置为:在生产者指针指示的第一地址范围接收IO命令的情况下,所述第一地址范围中的第一拥有者标志位被更新为所述存储标识;所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述存储标识的情况下,所述第二地址范围中的IO命令被读取。

可选地,所述生产者指针用于指向所述K个地址范围中的下一个写入IO命令的地址范围。

可选地,所述消费者指针用于指向所述K个地址范围中的下一个读取IO命令的地址范围。

可选地,所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述空闲标识的情况下,未在所述第二地址范围中存储IO命令。

第四方面,提供了一种计算设备,所述计算设备分别与第一处理器、第二处理器连接所述第二处理器用于与存储池相连,所述计算设备包括:IO处理模块,获取所述第一处理器发送的第一IO命令,所述第一IO命令为写操作命令或读操作命令,所述写操作命令用于请求向所述存储池写入数据,所述读操作命令用于请求从所述存储池读取数据;QoS模块,用于向所述第二处理器发送所述第一IO命令;所述IO处理模块还用于接收所述第二处理器发送的指示命令,所述指示命令用于指示所述计算设备搬移数据;直接内存访问DMA模块,用于基于所述指示命令,通过DMA方式将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,或者通过DMA方式将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存。

结合第四方面,在第四方面的一种可能的实现方式中,所述QoS模块具体用于:将所述第一IO命令分配至所述第一IO命令对应的卷队列,其中不同卷队列中的IO命令对应于所述存储池中的不同逻辑硬盘;从所述卷队列中选择IO命令,以加入子命令队列中,所述选择的IO命令包括所述第一IO命令,所述子命令队列为所述第二处理器处理IO命令的等待队列。

结合第四方面,在第四方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述IO处理模块具体用于接收所述第二处理器发送的第一指示命令,所述第一指示命令是根据所述第一IO命令生成的,所述第一指示命令用于指示将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存。

结合第四方面,在第四方面的一种可能的实现方式中,所述第一IO命令为写操作命令,所述DMA模块用于过DMA方式从所述第一处理器的内存中读取数据块;所述计算设备还包括算法引擎模块,用于:计算所述读取的数据块的校验数据块;所述DMA模块还用于通过DMA方式将所述读取的数据块及所述校验数据块搬移至所述第二处理器的内存中。

结合第四方面,在第四方面的一种可能的实现方式中,所述第一IO命令为读操作命令,所述IO处理模块具体用于接收所述第二处理器发送的第二指示命令,所述第二指示命令是根据所述第一IO命令生成的,所述第二指示命令用于指示所述计算设备将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存中。

结合第四方面,在第四方面的一种可能的实现方式中,所述IO处理模块还用于在确定完成所述第一IO命令的情况下,向所述第一处理器发送IO完成信息,所述IO完成信息用于指示第一IO命令已完成。

结合第四方面,在第四方面的一种可能的实现方式中,所述计算设备使用数据缓存系统存储IO命令,所述数据缓存系统包括:缓存空间,所述缓存空间包括K个地址范围,所述K个地址范围分别用于存储K个条目,K为大于0的整数,所述每个条目包括拥有者标志位,所述拥有者标志位用于记录存储标识或空闲标识,所述存储标识用于指示对应的条目内存储有IO命令,所述空闲标识用于指示对应的条目内未存储IO命令;所述缓存空间被配置为:在生产者指针指示的第一地址范围接收IO命令的情况下,所述第一地址范围中的第一拥有者标志位被更新为所述存储标识;所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述存储标识的情况下,所述第二地址范围中的IO命令被读取。

可选地,所述生产者指针用于指向所述K个地址范围中的下一个写入IO命令的地址范围。

可选地,所述消费者指针用于指向所述K个地址范围中的下一个读取IO命令的地址范围。

可选地,所述缓存空间还被配置为:在消费者指针指示的第二地址范围中的第二拥有者标志位记录为所述空闲标识的情况下,未在所述第二地址范围中存储IO命令。

第五方面,提供了一种数据缓存系统,包括:缓存空间,所述缓存空间包括K个地址范围,所述K个地址范围分别用于存储K个条目,K为大于0的整数,所述每个条目包括拥有者标志位,所述拥有者标志位用于记录存储标识或空闲标识,所述存储标识用于指示对应的条目内存储有数据,所述空闲标识用于指示对应的条目内未存储数据;生产者控制单元,被配置为执行以下操作:向生产者指针指示的第一地址范围中写入数据,并将所述第一地址范围中的第一拥有者标志位更新为所述存储标识;消费者控制单元,被配置为执行以下操作:根据消费者指针指示的第二地址范围中的第二拥有者标志位,确定是否从所述第二地址范围中读取数据。

可选地,所述生产者指针用于指向所述K个地址范围中的下一个写入数据的地址范围。

可选地,所述消费者指针用于指向所述K个地址范围中的下一个读取数据的地址范围。

在本申请实施例中,通过在数据缓存系统中的每个地址范围存储的条目中配置拥有者标志位,以指示对应的条目中是否存储有数据。读数据线程可以通过读取拥有者标志位的存储标识或空闲标识,以判断条目中是否存储有命令,这种数据缓存系统可以减少写数据线程和读数据线程之间的交互,甚至允许独立运行生产者和消费者线程,从而简化了数据缓存系统的管理流程。

结合第五方面,在第五方面的一种可能的实现方式中,所述数据缓存系统还包括:消费者控制单元,被配置为执行以下操作:确定消费者指针指示的第二地址范围,所述消费者指针用于指向所述K个地址范围中的下一个读取IO命令的地址范围;在所述第二地址范围中的第二拥有者标志位记录为所述存储标识的情况下,从所述第二地址范围中读取数据;在所述第二拥有者标志位记录为所述空闲标识的情况下,确定所述第二地址范围中未存储有数据。

结合第五方面,在第五方面的一种可能的实现方式中,数据缓存系统还包括:生产者环寄存器,用于存储生产者环标志位,所述生产者环标志位用于记录所述生产者指针在所述K个地址范围的循环次数为奇数次或偶数次,其中所述拥有者标志位的赋值是根据所述生产者环标志位的赋值确定的;所述生产者控制单元被配置为具体执行以下操作:确定所述生产者环标志位指示的循环次数为奇数次;在所述第九地址范围中写入数据,并将所述第九地址范围中的第九拥有者标志位从第二值更新为第一值;或者,所述生产者控制单元被配置为具体执行以下操作:确定所述生产者环标志位指示的循环次数为偶数次;在所述第九地址范围中写入数据,并将所述第九地址范围中的第九拥有者标志位从所述第一值更新为所述第二值。

在本申请实施例中,上层软件根据生产者指针的循环次数的奇偶性,来确定存储标识对应的拥有者标志位的赋值,以便于上层软件在读取数据时可以根据消费者指针的循环次数的奇偶性以及拥有者标志位的赋值确定该条目中是否存储有数据,这种数据缓存系统可以减少写数据线程和读数据线程之间的交互,甚至允许独立运行写数据线程和读数据线程,从而简化了数据缓存系统的管理流程。

结合第五方面,在第五方面的一种可能的实现方式中,所述数据缓存系统还包括:消费者环寄存器,用于存储消费者环标志位,以记录所述消费者指针在所述K个地址范围的循环次数为奇数次或偶数次;所述消费者控制单元被配置为具体执行以下操作:确定所述消费者环标志位指示的循环次数为奇数次;在所述第二拥有者标志位记录为所述第一值的情况下,从所述第二地址范围中读取数据;或者,所述消费者控制单元被配置具体执行以下操作:确定所述消费者环标志位指示的循环次数为偶数次;在所述第二拥有者标志位的赋值为所述第二值的情况下,从所述第二地址范围中读取数据。

在本申请实施例中,上层软件根据消费者环寄存器记录的消费者指针的循环次数的奇偶性,确定消费者指针指示的条目中的拥有者标志位的赋值指示的为存储标识或空闲标识,进而判断条目中是否存储有命令,这种数据缓存系统的定义方式可以减少生产者线程和消费者线程之间的交互,从而简化了数据缓存系统的管理流程。

结合第五方面,在第五方面的一种可能的实现方式中,所述消费者控制单元被配置为具体执行以下操作:确定所述消费者环标志位指示的循环次数为奇数次;在所述第二拥有者标志位的赋值为所述第二值的情况下,确定所述第二地址范围中未存储数据;确定所述消费者环标志位指示的循环次数为偶数次;在所述第二拥有者标志位的赋值为所述第一值的情况下,确定所述第二地址范围中未存储有数据。

结合第五方面,在第五方面的一种可能的实现方式中,所述第一值为1,所述第二值为0;或者,所述第一值为0,所述第二值为1。

第六方面,提供了一种芯片,所述芯片上设置有如第四方面或第四方面中任一种可能的实现方式中所述的计算设备

第七方面,提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码包括用于执行第一方面或第一方面任一种可能的实现方式的方法的指令。

第八方面,提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码包括用于执行第二方面或第二方面任一种可能的实现方式的方法的指令。

附图说明

图1是本申请一实施例的云计算系统100的架构示意图。

图2是本申请一实施例的计算机系统200的架构示意图。

图3是本申请又一实施例的计算机系统300的系统示意图。

图4是本申请又一实施例的计算机系统400的架构示意图。

图5是本申请又一实施例的计算机系统400的架构示意图。

图6是本申请一实施例的访问数据的方法的逻辑流程示意图。

图7是本申请一实施例的访问数据的方法700的流程示意图。

图8是本申请一实施例的计算机系统400执行写操作的示意图。

图9是本申请一实施例的计算机系统400执行读操作的示意图。

图10是本申请实施例的EC算法的编解码流程示意图。

图11是传统的存储卸载方案中的EC算法的示意图。

图12是本申请一实施例的存储卸载方案中的EC算法的示意图。

图13是本申请一实施例的访问数据的方法1300的信令处理流程示意图。

图14是本申请一实施例的写操作方法1400的流程示意图。

图15是本申请一实施例的子IO命令的凑分条的示意图。

图16是本申请一实施例的数据块的凑分条的示意图。

图17是本申请一实施例的读操作方法1700的流程示意图。

图18是本申请一实施例的数据缓存系统的结构示意图。

图19是本申请一实施例的数据缓存系统的工作状态示意图。

图20是本申请一实施例的数据缓存系统中的条目的结构示意图。

图21是本申请一实施例的数据缓存系统的工作状态示意图。

图22是本申请又一实施例的数据缓存系统的工作状态示意图。

图23是本申请又一实施例的应用场景的示意图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

为了便于理解,下文首先介绍本申请实施例涉及到的若干术语和概念。

IaaS:即基础设置即服务,是指把互联网技术(internet technology,IT)基础设施作为一种服务通过网络对外提供。在这种服务模型中,用户不用自己构建一个数据中心,而是通过租用的方式来使用基础设施服务,包括服务器、存储和网络等。IaaS可以用虚拟化操作系统、工作负载管理软件、硬件、网络和存储服务的形式交付计算资源。IaaS能够按需提供计算能力和存储服务。不是在传统的数据中心中购买和安装所需的资源,而是根据公司需要,租用这些所需的资源。IaaS通常分为公有云、私有云和混合云。

虚拟机:虚拟化经常作为云计算的基础。虚拟机可以指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,通过这种方法,以在单一的物理系统内创建多个虚拟系统。

精简指令集计算机(reduced instruction set computer,RISC):是一种执行较少类型计算机指令的微处理器,RISC中采用的微处理器可以称为RISC处理器。RISC的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。RISC是相对于复杂指令集计算机(complexinstruction set computer,CISC)而言的。所谓复杂指令集计算机是依靠增加机器的硬件结构来满足对计算机日益增加的性能要求。因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。这样一来,RISC能够以更快的速度执行操作。RISC处理器例如可以包括强RISC机器(advancedRISC machine,ARM)等微处理器。

X86架构:是微处理器执行的计算机语言指令集,标识一套通用的计算机指令集合。通常指英特尔(intel)公司的一个通用计算机系列的标准编号缩写。

直接内存访问(direct memory access,DMA):也可以称为直接内存操作或者组数据传输方式,是指一种不经过CPU而直接从内存存取数据的数据交互模式。在DMA模式下,CPU只需向DMA控制器下达指令,由DMA控制器控制数据的传送,数据传送完毕再将信息反馈给CPU,从而减轻了CPU的资源占有率,以节省系统资源。换句话说,DMA传输将数据从一个地址空间复制到另外一个地址空间,CPU用于初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部的内存区。DMA方式在数据传送过程中,没有保存现场、恢复现场之类的工作。由于CPU根本不参加传送操作,因此就省去了CPU取指令、取数、送数等操作。内存地址修改、传送字个数的计数等等,也不是由软件实现,而是用硬件线路直接实现的。所以DMA方式能满足高速I/O设备的要求,也有利于CPU效率的发挥。

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

外围组件互连快速(peripheral component interconnect express,PCIe)总线:一种高速串行计算机扩展总线标准。PCIe总线可用于支持主动电源管理、错误报告、端对端的可靠性传输、热插拔等功能。

超级通道互连(ultra path interconnect,UPI):应用于X86架构的一种计算机扩展总线标准。

网卡:也可以称为网络接口控制器(network interface controller,NIC)、网络适配器、或者局域网接收器,是一种被设计为允许计算机在计算机网络上进行通信的计算机硬件。每一个网卡都对应一个唯一的媒体接入控制(media access control,MAC)地址。

内存(memory):也可以称为内存储器或者主存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。CPU把需要运算的数据调到内存中进行运算,当运算完成后再将结果从内存中传送出来。

非易失性存储器标准(Non-Volatile Memory express,NVMe):是一个逻辑设备接口标准,基于设备逻辑接口的总线传输协议规范,访问通过总线附加的非易失性内存介质。Virtio IO协议:可以简称为Virtio协议或者Virtio,是指一种半虚拟化的虚拟IO接口框架,可以支持多种类型的IO设备,相对于全虚拟化IO,Virtio IO协议具有良好的扩展性和兼容性,被广泛用在虚拟化场景中,成为一种事实标准。随着虚拟机的单机租户数目提升和对网络性能带宽诉求的逐渐强烈,承载Virtio IO协议的宿主机开销越来越大,因此可以将Virtio IO的后端负载卸载到网卡或其它硬件,以提升宿主机的效率。

宿主机:是指安装虚拟机的计算机,或者说物理机。

纠删码(erasure code,EC)算法:是一种编码容错技术,基本原理是把传输的信号分段,加入一定的校验码再让各段间发生一定的联系,即使在传输过程中丢失掉部分信号,接收端仍然能通过算法把完整的信息计算出来。按照误码控制的不同功能,纠删码可分为检错、纠错和纠删三种类型。

图1是本申请一实施例的云计算系统100的架构示意图。如图1所示,云计算系统100包括服务器101、存储池102以及客户端103。其中,客户端103通过网络与服务器101相连,客户端103通过网络访问服务器101。服务器101可以通过网络与存储池102相连。例如,服务器101可以通过网卡与存储池102进行通信。服务器101可以根据客户端103的输入命令,将数据写入存储池102中,或者从存储池102中读出数据。可选地,为了便于描述,图1中仅包括一个服务器、一个存储池和一个客户端。本领域技术人员能够理解,图1中的服务器101可以包括服务器的集合;存储池102可以包括存储设备的集合,例如,存储池102可以是分布式存储系统;客户端103可以包括多个客户端。

应理解,图1中的云计算系统100仅仅作为示例而非限定,云计算系统100还包括其它类型的架构或变形,均适用于本申请实施例的应用环境。

图2是本申请一实施例的计算机系统200的架构示意图。如图2所示,该计算机系统200中包括第一处理器10和网卡70。第一处理器10用于运行虚拟机(virtual machines,VMs)和虚拟机监视器(virtual machine monitor,VMM)。其中,各个模块的功能描述如下。

虚拟机:是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。虚拟机的部分指令子集可以在宿主(host)机中处理,其它部分指令可以以仿真的方式执行,宿主机可以上述指第一处理器。一个处理器可以支持一个或多个虚拟机,虚拟机与虚拟机监视器之间可以根据通信协议规范通信。作为示例,虚拟机中设置有NVMe/Virtio前端模块,NVMe/Virtio前端模块用于执行NVMe协议的前端部分和/或Virtio协议的前端部分。

虚拟机监视器:或者称为管理器(hypervisor),是用于维护多个隔离的虚拟机的系统软件。虚拟机监视器用于管理计算机系统的真实资源,为虚拟机提供接口。所述虚拟机监视器中包括NVMe/Virtio后端模块,NVMe/Virtio后端模块用于执行NVMe协议的后端部分和/或Virtio协议的后端部分。虚拟机监视器还包括虚拟块系统处理(virtual blocksystem process,VBS process)模块和RDMA模块。其中,虚拟块系统处理模块可用于对写入存储池或从存储池读取的数据进行处理,例如可以对数据块进行凑分条、纠删码、DIF、加解密处理等操作。RDMA模块用于执行远程DMA数据搬移。

第一处理器10和网卡70之间可以通过总线相连,该总线例如可以包括PCIe协议总线或者UPI协议总线。第一处理器10可以通过网卡70与网络连接。例如,第一处理器10可以通过网卡70与存储池102相连,并通过网卡与存储池102进行数据传输和通信。作为示例,所述第一处理器10例如可以包括英特尔公司的X86架构的处理器。其中,该计算机系统200可以应用于图1中的云计算系统100的服务器101。

在计算机系统200中,第一处理器10还需要执行数据的存储管理功能,因此占用的系统开销较大。云服务商需要购置更多的服务器,才能达到客户要求的计算资源容量,因此成本较高。为了解决上述问题,业界通常选择将第一处理器10的存储管理功能卸载到其它成本较低的处理器中,例如RISC处理器,以减少第一处理器10的系统开销,从而达到节约成本的目的。

图3是本申请又一实施例的计算机系统300的系统示意图。如图3所示,计算机系统300包括第一处理器10和第二处理器20。作为示例,所述第一处理器10包括CISC处理器,所述第二处理器20包括RISC处理器。与图2中的计算机系统200相比,计算机系统300将第一处理器10的存储管理功能卸载到第二处理器20中。作为示例,第一处理器10包括X86架构的处理器,第二处理器20包括ARM。

在计算机系统300中,数据的IO速度受限于第二处理器20的主频率和指令集。例如,计算机系统300需要16个ARM才能实现1兆每秒输入/输出操作(mega input/output persecond,MIOPS)的IO处理速度。另外,存储管理功能涉及到纠删码(erasure code,EC)算法、数据一致性保护(data integrity field,DIF)算法、加密、解密等多种算法,包含大量的计算工作。由于第二处理器20使用软件实现这些计算工作,导致IO延时较大。例如,最优延时只能做到150微秒(μs)左右。因此使用第二处理器20卸载第一处理器10的存储管理功能虽然能减少第一处理器10的系统开销,但是IO性能并不理想,而且可能会影响云计算系统的优化和升级。

为了解决上述问题,本申请实施例提出了一种计算设备,该计算设备可以设置于第一处理器10与第二处理器20之间,并利用该计算设备的硬件功能执行从第一处理器10卸载的部分存储管理功能,能够提高数据存储的IO性能,降低IO时延。接下来将结合附图,详细介绍本申请实施例提供的计算机系统400以及计算设备。

图4是本申请又一实施例的计算机系统400的架构示意图。如图4所示,该计算机系统400包括第一处理器10、第二处理器20、计算设备50以及网卡70。所述计算设备50设置于所述第一处理器10和所述第二处理器20之间,所述第二处理器20与网卡70相连。第二处理器20可以通过网卡70与网络相连,例如,第二处理器20可以通过网卡70与存储池102相连。存储池102用于存储云计算系统中的数据。例如,存储池102可以是分布式存储系统。所述第一处理器10与其对应的内存相连,所述第二处理器20也与其对应的内存相连。

在一些示例中,所述第一处理器10包括CISC处理器,所述第二处理器20包括RISC处理器。例如,第一处理器10可以是X86架构的处理器,第二处理器20可以是AMR。所述计算机系统400可以应用于图1中的云计算系统100中的服务器101。

可选地,所述计算设备50包括现场可编程阵列(field programmable gatearray,FPGA)或者专用集成电路(application specific integrated circuit,ASIC)。

在本申请实施例中,所述计算设备50可以用于卸载第一处理器10的部分存储管理功能,并且所述计算设备50可以用硬件实现上述卸载的部分存储管理功能。例如,计算设备50可以通过DMA方式在第一处理器10的内存和第二处理器20的内存之间搬移数据。或者计算设备50可以通过硬件对IO命令进行服务质量(quality of service,QoS)管理。或者计算设备50还可以利用硬件实现数据的相关算法。例如,EC、DIF、加密、解密等算法。接下来将结合附图,继续介绍本申请实施例的计算机系统以及访问数据的方法。

图5是本申请又一实施例的计算机系统400的架构示意图。如图5所示,第一处理器10中包括虚拟机,所述虚拟机包括NVMe/Virtio前端模块,所述计算设备50中可以包括NVMe/Virtio后端模块。NVMe/Virtio后端模块用于与第一处理器10中的NVMe/Virtio前端模块对接。所述计算设备还可以包括端节点(end point,EP)模块,所述EP模块用于处理PCIe标准下的接口规范,以与第二处理器20对接。

在一些示例中,所述计算设备50中还包括IO处理模块,用于接收和分析从第一处理器或第二处理器中接收的信令。例如,IO处理模块可以用于分析从第一处理器10处接收的IO命令,所述IO命令可包括写操作命令和读操作命令。

在一些示例中,所述计算设备50中还包括服务质量(quality of service,QoS)模块,该QoS模块用于实现IO命令的流量管理。

在一些示例中,所述计算设备中还包括DMA模块,所述DMA模块用于通过DMA方式实现第一处理器10的内存和第二处理器20的内存之间的数据搬移。

在一些示例中,所述计算设备中还包括算法引擎(engine,ENG)模块,所述算法引擎模块用于通过硬件实现存储数据的相关算法,例如,EC、DIF、加密、解密等算法。

图6是本申请一实施例的访问数据的方法的逻辑流程示意图。如图6所示,访问数据的逻辑流程涉及到卷队列、子命令队列和完成队列。上述各个队列可以设置在计算设备50中的存储区域,或者也可以设置在第二处理器20的内存中。上述各个队列的功能如下描述。

卷队列(volume queue):存储池中包括多个逻辑硬盘,不同逻辑硬盘对应不同的卷标识(identifier,ID),每个卷标识可以对应一个卷队列。IO命令中可包括卷标识(identifier,ID)。第一处理器可以将虚拟机生成的IO命令发送至计算设备50,计算设备50根据卷标识,将IO命令分配到与对应的卷队列中。

子命令队列(subcommand queue):可以指待执行的IO命令的队列。计算设备50可以从卷队列中选择待执行的IO命令,并将选择的命令分配至子命令队列中。子命令队列可以指用于第二处理器20处理IO命令的等待队列。第二处理器20可以从子命令队列中读取待处理的IO命令。例如,计算设备50可以根据IO命令的优先级信息或其它信息将其分配至子命令队列中。

完成队列(completion queue):第二处理器20可以用于处理IO命令对应的写/读操作,并在完成相应的操作之后,将完成条目写入到完成队列中。计算设备50在完成队列中读取到该完成条目之后,可以向虚拟机反馈该IO命令完成。

可选地,访问数据的流程中还涉及到IO控制信息块,该IO控制信息块可以设置在计算设备50中的存储区域,或者也可以设置在第二处理器20的内存中。IO控制信息块的功能如下描述。

IO控制信息块(IO control block):计算设备50在从虚拟机接收IO命令之后,可以将IO命令的信息写入IO控制信息块中,并分配对应的IO命令标识。第二处理器20在获取IO命令标识之后,以该标识为索引,到IO控制信息块中读取IO命令的完整信息。换句话说,在卷队列和子命令队列中传输的是IO命令的索引,而不是IO命令本身,从而减轻了系统的存储负担,提高了信令交互效率。

参见图6,本申请实施例的访问数据的逻辑流程包括如下步骤。

S1、第一处理器10生成IO命令,IO命令包括写操作命令或读操作命令。

例如,第一处理器10的虚拟机可以根据客户端输入的写数据请求或读数据请求,生成IO命令。在本申请实施例中,虚拟机与其它设备之间的通信,也可以理解为第一处理器10与其它设备之间的通信。

S2、计算设备50接收IO命令,将该IO命令的信息写入IO控制信息块中,并分配对应的IO命令标识。

其中,在卷队列和子命令队列中传输的是IO命令标识,而不是IO命令本身。作为示例,计算设备50中的IO处理模块可用于执行S2中的操作。

S3、计算设备50将IO命令分配到卷队列中。

作为示例,IO命令中包括卷标识,计算设备50可以根据卷标识,将IO命令分配到对应的卷队列中。可选地,计算设备50中的QoS模块可用于执行S3中的操作。

S4、计算设备50从卷队列中选取待处理的IO命令,并将其加入子命令队列中。

其中,子命令队列为待处理的IO命令的等待队列。计算设备50可以用于执行IO命令的QoS流量管理,例如将IO命令分配到卷队列中,或者将IO命令分配到子命令队列中。作为示例,处理器50中的QoS模块可用于执行S4中的操作。

S5、第二处理器20在判断IO命令完成之后,将IO命令对应的完成条目写入到完成队列中。

在执行IO命令的过程中,计算设备50可以用于处理QoS流量管理、算法和DMA数据搬移等功能。其中计算设备50可以利用硬件实现访问数据中的相关算法,第二处理器20可以用于实现软件方面的IO命令解析和拆分,这种软硬件结合的方式可以方便后续版本升级和运维。后文中将结合附图,详细描述本申请中的IO命令解析和拆分方法。

S6、计算设备50在完成队列中读取到完成条目之后,向第一处理器10发送IO完成命令,以通知第一处理器10该IO命令完成。

图7是本申请一实施例的访问数据的方法700的流程示意图。该方法为向存储池写入数据的流程,可应用于图4或图5中的计算机系统400。如图7所示,该方法700包括:

S701、所述计算设备获取所述第一处理器发送的第一IO命令,所述第一IO命令为写操作命令或读操作命令,所述写操作命令用于请求向所述存储池写入数据,所述读操作命令用于请求从所述存储池读取数据。

可选地,所述存储池可以是图1中的存储池102,第二处理器通过网卡与所述存储池相连,存储池可以包括分布式存储设备。

可选地,所述第一处理器生成第一IO命令包括:第一处理器中的虚拟机生成第一IO命令。第一处理器可以根据客户端的输出操作,生成所述第一IO命令。例如,对于写操作,第一处理器可以根据客户端的输入信息,生成写操作命令和待写入的数据,该待写入的数据存储于第一处理器的内存中。例如,对于读操作,第一处理器可以根据客户端的输入信息,生成读操作命令。

例如,图8是本申请一实施例的计算机系统400执行写操作的示意图。如图8所示,写操作过程包括两个阶段,在第一阶段,计算设备50将待写入的数据从所述第一处理器10的内存搬移至所述第二处理器20的内存中,在第二阶段,所述第二处理器20通过网卡70将所述待写入的数据发送至所述存储池102中。

例如,图9是本申请一实施例的计算机系统400执行读操作的示意图。如图9所示,读操作过程包括两个阶段,在第一阶段,第二处理器20通过网卡70从存储池102读取数据,并存入第二处理器20的内存中。在第二阶段,计算设备50将所述读取的数据从第二处理器20的内存搬移至所述第一处理器10的内存中。

在一些示例中,所述第一处理器将所述第一IO命令写入提交队列中,所述提交队列可以设置于所述第一处理器10的内存中。所述计算设备50从所述提交队列中获取所述IO命令。具体地,所述第一处理器10可以通知计算设备50来获取所述IO命令。例如第一处理器10可以在门铃寄存器(doorbell register,DB)中写入对应的条目,计算设备通过读取DB,获知需要从提交队列中读取IO命令。其中,DB可以设置于计算设备50的存储区域中。

S702、所述计算设备向所述第二处理器发送所述第一IO命令。

在一些示例中,在计算设备获取第一IO命令之后,方法700还包括:计算设备将所述第一IO命令加入其对应的卷队列,不同的卷队列对应于所述存储池中的不同逻辑硬盘。计算设备从所述卷队列中选择IO命令,以加入子命令队列中,所述选择的IO命令包括所述第一IO命令。所述第二处理器可以从所述子命令队列中获取所述第一IO命令。

S703、所述第二处理设备根据所述第一IO命令,向所述计算设备发送指示命令,所述指示命令用于指示所述计算设备搬移数据。

可选地,若第一IO命令为写操作命令,所述第二处理设备根据所述第一IO命令,向所述计算设备发送指示命令,包括:所述第二处理器根据所述第一IO命令,生成第一指示命令,所述第一指示命令用于指示将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存;所述第二处理器向所述计算设备发送所述第一指示命令。

可选地,所述第一指示命令中包括待写入的数据在第一处理器10中的起始地址和数据块长度,还包括待写入的数据在第二处理器的内存中的起始地址。

可选地,所述第二处理器可以向所述计算设备发送多个第一指示命令,每个第一指示命令用于搬移所述第一IO命令对应的部分数据,第一指示命令还可以用于指示搬移其它IO命令对应的部分数据。计算设备可以通过多次操作,将第一IO命令对应的数据从第一处理器的内存搬移至第二处理器的内存中。

可选地,若第一IO命令为读操作命令,所述第二处理设备根据所述第一IO命令,向所述计算设备发送指示命令,包括:所述第二处理器根据所述第一IO命令,生成第二指示命令,所述第二指示命令用于指示所述计算设备将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存中;所述第二处理器向所述计算设备发送所述第一指示命令。

可选地,所述第二指示命令中包括数据在第二处理器的内存中的起始地址和数据长度,还可以包括数据存入到第一处理器的内存中的起始地址和数据长度。

可选地,第二处理器可以向计算设备发送多个第二指示命令,每个第二指示命令指示搬移的数据包括IO命令对应的部分数据,计算设备可以通过多次操作,将数据从第二处理器的内存中搬移到第一处理器的内存中。

S704、所述计算设备基于所述指示命令,通过DMA方式将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,或者通过DMA方式将待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存。

本申请实施例提供了一种计算设备,可以设置于第一处理器和第二处理器之间,能够使用硬件实现第一处理器10的卸载的部分存储管理功能,上述部分存储管理功能包括通过DMA方式在第一处理器的内存和第二处理器的内存之间搬移数据,从而能够减少第一处理器和第二处理器的系统开销。并且计算设备利用硬件实现上述存储管理功能,能够减少软件上的信令交互,从而减少访问数据的IO时延,提高IO速度和提供稳定的IO性能。

在本申请实施例中,在写数据过程中,计算设备从第一处理器的内存获取数据,并缓存在第二处理器的内存中,第一处理器和计算设备之间的带宽不会成为系统瓶颈,计算设备不需要外挂内存,从而节省内存成本,减少硬件面积。

在本申请实施例中,在读数据过程中,计算设备从第二处理器的内存获取数据,并缓存在第一处理器的内存中,第一处理器和计算设备之间的带宽不会成为系统瓶颈,计算设备不需要外挂内存,从而节省内存成本,减少硬件面积。

在本申请实施例中,计算设备50对获取的IO命令进行QoS管理。可选地,QoS管理包括将IO命令分配到对应的卷队列,QoS管理还包括从卷队列中选择待处理的IO命令,并将选择的IO命令写入子命令队列中,以便于第二处理器20处理子命令队列中的IO命令。作为一个具体示例,IO命令中可以包括卷标识,计算设备根据IO命令的卷标识,将IO命令分配至对应的卷队列中,并将该IO命令的信息组织为IO控制信息块,存储在第二处理器20的内存中。可选地,IO命令的信息可包括以下信息中的至少一项:卷标识、数据块有效长度、读指示信息或写指示信息、源数据块的地址信息、是否需要加解密的信息。

在本申请实施例中,计算设备可以对从第一处理器接收到的IO命令进行QoS管理,例如将IO命令划分至不同的卷队列中,或者从卷队列中选择IO命令,分配至子命令队列中。从而可以卸载第一处理器或第二处理器的部分存储管理功能,从而减少了第一处理器和第二处理器的系统开销,提高了访问数据的IO存储管理性能和效率。

可选地,所述计算设备基于所述指示命令,通过DMA方式将待写入的数据从所述第一处理器的内存搬移至所述第二处理器的内存中,包括:所述计算设备根据所述第一指示命令,通过DMA方式从所述第一处理器的内存中读取数据块;所述计算设备计算所述读取的数据块的校验数据块;所述计算设备通过DMA方式将所述读取的数据块及所述校验数据块存入所述第二处理器的内存中。

其中,在具体示例中,所述第一指示命令中可以包括待写入的数据块在第一处理器10中的起始地址和数据块长度,还包括数据块以及校验数据块在第二处理器的内存中的起始地址。

在本申请实施例中,可以在数据块从第一处理器搬移至第二处理器的过程中,实现校验计算,即在计算设备中完成校验计算。因此无需重新将数据从第二处理器的内存中读出以进行校验计算,减少了一次内存拷贝,节约了内存资源,并且简化了访问数据的流程。

作为示例,校验算法可以采用N+M的EC算法。其中,N、M为大于等于1的整数。N+M的EC算法可以指在校验计算中,每N个数据块对应于M个校验数据块。

图10是本申请实施例的EC算法的编解码流程示意图。作为示例,N=3,M=2。即在编码过程中,每3个数据块对应于2个校验数据块。在解码过程中,若小于或等于M个数据块和/或校验块丢失或损坏,则可以利用剩余的数据块和校验数据块修复数据。

图11是传统的存储卸载方案中的EC算法的示意图。如图11所示,在传统的存储卸载方案中,数据块首先从第一处理器的内存搬移到第二处理器的内存中。在数据搬移完成后,第二处理器采用软件的方式对数据块进行EC计算,此时需要将数据重新从第二处理器的内存中读出,再进行EC计算,因此多了一次内存拷贝,占用了内存资源。

图12是本申请一实施例的存储卸载方案中的EC算法的示意图。如图12所示,在本申请实施例中,可以在数据块从第一处理器的内存搬移至第二处理器的内存过程中,实现EC计算,即在计算设备中完成EC计算,因此无需在EC计算中重新将数据从第二处理器的内存中读出,减少了一次内存拷贝,节约了内存资源,并且简化了访问数据的流程。

可选地,所述计算设备可以采用较低成本的FPGA或者ASIC实现,其可以利用硬件,而非软件实现存储功能中的相关算法,从而可以提高算法的效率,降低计算机系统的IO时延,提高计算机系统的IO性能。

可选地,若第一IO命令为写操作命令,在获取第一IO命令之后,方法700还包括:所述第二处理器分解所述第一IO命令,以得到多个第一子IO命令,其中不同子IO命令所请求写入的数据块对应于所述存储池中的不同物理地址;所述第二处理器确定第一条带,所述第一条带中包括所述多个第一子IO命令中的至少一个子IO命令,所述第一条带中还包括至少一个基于其它IO命令分解得到的子IO命令,其中所述第一条带中包括的子IO命令所请求写入的数据块对应于所述存储池中的同一存储设备;所述第二处理器将所述第一条带对应的数据发送至所述存储池中的同一存储设备。

其中,上述每个子IO命令可以用于请求写入一个数据块,每个数据块对应存储池中的一个物理地址。作为示例,一个数据块的大小可以为8千字节(kilobyte,KB)。在分布式存储结构中,存储池中包括多个存储设备(或者称为服务器),每个存储设备中可以包括一个或多个物理硬盘,每个物理硬盘中包括多个物理地址,以用于存储相应的数据块。基于同一IO命令分解的多个子IO命令对应的数据块的物理地址可能位于同一存储设备中,也可能位于不同的存储设备中。而基于不同IO命令分解的不同子IO命令对应的数据块的物理地址可能位于同一存储设备中。因此,第二处理器可以将对应于同一存储设备的多个子IO命令集合在一起,得到条带,并基于条带将数据发送至存储池中的同一存储设备中,以提高访问数据的效率。

上述将对应于同一存储设备的多个子IO命令集合在一个条带中进行数据访问的方式可以称为凑条带。下文中将结合图13继续介绍本申请实施例中的访问数据的方法的凑条带方式。

可选地,若所述第一IO命令为读操作命令,方法700还包括:所述第二处理器根据所述第一IO命令,生成读数据请求命令,所述读数据请求命令用于向所述存储池请求待读取的数据;所述第二处理器向所述存储池发送所述读数据请求命令;所述第二处理器从所述存储池获取待读取的数据。

可选地,所述第二处理器根据所述第一IO命令,生成读数据请求命令,包括:所述第二处理器分解所述第一IO命令,以得到多个第二子IO命令,其中不同子IO命令请求获取的数据块对应于所述存储池中的不同物理地址;所述第二处理器确定第二条带,所述第二条带中包括所述多个第二子IO命令中的至少一个第二子IO命令,所述第二条带中还包括至少一个基于其它IO命令分解得到的子IO命令,其中所述第二条带中的子IO命令所请求获取的数据块对应于所述存储池中的同一存储设备;所述第二处理器根据所述第二条带,生成所述读数据请求命令,所述读数据请求命令用于向所述存储池请求所述第二条带对应的待读取数据。

其中,与写数据流程类似,上述每个子IO命令可以用于读取一个数据块,每个数据块对应存储池中的一个物理地址。在分布式存储结构中,存储池中包括多个存储设备(或者称为服务器),每个存储设备中可以包括一个或多个物理硬盘,每个物理硬盘中包括多个物理地址,以用于存储相应的数据块。基于同一IO命令分解的多个子IO命令对应的数据块的物理地址可能位于同一存设备,也可能位于不同的存储设备中。而基于不同IO命令分解的不同子IO命令对应的数据块的物理地址可能位于同一存储设备中。因此,第二处理器可以将对应于同一存储设备的多个子IO命令集合在一起,得到条带,并基于条带从存储池中读取数据,以提高访问数据的效率。

图13是本申请一实施例的访问数据的方法1300的信令处理流程示意图。如图13所示,该方法1300包括:

S1301、计算设备接收第一处理器发送的IO命令。

例如,第一处理器在提交队列中写入IO命令,计算设备从提交队列中读取IO命令。

S1302、计算设备解析IO命令,将IO命令分配至卷队列中。

例如,计算设备根据IO命令的卷标识,将IO命令分配至相应的卷队列中。并将该IO命令对应的关键信息存储在IO控制信息块中,在卷队列和子命令队列中使用IO命令的标识(或者说,索引)。

S1303、计算设备从卷队列中选择待处理的IO命令,并将该IO命令分配至子命令队列中。

例如,所述子命令队列中的IO命令用于供第二处理器调用。

S1304、第二处理器从子命令队列中获取IO命令,并解析IO命令。

可选地,上述解析IO命令可以包括以下操作:将IO命令分解为多个子IO命令;对子IO命令进行凑条带处理。

在一些示例中,第二处理器获取IO命令之后,可以将IO命令分解为多个子IO命令。每个子IO命令对应一个数据块,每个数据块对应存储池中的一个物理地址,不同数据块对应存储池中的不同的物理地址。其中,存储池中可以包括多个存储设备,每个存储设备中包括一个或多个物理硬盘,每个物理硬盘中包括多个物理地址,以用于存储相应的数据块。

在一些示例中,第二处理器对子IO命令进行凑条带处理,即将对应于同一存储设备的多个子IO命令集合为一个条带。一个条带内的子IO命令可以来自不同的IO命令,一个条带可以对应于一条消息或者报文。作为示例,一个条带中可以包括32个子IO命令。在写操作流程中,第二处理器可以将一个条带中的子IO命令对应的数据块作为一个报文,通过网卡发送至存储池中。在读操作流程中,第二处理器可以将一个条带中的子IO命令作为一个集合,向存储池发送读数据请求命令,以请求读取一个条带中的子IO命令对应的数据块。

S1305、第二处理器向计算设备发送指示命令,以指示计算设备搬移数据。

例如,在写操作流程中,所述第二处理器根据所述第一IO命令,生成第一指示命令,所述第一指示命令用于指示将数据从所述第一处理器的内存搬移至所述第二处理器的内存;所述第二处理器向所述计算设备发送所述第一指示命令。

又例如,在读操作流程中,所述第二处理器根据所述第一IO命令,生成读数据请求命令,所述读数据请求命令用于向所述存储池请求待读取的数据;所述第二处理器通过网卡向存储池发送所述读数据请求命令;所述第二处理器通过网卡从所述存储池获取所述待读取的数据;在获取待读取的数据之后,第二处理器向所述计算设备发送第二指示命令,所述第二指示命令用于指示所述计算设备将所述待读取的数据从所述第二处理器的内存搬移至所述第一处理器的内存中。

S1306、计算设备根据所述指示命令,通过DMA方式执行数据搬移。

例如,计算设备中的DMA模块可以用于执行所述数据搬移。

例如,在写操作流程中,计算设备根据第一指示命令,通过DMA方式从所述第一处理器的内存中读取数据块;所述计算设备计算所述读取的数据块的校验数据块;所述计算设备通过DMA方式将所述读取的数据块及所述校验数据块存入所述第二处理器的内存中。然后第二处理器通过网卡将数据块即校验数据块发送至存储池,写操作过程完成。

又例如,在读操作流程中,计算设备根据第二指示命令,通过DMA方式将数据从第二处理器的内存中搬移到第一处理器的内存中,读操作过程完成。

在本申请实施例中,为计算机系统提供了匹配的信令流程,以便于计算设备实现第一处理器的卸载的部分存储管理功能,从而能够提高计算机系统访问数据的效率。

下文将结合图14至图17,继续描述计算设备执行写操作方法和读操作方法的具体流程。

图14是本申请一实施例的写操作方法1400的流程示意图。写操作流程包括两个阶段。在第一阶段中,计算设备将数据块从第一处理器的内存中取出,计算校验位,并将数据块和校验数据块块缓存在第二处理器的内存中。在第二阶段中,第二处理器进行凑分条和组织报文头,并通过网卡将报文发至存储池中,以完成写数据操作。其中,S1401~S1410描述了第一阶段的处理流程,S1410~S1413描述了第二阶段的处理流程。该方法1400的描述如下。

S1401、第一处理器生成IO命令,所述IO命令为写操作命令。

S1402、计算设备获取IO命令。

S1403、计算设备将IO命令分配到卷队列中。

S1404、计算设备从卷队列中选择IO命令,以加入子命令队列中。

S1405、第二处理器从子命令队列中获取IO命令。

为了简洁,S1401-S1405中的具体内容,可以参见图7至图12中的具体描述,此处不再赘述。

S1406、第二处理器根据IO命令,生成第一指示命令,所述第一指示命令用于指示将数据块从所述第一处理器的内存搬移至所述第二处理器的内存。

可选地,在写操作流程中,第二处理器可以对子IO命令进行凑条带和凑分条,并根据凑条带和凑分条的结果,生成所述第一指示命令。其中,一个条带对应一个消息或报文,一个分条中的子IO命令对应的数据块用于一次EC计算。

图15是本申请一实施例的子IO命令的凑分条的示意图。计算设备可以根据子IO命令的凑分条结果,进行N+M的EC计算。作为示例,在图15中,N=3,M=2。EC计算中的每个分条对应每行的N个子IO命令,N个子IO命令对应的数据块可以用于一次EC计算,并生成M个校验数据块。对于N+M的EC算法,可以将数据块按照一定的规律填充到N个队列中,该N个队列可以为图15中的N0、N1、N2。然后采用EC算法计算出M个队列的校验数据块,M个队列可以为图15中的M0、M1。

在纵向上,上述N个队列中的每个队列可称为一个条带,多个子IO命令凑成一个条带,每个队列对应一个消息或报文。作为示例,每个条带包括32个子IO命令,换句话说,每凑齐32个子IO命令对应的数据块,就可以组成一个报文并发送。上述M个队列中的每个队列在凑齐相应的校验数据块之后,也可以组成一个报文并发送。

S1407、计算设备接收来自第二处理器的第一指示命令。

作为具体示例,计算设备和第二处理器之间可以通过命令队列的方式传输第一指示命令。第二处理器将第一指示命令写入命令队列,计算设备从该命令队列中取出命令,并进行解析处理。

可选地,第一指示命令中包括数据块在第一处理器的内存中的地址信息,该地址信息可包括起始地址和数据块长度。第一指示命令还包括数据块和校验数据块在第二处理器的内存中的地址信息,该地址信息可包括起始地址和数据长度。

可选地,第二处理器可以根据凑分条的结果生成第一指示命令。所述第一指示命令指示搬移的数据块可以包括每个分条对应的N个子IO命令对应的数据块。计算设备可以在读取N个数据块之后,进行EC计算,得到M个校验数据块。

可选地,所述第二处理器可以向所述计算设备发送多个第一指示命令,每个第一指示命令用于搬移所述第一IO命令对应的部分数据,第一指示命令还可以用于指示搬移其它IO命令对应的数据。计算设备可以通过多次操作,将第一IO命令对应的数据从第一处理器的内存搬移至第二处理器的内存中。

S1408、计算设备根据第一指示命令,从第一处理器的内存中读取数据块。

作为具体示例,第一指示命令中包括数据块在第一处理器的内存中的地址信息,计算设备可根据第一指示命令,从第一处理器的内存中读出数据块。

S1409、计算设备对读出的数据块进行校验计算,得到校验数据块。

作为具体示例,计算设备可根据图15中的凑分条结果,计算得到校验数据块。

S1410、计算设备将数据块以及校验数据块存储在第二处理器的内存中。

作为具体示例,第一指示命令中还包括数据块和校验数据块在第二处理器的内存中的地址信息,计算设备可以将数据块和校验数据块存储在第二处理器的内存中的指定位置。

S1411、第二处理器根据凑条带的结果生成报文。

例如,第二处理器可以根据S1406中凑条带的结果,在凑齐一个条带中的数据块之后,组成报文并发送,该报文可通过网卡发送至存储池。

图16是本申请一实施例的数据块的凑分条的示意图。如图16所示,第二处理器在获取数据块和校验数据块之后,可以将每个条带对应的数据块或校验数据块组成报文。并在报文中增加消息头,消息头可以包括控制信息。例如,各个报文可以表示为MSG 0、MSG1、MSG 2、MSG 3、MSG 4。第二处理器可以通过网卡将报文发送至存储池。其中,在分布式存储系统中,每个条带对应的报文可以发送至存储池中的不同的目的地。

S1412、第二处理器指示网卡发送报文。

作为具体示例,第二处理器可以在提交队列中写入报文对应的工作队列条目(work queue entry,WQE),并通知网卡读取工作队列条目。该提交队列可以位于第二处理器的内存中。可选地,WQE用于指示报文对应的数据在第二处理器的内存中的地址信息,该地址信息可以包括起始地址、数据长度等信息。

S1413、网卡从第二处理器的内存中读取报文,并将报文发送至存储池。

作为具体示例,网卡在读取相应的工作队列条目之后,可以根据工作队列条目中的地址信息,从第二处理器的内存中读取报文,并将报文发送至存储池。

图17是本申请一实施例的读数据操作的方法1700流程示意图。如图17所示,读数据操作通常包括两个阶段。在第一阶段,第二处理器通过网卡接收存储池发送的数据块,并存储在第二处理器的内存中。在第二阶段,第二处理器向计算设备发送第二指示命令,计算设备将数据块从第二处理器的内存搬移到第一处理器的内存中。其中,S1701~S1709描述了第一阶段,S1710~S1714描述了第二阶段。

S1701、第一处理器生成IO命令,所述IO命令为读数据命令。

S1702、计算设备获取IO命令。

S1703、计算设备将IO命令分配到卷队列中。

S1704、计算设备从卷队列中选择IO命令,以加入子命令队列中。

S1705、第二处理器从子命令队列中获取IO命令。

为了简洁,S1701-S1705中的具体内容,可以参见图7中的具体描述,此处不再赘述。

S1706、第二处理器根据IO命令,生成读数据请求命令,读数据请求命令用于向存储池请求待读取的数据。

可选地,在读数据过程中,第二处理器在获取IO命令之后,可以将IO命令分解为多个子IO命令,并对子IO命令进行凑条带处理,并根据凑条带的结果,生成读数据请求命令。其中,一个条带中的多个子IO命令可以对应于存储池中的同一存储设备中的数据。读数据请求命令可以用于请求读取一个条带对应的数据。

S1707、第二处理器向网卡发送读数据请求命令。

S1708、网卡从存储池接收数据,并将数据存入第二处理器的内存中。

可选地,第二处理器可以向网卡发送为数据在第二处理器的内存中预备的内存空间的地址信息,该地址信息可以包括数据的起始地址和数据长度。网卡在接收到数据之后,可以将数据搬移至第二处理器的内存中的相应空间。

S1709、网卡通知第二处理器已接收存储池发送的数据。

作为具体示例,网卡以在第一完成队列中添加完成条目的方式通知第二处理器已完成数据的接收。网卡在添加完成条目之后,向第二处理器发送中断信号。第二处理器在接收到中断信号之后,可通过查询第一完成队列,确定第二处理器的内存已接收待读入的数据。其中,第一完成队列可以指用于记录完成读数据请求命令的队列。

S1710、计算设备获取第二处理器生成的第二指示命令,该第二指示命令用于指示计算设备将数据从第二处理器的内存中搬移到第一处理器的内存中。

作为具体示例,该第二指示命令中包括数据在第二处理器的内存中的地址信息,例如起始地址和数据长度。该第二指示命令还包括该数据存入到第一处理器的内存中的地址信息,例如包括起始地址和数据长度。

S1711、计算设备根据第二指示命令,将数据从第二处理器的内存搬移到第一处理器的内存中。

可选地,第二处理器可以向计算设备发送多个第二指示命令,每个第二指示命令搬移的数据包括IO命令对应的部分数据,计算设备可以通过多次操作,将数据从第二处理器的内存中搬移到第一处理器的内存中。

S1712、计算设备通知第二处理器已完成第二指示命令指示搬移的数据。

可选地,计算设备完成第二指示命令之后,可以在第二完成队列中添加完成条目,以通知第二处理器完成第二指示命令对应的数据搬移。计算设备在添加完成条目之后,向第二处理器发送中断信号。第二处理器在接收到中断信号之后,可通过查询第二完成队列,确定第二指示命令完成。

S1713、第二处理器向计算设备发送读操作完成命令,以指示计算设备已完成该IO命令对应的读操作。

作为具体示例,第二处理器可以根据计算设备写入第二完成队列中的完成条目,判断计算设备是否完成IO命令对应的所有数据块的搬移。若已经完成,则确定该IO命令对应的读操作完成。

作为具体示例,该读操作完成命令包括IO完成命令在第三完成队列中对应的完成条目。其中,第三完成队列可以位于第二处理器的内存中。第二处理器在确定IO命令对应的数据对应的读操作完成之后,将该IO命令对应的完成条目写入到第三完成队列中,计算设备读取第三完成队列,确定该IO命令对应的读操作完成。

S1714、计算设备向第一处理器发送IO完成命令,该IO完成命令用于指示已完成IO命令对应的读操作。

作为具体示例,该IO完成命令可以包括该IO完成命令在第四完成队列中对应的完成条目,其中第四完成队列可以位于第一处理器的内存中。计算设备确定IO命令对应的读操作完成之后,可以在第四完成队列中写入该IO命令对应的完成条目,第一处理器从该第四完成队列中读取相应的完成条目,从而确定该IO命令对应的读操作已完成。

接下来结合附图,继续介绍本申请实施例中的一种数据缓存系统,在本申请实施例中,该数据缓存系统也可以称为队列环缓存结构,或者极简环结构(extremely simplering interface,ESRI)。作为示例而非限定,本申请实施例中涉及的各个命令队列可以使用本申请实施例中描述的数据缓存系统存储IO命令,例如,上述各个命令队列可包括:图6中的卷队列、子命令队列、完成队列;或者图7中的提交队列、图13中的提交队列;或者图17中的第一完成队列~第四完成队列等。

图18是本申请一实施例的数据缓存系统的结构示意图。如图18所示,该数据缓存系统包括缓存空间、生产者控制单元和消费者控制单元。其中,所述缓存空间用于存储数据,所述生产者控制单元和所述消费者控制单元均可以访问所述缓存空间。所述生产者控制单元用于执行生产者线程,所述消费者控制单元用于执行消费者线程。生产者控制单元和消费者控制单元的功能可以由软件实现。在本申请实施例中,可以将用于向数据缓存系统写入命令的上层软件称为生产者或生产者线程,将用于从数据缓存系统读取命令的上层软件称为消费者或消费者线程。

在一些示例中,若生产者线程和消费者线程由不同的处理设备执行,则所述生产者控制单元和所述消费者控制单元可以位于不同的处理设备中。例如,可以由图5中的第一处理器10执行生产者控制单元的功能,由图5中的计算设备50执行消费者控制单元的功能。可选地,若生产者线程和消费者线程由同一处理器执行,则所述生产者控制单元和消费者控制单元的功能可以由同一处理设备执行。

图19是本申请一实施例的数据缓存系统的工作状态示意图。如图19所示,该数据缓存系统包括缓存空间,所述缓存空间包括K个地址范围,所述K个地址范围分别用于存储K个条目,所述每个条目包括拥有者标志位,所述拥有者标志位用于指示所述每个条目内是否存储有数据。K为大于0的整数,作为示例,图19中的K=16。其中,所述拥有者标志位用于记录存储标识或空闲标识,所述存储标识用于指示对应的条目内存储有数据,所述空闲标识用于指示对应的条目内未存储数据。

需要说明的是,在本申请实施例中,每个条目中存储的数据可以为命令,例如IO命令,或者也可以为除命令之外的其它类型的数据。

作为示例,图20是本申请一实施例的数据缓存系统中的条目的结构示意图。如图20所示,条目包括两个域段,分别为拥有者(ownership)标志位和命令(command)。其中,ownership可以是生产者和消费者通信的标志。例如,上层软件每向数据缓存系统中的条目中写入一个命令,可以将该条目的拥有者标志位设置为1,1表示该条目中存储有命令。或者也可以将拥有者标志位的赋值设置为0,0表示该条目中未存储有命令。上层软件在读取命令时,可以根据拥有者标志位的赋值,判断该条目中是否存储有命令。可选地,图20中的命令域段也可以被数据(data)域段替代。

继续参见图19,所述数据缓存系统使用生产者指针(producer indicator,PI)和消费者指针(consumer indicator,CI)维护缓存空间,所述生产者指针用于指向所述K个地址范围中的下一个写入数据的地址范围,所述消费者指针用于指向所述K个地址范围中的下一个读取数据的地址范围。在本申请实施例中,写入数据可以指在条目中写入数据,读取数据可以指读取条目中的数据。

其中,所述数据缓存系统可以分别维护所述生产者指针对应的寄存器和所述消费者指针对应的寄存器。在一些示例中,若生产者线程和消费者线程由不同的处理设备执行,则所述生产者指针和所述消费者指针可以由不同的处理设备维护。例如,对于图7中的提交队列,可以由图5中的第一处理器10维护生产者指针,由计算设备50维护消费者指针。或者对于图6中的子命令队列,可以由图5中的计算设备50维护生产者指针,由第二处理器20维护消费者指针。可选地,若生产者线程和消费者线程由同一处理设备执行,则所述生产者指针和消费者指针可以由同一处理设备维护。例如,对于图6中的卷队列,可以由所述计算设备50维护其生产者指针和消费者指针。

可选地,所述生产者控制单元被配置为执行以下操作:确定所述生产者指针指示的第一地址范围;在所述第一地址范围中写入数据,并将所述第一地址范围中的第一拥有者标志位更新为所述存储标识。

可选地,所述消费者控制单元被配置为执行以下操作:确定所述消费者指针指示的第二地址范围;根据所述第二拥有者标志位,确定是否从所述第二地址范围中读取数据。

例如,在所述第二地址范围中的第二拥有者标志位记录为所述存储标识的情况下,从所述第二地址范围中读取数据;在所述第二拥有者标志位记录为所述空闲标识的情况下,确定所述第二地址范围中未存储有数据。

其中,所述生产者控制单元用于执行生产者线程,所述消费者控制单元用于执行消费者线程。生产者控制单元和消费者控制单元的功能可以由软件实现。在一些示例中,若生产者线程和消费者线程由不同的处理设备执行,则所述生产者控制单元和所述消费者控制单元可以位于不同的处理设备中。例如,对于图7中的提交队列,可以由图5中的第一处理器10执行生产者线程,由计算设备50执行消费者线程。对于图6中的子命令队列,可以由图5中的计算设备50执行生产者线程,由第二处理器20执行消费者线程。可选地,若生产者线程和消费者线程由同一处理器执行,则所述生产者控制单元和消费者控制单元的功能可以由同一处理设备执行。例如,对于图6中的卷队列,可以由所述计算设备50执行其生产者线程和消费者线程。

在本申请实施例中,通过在数据缓存系统中的每个地址范围存储的条目中配置拥有者标志位,以指示对应的条目中是否存储有数据,从而上层软件可以通过读取拥有者标志位的存储标识或空闲标识,以判断条目中是否存储有数据,这种数据缓存系统可以减少写数据线程和读数据线程之间的交互,甚至允许独立运行写数据线程和读数据线程,从而简化了数据缓存系统的管理流程。

可选地,继续参见图19,所述数据缓存系统还包括生产者环(producer loop,PLoop)寄存器,用于存储生产者环标志位,所述生产者环标志位用于记录所述生产者指针指示所述K个地址范围的循环次数为奇数次或偶数次。例如,可以设置PLoop=0表示奇数次,PLoop=1表示偶数次。或者,也可以设置PLoop=1表示奇数次,PLoop=0表示偶数次。

所述生产者控制单元被配置为具体执行以下操作:确定所述生产者环标志位指示的循环次数为奇数次;在所述第一地址范围中写入数据,并将所述第一地址范围中的第一拥有者标志位从第二值更新为第一值;或者,所述生产者控制单元被配置为具体执行以下操作:确定所述生产者环标志位指示的循环次数为偶数次;在所述第一地址范围中写入数据,并将所述第一地址范围中的第一拥有者标志位从所述第一值更新为所述第二值。

应理解,针对生产者指针指示的地址范围中的拥有者标志位,在所述生产者环标志位指示的循环次数为奇数次时,所述第一值表示存储标识,所述第二值表示空闲标识。在所述生产者环标志位指示的循环次数为偶数次时,所述第二值表示存储标识,所述第一值表示空闲标识。

可选地,本申请实施例对第一值和第二值的具体取值不作限定,只要其能分别表示存储标识和空闲标识即可。可选地,第一值和第二值均可以采用二进制数表示。例如,所述第一值=1,所述第二值=0;或者,所述第一值=0,所述第二值=1。

其中,所述拥有者标志位的赋值是根据所述生产者环标志位的赋值确定的。根据所述生产者指针的循环次数为奇数次或偶数次,所述拥有者标志位的赋值的含义不同。因此,上层软件在数据缓存系统中的条目中写入数据时,可以根据PLoop的当前赋值,确定该条目的拥有者标志位的赋值。从而便于上层软件在读取数据时确定拥有者标志位的赋值所指示的含义是存储有数据或者未存储有数据。

在本申请实施例中,上层软件根据生产者指针的循环次数的奇偶性,来确定存储标识对应的拥有者标志位的赋值,以便于上层软件在读取数据时可以根据消费者指针的循环次数的奇偶性以及拥有者标志位的赋值确定该条目中是否存储有数据,这种数据缓存系统可以减少写数据线程和读数据线程之间的交互,甚至允许独立运行写数据线程和读数据线程,从而简化了数据缓存系统的管理流程。

继续参见图19,所述数据缓存系统还包括消费者环(consumer loop,CLoop)寄存器,用于存储消费者环标志位,以记录所述生产者指针指示所述K个地址范围的循环次数为奇数次或偶数次。例如,可以设置CLoop=0表示奇数次,CLoop=1表示偶数次。或者,也可以设置CLoop=1表示奇数次,CLoop=0表示偶数次。

所述消费者控制单元被配置为具体执行以下操作:所述在所述第二地址范围中的第二拥有者标志位记录为所述存储标识的情况下,从所述第二地址范围中读取数据,包括:确定所述消费者环标志位指示的循环次数为奇数次;在所述第二拥有者标志位记录为所述第一值的情况下,从所述第二地址范围中读取数据;或者,所述消费者控制单元被配置具体执行以下操作:确定所述消费者环标志位指示的循环次数为偶数次;在所述第二拥有者标志位的赋值为所述第二值的情况下,从所述第二地址范围中读取数据。

可选地,所述第一值=1,所述第二值=0;或者,所述第一值=0,所述第二值=1。

在本申请实施例中,上层软件根据消费者环寄存器记录的消费者指针的循环次数的奇偶性,确定消费者指针指示的条目中的拥有者标志位的赋值指示的为存储标识或空闲标识,进而判断条目中是否存储有数据,这种数据缓存系统的定义方式可以减少生产者线程和消费者线程之间的交互,甚至可以独立地运行写数据线程和读数据线程,从而简化了数据缓存系统的管理流程。

例如,当生产者指针循环次数为奇数次时,PLoop=0,所述数据缓存系统在所述生产者指针指向的地址范围写入命令时,将拥有者标志位的赋值配置为1,1表示该拥有者标志位对应的条目中存储有命令,0表示该拥有者标志位对应的条目内未存储有命令。当生产者指针循环次数为偶数次时,PLoop=1,所述数据缓存系统在所述生产者指针指向的地址范围中写入命令时,将拥有者标志位的赋值配置为0,0表示该拥有者标志位对应的条目中存储有命令,1表示该拥有者标志位对应的条目中未存储有命令。

可选地,消费者指针在读取命令时根据消费者环标志位的赋值确定当前拥有者标志的的赋值的含义。例如,当消费者指针的循环次数为奇数次时,CLoop=0,在根据消费者指针读取命令时,若所述拥有者标志位的赋值配置为1,则表示所述条目中存储有命令,上层软件可以读取命令;若拥有者标志位的赋值配置为0,则表示所述条目中未存储有命令,上层软件不读取命令。当消费者指针的循环次数为偶数次时,CLoop=1,在根据消费者指针读取命令时,若所述拥有者标志位的赋值配置为0,则表示所述条目中存储有命令,上层软件可以读取命令;若拥有者标志位的赋值配置为1,则表示所述条目中未存储有命令,上层软件不读取命令。

可选地,本申请实施例中的数据缓存系统包括的地址范围的数量K可以为2

在一些示例中,数据缓存系统可以由生产者和消费者管理。其中,生产者可以指为对条目进行写操作的上层软件模块,消费者可以指为对条目进行读操作的上层软件模块。生产者用于维护生产者指针,用于表示已经生产的位置,生产者还用于维护生产者环标志位,表示生产了一个轮次的条目。消费者还用于维护一个消费者指针,表示读取下一个条目的位置。消费者还维护消费者环标志位,表示消费了一个轮次的条目。在本申请实施例中,生产条目指在数据缓存系统中写入条目中的命令,消费条目指在数据缓存系统中读取条目中的命令。

在本申请实施例中,可以由上层软件确保数据缓存系统不会发生上溢,例如,生产者可以确保最多K个命令发送给数据缓存系统,因此PI永远不会超过CI,不会出现上溢的情况。因此数据缓存系统中可以不设置指示满状态的寄存器和指示空状态的寄存器。其中满状态是指数据缓存系统中未被读取的条目的数量已经达到K个,空状态是指数据缓存系统中写入命令的条目的数量为0。这种数据缓存系统的定义方式可以简化数据缓存系统的管理流程。

图21是本申请一实施例的数据缓存系统的工作状态示意图。图21示出了生产者指针循环从第一轮到第二轮的过程。其中,可以将向数据缓存系统写入命令称为生产命令或生产条目,将从数据缓存系统读取命令称为消费命令或消费条目。如图21所示,系统初始化时,PI=0,CI=0,PLoop=0,CLoop=0,所有条目的ownership=0,表示条目中的命令未被生产。在生产第一个条目时,以PI=0为索引地址,将条目中的ownership域段设置为1,将command域段设置为命令0(command 0),表示PI=0的条目已生产出来。然后将PI的值更新为PI=PI+1,即PI=1,以指向下一个待生产的条目。PI根据这种方式一直生产条目,在PI=K-1之后,PI的下一个取值为PI=0。此时PLoop的值由0改变为1,表示生产者指针已经完成第一轮的生产,而PI返回到初始值0。

图22是本申请又一实施例的数据缓存系统的工作状态示意图。图22示出了消费者指针循环从第一轮到第二轮的过程。如图22所示,在第一个轮次中,消费者在CLoop=0时,以CI值为索引,检查条目中的ownership值,如果ownership=1,则表示该条目的命令已经被生产出来,消费者以CI为索引,读取条目中对应的命令。若ownership=0,则表示该条目的命令未被生产出来。

随着消费者不断地消费条目中的命令,CI值不断增加,数据缓存系统中的待处理命令的个数已经低于最大值K,生产者可以继续生产。此时生产者开始第二轮次的生产,PLoop=1。生产者生产出一个新的命令后,将对应的ownership的取值改变,即将ownership的取值从1改变为0,表示第二轮次的条目已经生产出来。

当消费者消费完第一个轮次中的K个条目之后,CI的取值返回到初始值0,CLoop的值由0变为1,表示消费者已消费完第一个轮次的条目。在第二个轮次中,消费者需要判断ownership值是否为0,ownership=0表示该条目已被生产出来,而ownership=1表示该条目未被生产出来。

由此可见,生产者和消费者各自拥有环寄存器(PLoop和CLoop),来表明ownership值的含义。例如,当PLoop(或者CLoop)的取值为0时,表示生产者(或者消费者)循环次数为奇数次,ownership=1表示该条目已被生产出来,可以消费。而当PLoop(或者CLoop)的取值为1时,表示生产者(或者消费者)的循环次数为偶数次,ownership=0表示该条目已被生产出来,可以消费。

在本申请实施例中,通过生产者环寄存器和消费者环寄存器来记录生产者指针和消费者指针的循环次数状态,以便于上层软件通过读取生产者环寄存器和消费者环寄存器的赋值,来确定条目中的拥有者标志位的赋值含义,进而判断条目中是否存储有命令,这种数据缓存系统的定义方式可以减少生产者线程和消费者线程之间的交互,从而简化了数据缓存系统的管理流程。

继续参见图21,在PLoop=1,Cloop=0的情况下,数据缓存系统中已经存满K个命令,而消费者还没有消费任何条目,数据缓存系统中的命令数目已达到系统的命令上限。在本申请实施例中,为了避免数据缓存系统溢出,可以通过上层软件进行设计,保证生产者在命令数据达到上限的情况下,不会继续更新命令。其中,上述对上层软件进行设计的方式可以具体参见图23中的描述。

图23是本申请又一实施例的应用场景的示意图。图23示出了一种计算机系统,其包括主处理器101和加速器102。主处理器101和加速器201可以为相同类型的处理器,也可以为不同类型的处理器。作为示例,主处理器101可以是CPU,加速器201可以包括FPGA、ASIC等。例如,主处理器101可以为图5中的第一处理器10,加速器201可以为图5中的计算设备50。

在处理IO命令的过程中,主处理器101和加速器102之间可以维护两个数据缓存系统,一个用于缓存命令队列,另一个用于缓存完成队列。对于命令队列来说,主处理器101为生产者,加速器201为消费者。主处理器101用于在命令队列中写入命令,加速器201用于从命令队列中读取命令。对于完成队列来说,加速器201为生产者,主处理器101为消费者。具体地,加速器201在读取命令之后,可以对命令进行处理,并且在完成命令之后,向完成队列中写入已完成的命令,主处理器101可以从完成队列中读取命令以获知当前已完成的命令。主控制器可以控制缓存在命令队列中的命令的数目,并在通过完成队列每接收一个命令的完成消息之后,再向命令队列发送一条新的命令,保证在线的命令的数量不超过上限。

例如,假设命令队列存储命令数目的上限为256条。则主处理器101可以首先向命令队列中写入256条命令。然后主处理器101被限定不再向命令队列发送新的命令。当加速器201完成一个命令之后,可以向完成队列中写入该命令的完成条目。主处理器101可以通过读取完成队列中的完成条目,来获知该命令已完成。其中,该命令的完成条目可以理解为该命令的完成消息。因此主处理器101可以向命令队列中发送一条新的命令。在后续过程中,主处理器101每接收到一条命令的完成消息之后,就可以向命令队列中发出一条新的命令,直至没有新的命令产生。这种上层软件设计方式可以保证命令队列中的命令数目小于或等于256条,从而避免数据缓存系统中发生命令溢出的情况。

在本申请实施例中,计算机系统可以通过上层软件确保数据缓存系统不会发生上溢,因此数据缓存系统中可以不设置指示满状态的寄存器和指示空状态的寄存器,这种数据缓存系统的定义方式可以简化数据缓存系统的管理流程。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

技术分类

06120112707638