首页> 中国专利> 软硬件协同实现远端内存访问的方法和装置

软硬件协同实现远端内存访问的方法和装置

摘要

本申请实施例提供了软硬件协同实现远端内存访问的方法和装置,其特征在于,该方法包括以下步骤:读取第一内存模块中的第一任务报告,向第一硬件网卡发送乱序接收指令;根据第一SEND数据包对应的数据包序列号,判断第一SEND数据包是否存在数据传输异常的情况;若判断为否,则根据第一SEND数据包,生成至少一个第一READ任务书,并将至少一个第一READ任务书保存至第一内存模块。可以看出,本申请实施例通过将数据拆分、丢包检测等功能转移至驱动软件,有助于减轻网卡硬件的工作强度,从而有助于网卡应对快速变化的网络流量模式,实现了选择性重传和乱序接收,显著提高丢包恢复的效率。

著录项

  • 公开/公告号CN115982090A

    专利类型发明专利

  • 公开/公告日2023-04-18

    原文格式PDF

  • 申请/专利权人 珠海星云智联科技有限公司;

    申请/专利号CN202310257790.0

  • 发明设计人 盛曦;黎立印;

    申请日2023-03-17

  • 分类号G06F15/173(2006.01);H04L43/0829(2022.01);H04L49/9057(2022.01);

  • 代理机构广州三环专利商标代理有限公司 44202;

  • 代理人陈舟苗

  • 地址 519000 广东省珠海市横琴新区宝华路6号105室-74030

  • 入库时间 2023-06-19 19:20:08

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-06-23

    授权

    发明专利权授予

  • 2023-05-05

    实质审查的生效 IPC(主分类):G06F15/173 专利申请号:2023102577900 申请日:20230317

    实质审查的生效

  • 2023-04-18

    公开

    发明专利申请公布

说明书

技术领域

本申请涉及互联网领域,尤其涉及软硬件协同实现远端内存访问的方法和装置。

背景技术

目前,RDMA网卡均遵从IB网络层协议,硬件设计为面向连接,主要的复杂性都集中在硬件实现,硬件支持SEND、WRITE、READ和ATOMIC等操作,数据包发送及接收、接收数据包后的乱序检查、异常流程处理、拥塞控制、队列调度、超时检测、MR校验、重传等复杂功能都是由硬件独立完成。在数据中心领域行业标准RDMA(远程直接内存访问)是从超级计算机环境演变而来,商业数据中心通过交换机强制的无损链路级流控制来满足RDMA需求的低延迟、可靠、有序的网络。有实验表明,当丢包率达到1%时,目前的RDMA网卡会不断进行Go-back-N重传,从而导致无法正常工作。不协调的大规模分布式应用程序共享公共基础设施所对应的多样化、时变的应用程序组合,会导致网络流量模式的快速变化,使得在商业数据中心部署RDMA成为一种挑战。这些挑战根源于标准RDMA的基本设计属性是面向连接的,并且将复杂的策略嵌入到硬件中,从而容易导致硬件工作负荷过大,无法更好地应对数据包丢包等故障。

因此,如何提供一种在保证数据包传输安全和效率的同时,降低数据传输硬件工作负荷的方法,是本领域技术人员急需解决的问题。

发明内容

本申请实施例提供了一种软硬件协同实现远端内存访问的方法和装置,通过将丢包检测、数据拆分等功能转移至网卡驱动软件,有助于减轻网卡硬件的工作负担,从而使得网卡能够适应多样化、时变的应用程序组合,以及快速变化的网络流量模式。而且本申请实施例方法还有助于提高数据传输丢包恢复的效率,从而有效缓解多打一场景的Incast现象。

第一方面,本申请实施例提供了一种软硬件协同实现远端内存访问的方法,该方法应用于响应终端的第一驱动软件,该响应终端可以包括第一内存模块、第一网卡硬件和第一驱动软件,该方法可以包括以下步骤:

读取第一内存模块中的第一任务报告,向第一网卡硬件发送乱序接收指令,该第一任务报告由第一网卡硬件根据第一SEND数据包生成,第一SEND数据包由请求终端发送,第一任务报告可以包括所述第一SEND数据包的SRTH报文头信息和数据包序列号,SRTH报文头可以包括第一SEND数据包对应的有效负载地址、数据长度和访问密钥;

根据第一SEND数据包的数据包序列号,在第一内存模块中按数据包序列号由小至大的顺序排列第一SEND数据包;

根据第一SEND数据包对应的数据包序列号,判断第一SEND数据包是否存在数据传输异常的情况,数据传输异常的情况可以包括丢包;

若判断为否,则根据所述第一SEND数据包,生成至少一个第一READ任务书,并将至少一个第一READ任务书保存至第一内存模块。

在一种可能的实施方式中,在根据第一SEND数据包对应的数据包序列号,判断第一SEND数据包是否存在数据传输异常的情况之后,还可以包括以下步骤:

若判断为是,则生成第一NAK任务书,并将第一NAK任务书保存至第一内存模块,该第一NAK任务书可以用于表示第一SEND数据包存在数据传输异常的情况,该第一NAK任务书可以包括缺失的第一SEND数据包的数据包序列号。

在另一种可能的实施方式中,在根据所述第一SEND数据包,生成至少一个第一READ任务书,并将至少一个第一READ任务书保存至第一内存模块之后,还可以包括以下步骤:

在接收到请求终端发送的至少一个第一RESP数据包之后,从第一内存模块读取第二任务报告,该第二任务报告由第一网卡硬件根据至少一个第一RESP数据包生成,该第一RESP数据包为请求终端针对响应终端发送的第一READ数据包生成的响应信息,第二任务报告可以包括第一RESP数据包对应的SRTH报文头信息和数据包序列号,第一READ数据包由第一网卡硬件根据第一READ任务书生成;

根据第一RESP数据包的数据包序列号,判断第一RESP数据包是否存在数据传输异常的情况;

若判断为是,则重新向第一内存模块发送上述的至少一个第一READ任务书。

在另一种可能的实施方式中,在根据所述第一SEND数据包,生成至少一个第一READ任务书,并将所述至少一个第一READ任务书保存至所述第一内存模块之后,还可以包括以下步骤:

若响应终端在预设时长内没有接收到至少一个第一RESP数据包,则确定第一RESP数据包存在数据传输异常的情况;

向第一内存模块发送上述的至少一个第一READ任务书。

第二方面,本申请实施例提供了一种软硬件协同实现远端内存访问的方法,该方法应用于响应终端的第一网卡硬件,该响应终端可以包括第一内存模块、第一驱动软件和第一网卡硬件,该方法可以包括以下步骤:

接收请求终端发送的第一SEND数据包;

根据第一SEND数据包生成第一任务报告,并将第一任务报告保存至第一内存模块,该第一任务报告可以包括第一SEND数据包的SRTH报文头信息和数据包序列号;

响应于第一驱动软件发送的乱序接收指令,乱序接收请求终端发送的第一SEND数据包;

读取第一内存模块中的至少一个第一READ任务书,并根据至少一个第一READ任务书生成对应的至少一个第一READ数据包;

将至少一个第一READ数据包发送至请求终端。

在一种可能的实施方式中,在根据第一SEND数据包生成第一任务报告,并将第一任务报告保存至第一内存模块之后,还可以包括以下步骤:

读取第一内存模块中的第一NAK任务书,并根据第一NAK任务书生成第一NAK数据包,该第一NAK任务书可以用于表示第一SEND数据包存在数据传输异常的情况,该第一NAK任务书可以包括缺失的第一SEND数据包的数据包序列号;

将第一NAK数据包发送至请求终端,该第一NAK数据包可以用于要求请求终端重传缺失的第一SEND数据包。

在另一种可能的实施方式中,在将第一READ数据包发送至请求终端之后,还可以包括以下步骤:

接收请求终端发送的至少一个第一RESP数据包;

根据至少一个第一RESP数据包的SRTH报文头信息,将至少一个第一RESP数据包携带的有效负载保存至对应的内存区域,该内存区域位于第一内存模块中;

根据至少一个第一RESP数据包生成对应的第二任务报告,并将第二任务报告保存至第一内存模块,该第二任务报告可以包括至少一个第一RESP对应的SRTH报文和数据包序列号。

在另一种可能的实施方式中,在将第一READ数据包发送至请求终端之后,还可以包括以下步骤:

若响应终端在预设时长内没有接收到至少一个第一RESP数据包,则读取第一内存模块中的至少一个第一READ任务书;

根据至少一个第一READ任务书,生成对应的至少一个第一READ数据包;

将至少一个第一READ数据包发送至请求终端。

第三方面,本申请实施例提供了一种软硬件协同实现远端内存访问的装置,该装置可以包括:第一内存模块、如第一方面所述的第一驱动软件和如第二方面所述的第一网卡硬件,第一内存模块可以包括第一内存队列和第一有效负载模块;

第一内存模块,可以用于保存第一任务报告,该第一任务报告包括第一SEND数据包的SRTH报文头信息和数据包序列号,该SRTH报文头包括第一SEND数据包对应的有效负载地址、数据长度和访问密钥;

第一内存模块,还可以用于保存至少量第一READ任务书。

第四方面,本申请实施例提供了一种软硬件协同实现远端内存访问的装置,该装置可以包括:处理器、存储器和总线;

处理器和存储器通过总线连接,其中,存储器用于存储一组程序代码,处理器用于调用存储器中存储的程序代码,执行如第一方面和/或第二方面所述的方法。

通过实施本申请实施例方法,能够简化网卡硬件的功能,有效降低网卡硬件的设计难度。同时本申请实施例使得(网卡)驱动软件兼具选择性重传、乱序接收和丢包检测等功能,使得网卡在数据传输过程中能够更加适应多样化、时变的应用程序组合,或网络流量模式的快速变化。更重要的是,在(网卡)驱动软件接管上述功能后,有效地降低了网卡硬件的工作负担,从而能显著提高数据传输丢包的恢复效率,更有助于解决数据传输多打一场景的Incast问题。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种软硬件协同实现远端内存访问的系统的架构示意图;

图2a是本申请实施例提供的一种SATH基础报文头的示意图;

图2b是本申请实施例提供的一种SATH基础报文头的示意图;

图3是本申请实施例提供的一种扩展后的Opcode编码的示意图;

图4a是本申请实施例提供的一种SEND类操作请求对应的数据传输流程的场景示意图;

图4b是本申请实施例提供的一种WRITE类操作请求对应的数据传输流程的场景示意图;

图4c是本申请实施例提供的一种READ类操作请求对应的数据传输流程的场景示意图;

图5是本申请实施例提供的一种软硬件协同实现远端内存访问的方法的流程示意图;

图6是本申请实施例提供的另一种软硬件协同实现远端内存访问的方法的流程示意图;

图7是本申请实施例提供的一种软硬件协同实现远端内存访问的装置的组成示意图;

图8是本申请实施例提供的另一种软硬件协同实现远端内存访问的装置的组成示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结果或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

为了更好地理解本申请实施例技术方案,先对本申请实施例提供的一种软硬件协同实现远端内存访问的系统进行介绍。请参见图1,为本申请实施例提供的一种软硬件协同实现远端内存访问的系统的架构示意图。该系统可以包括响应终端110和请求终端120。示例性的,本申请实施例提及的一种软硬件协同实现远端内存访问的系统可以应用于人工智能领域的存储(或调用)数据的场景,也可以应用于HPC(高性能计算,High PerformanceComputing)存储(或调用)数据的场景。

响应终端110,也可以称为终端设备、接入终端设备、UE单元、UE站、移动站、移动台、远方站、远程终端设备、移动设备、UE终端设备、移动终端、无线通信设备、UE代理或UE装置等。终端可以是固定的或者移动的等。其具体形式可以是手机(mobile phone)、平板电脑(Pad)、带无线收发功能的电脑、可穿戴终端设备等。PC端的终端设备,例如一体机等,其操作系统可以包括但不限于Linux系统、Unix系统、Windows系列系统(例如Windows xp、Windows 7等)、Mac OS X系统(苹果电脑的操作系统)等操作系统。移动端的终端设备,例如智能手机等,其操作系统可以包括但不限于安卓系统、IOS(苹果手机的操作系统)、Window系统等操作系统。其上配置有第一内存模块111、第一驱动软件112和第一网卡硬件113,更多地,第一内存模块111中包括第一内存队列1111和第一有效负载模块1112。

请求终端120,也可以称为终端设备、接入终端设备、UE单元、UE站、移动站、移动台、远方站、远程终端设备、移动设备、UE终端设备、移动终端、无线通信设备、UE代理或UE装置等。终端可以是固定的或者移动的等。其具体形式可以是手机(mobile phone)、平板电脑(Pad)、带无线收发功能的电脑、可穿戴终端设备等。PC端的终端设备,例如一体机等,其操作系统可以包括但不限于Linux系统、Unix系统、Windows系列系统(例如Windows xp、Windows 7等)、Mac OS X系统(苹果电脑的操作系统)等操作系统。移动端的终端设备,例如智能手机等,其操作系统可以包括但不限于安卓系统、IOS(苹果手机的操作系统)、Window系统等操作系统。其上配置有第二内存模块121、第二驱动软件122和第二网卡硬件123,更多地,第二内存模块121中包括第二内存队列1211和第二有效负载模块1212。

需要说明的是,本申请实施例为了获得更高的丢包恢复率和更快的数据传输效率,在标准IB协议规定的报文头格式(如AETH、RETH、AtomicAckETH、IETH、ImmDt等)的基础上增加如图2a所示的SRTH和如图2b所示的SATH两个基础报文头。如图3所示,图3为扩展后的Opcode编码的示意图,新增的报文头可以与标准IB协议的报文头组合成新的报文格式,同时使用BTH.Opcode域段扩展来指示这些新的报文格式。需要说明的是,技术人员可以根据实际情况更换下文实施例举例说明中的SRTH报文头,为了用更加简单的方式向读者解释,本申请实施例方法大都采用了SRTH报文,这点不应对本申请构成限定。需要说明的是,图2a~图3中所提及的SR_SEND(操作请求)与本申请实施例中的第一SEND(操作请求)对应,表示的是请求终端向响应终端发起SEND操作请求;SR_WRITE(操作请求)与本申请实施例中的WRITE(操作请求)对应,表示的是请求终端向响应终端发起WRITE操作请求;SR_READ(操作请求)与本申请实施例中的第三READ(操作请求)对应,表示的是请求终端向响应终端发起READ操作请求;SR2_READ(操作请求)与本申请实施例中的第一READ(操作请求)和/或第二READ(操作请求)对应,表示的是响应终端根据请求终端发送的SR_SEND操作请求(即第一SEND操作请求)和/或SR_WRITE操作请求(即WRITE操作请求),生成的对应的SR2_READ操作请求(即第一READ操作请求和/或第二READ操作请求);SR2_RESP(操作请求)与本申请实施例中的第一RESP(操作请求)和/或第二RESP(操作请求)对应,表示请求终端根据响应终端发送的SR2_READ操作请求(即第一READ操作请求和/或第二READ操作请求),生成的对应的SR2_RESP操作请求(即第一RESP操作请求和/或第二RESP操作请求);SR_RESP(操作请求)与本申请实施例中的第三RESP(操作请求),表示响应终端根据请求终端发送的SR_READ操作请求(即第三READ操作请求),生成的对应的SR_RESP操作请求(即第三RESP操作请求)。

其中,当响应终端110和请求终端120之间传递的是SEND类操作请求时,数据传输流程可以参照图4a,图4a为本申请实施例提供的一种SEND类操作请求对应的数据传输流程的场景示意图。

如图4a所示,首先由请求终端120的第二驱动软件122向第二内存模块121的第二内存队列1211中写入第一SEND任务书,第二网卡硬件123从第二内存队列1211中读取第一SEND任务书,并根据第一SEND任务书生成第一SEND数据包,随后将第一SEND数据包发送至响应终端110的第一网卡硬件113,第一SEND数据包中可以包括对应的SRTH报文头信息和数据包序列号,SRTH报文头可以包括第一SEND数据包对应的有效负载地址、数据长度和访问密钥。

第一网卡硬件113接收第一SEND数据包后,会根据第一SEND数据包中的SRTH报文头信息和数据包序列号生成第一任务报告,并将第一任务报告保存至第一内存模块111的第一内存队列1111。然后响应终端110中的第一驱动软件112会从第一内存队列1111中读取第一任务报告,随后向第一网卡硬件113发送乱序接收指令。响应于乱序接收指令,第一网卡硬件113会直接接收第二网卡硬件123发送的第一SEND数据包,不会在第一内存模块111的缓冲内存中按一定规则排列第一SEND数据包。

在向第一网卡硬件113发送乱序接收指令之后,第一驱动软件112会根据第一SEND数据包对应的第一任务报告,生成至少一个第一READ任务书,并将所述至少一个第一READ任务书保存至第一内存队列1111。第一网卡硬件113从第一内存队列1111读取第一READ任务书后,会生成对应的第一READ数据包,并将该第一READ数据包发送至请求终端120的第二网卡硬件123。

第二网卡硬件123在接收到第一READ数据包后,会根据第一READ数据包对应的SRTH报文头信息和数据包序列号生成第一READ数据包对应的任务报告,并将该第一READ数据包对应的任务报告保存至第二内存队列1211。随后,第二网卡硬件123会根据第一READ数据包对应的任务报告(包含第一READ数据包对应的SRTH报文头信息和数据包序列号),从第二有效负载模块1212中提取对应的第一有效负载,并将该第一有效负载封装成第一RESP数据包发送给第一网卡硬件113。

第一网卡硬件113在接收到第一RESP数据包后,将第一RESP数据包携带的第一有效负载保存至对应的第一内存模块111中的内存地址,该对应的内存地址由第一RESP数据包的SRTH报文头指示。并且第一网卡硬件113在将第一有效负载保存至对应的内存地址之后,会根据第一RESP数据包的SRTH报文头和数据包序列号生成对应的第二任务报告,并将该第二任务报告保存至第一内存队列1111。

更多地,第一驱动软件112在确定第一RESP数据包不存在数据传输异常的情况之后,会生成第一ACK任务书,并将该第一ACK任务书保存至第一内存队列1111,该第一ACK任务书用于表示响应终端110完整地接收了请求终端120发送的第一RESP数据包。需要说明的是,第一RESP数据包也是第一网卡硬件113乱序接收的。

在一种可能的实施方式中,若第一驱动软件112检测到响应终端110没有在预设时间内完整地接收到所有的第一RESP数据包(该检测用于检测第一RESP数据包对应的数据包序列号是否连续,且总数是否与第一READ数据包的总数相同),则会根据响应终端110(或第一内存模块111)中现有的第一RESP数据包的数据包序列号,计算出丢失的第一RESP数据包的数据包序列号。然后重新向第一内存队列1111发送与该丢失的第一RESP数据包的数据包序列号对应的第一READ任务书。第一网卡硬件113在从第一内存队列1111中读取到该与丢失的第一RESP数据包的数据包序列号对应的第一READ任务书之后,会生成对应的第一READ数据包,并将该第一READ数据包发送至第二网卡硬件123。随后,第二网卡硬件123会根据该第一READ数据包所指示的目标内存地址,提取对应的有效负载,然后将该有效负载封装成对应的第一RESP数据包,并将该第一RESP数据包发送至第一网卡硬件113。至此,响应终端110成功获取了与丢失的第一RESP数据包。需要说明的是,在响应终端110向请求终端获取丢失的第一RESP数据的同时,响应终端110还可以继续保持其他数据包的接收或发送操作。

更多地,第一驱动软件112还会对第一SEND数据包进行丢包检测。具体地,第一驱动软件112会根据第一SEND数据包的数据包序列号,按数据包序列号由小至大的顺序排列第一内存模块111的缓冲内存中的第一SEND数据包,若第一SEND数据包不存在如丢包的数据传输异常的情况,则将排列好的第一SEND数据包保存至第一内存模块111的第一有效负载模块1112中。若发现第一SEND数据包存在如丢包的数据传输异常的情况,则生成第一NAK任务书,该第一NAK任务书可以用于表示第一SEND数据包存在数据传输异常的情况,该第一NAK任务书中可以包括缺失的第一SEND数据包的数据包序列号。

更多地,第一网卡硬件113可以从第一内存队列1111中读取第一NAK任务书,并根据第一NAK任务书生成第一NAK数据包,然后将该第一NAK数据包发送给请求终端120的第二网卡硬件123。进一步地,第二网卡硬件123在接收第一NAK数据包之后,会解析出缺失的第一SEND数据包的数据包序列号,再由第二驱动软件生成与该缺失的第一SEND数据包的数据包序列号对应的第一SEND任务书,并将该与缺失的第一SEND数据包的数据包序列号对应的第一SEND任务书保存至第二内存模块121的第二内存队列1211。随后,第二网卡硬件123会从第二内存队列1211中读取上述与缺失的第一SEND数据包的数据包序列号对应的第一SEND任务书,并生成对应的第一SEND数据包,最后将该第一SEND数据包发送至第一网卡硬件113。需要说明的是,在响应终端110向请求终端120获取丢失的第一SEND数据包的同时,响应终端110还可以继续保持其他数据的接收或发送操作。

可能地,请求终端120还可以向响应终端110发送WRITE操作请求(即WRITE数据包)和READ操作请求(即READ数据包),这些操作请求(SEND操作请求、WRITE操作请求和READ操作请求)可以是同时发向响应终端110,也可以是存在时间差地发送。在另一角度,响应终端110可以同时接收并处理请求终端120发送的多种不同的操作请求(或对应的数据包)。但是对于响应终端110来说,请求终端120发送的SEND操作请求和WRITE操作请求的处理优先级是高于READ操作请求的,示例性的,当响应终端110同时接收到请求终端120发送的SEND操作请求(或对应的数据包)和READ操作请求(或对应的数据包),只有当SEND操作请求(或对应的数据包)处理完毕后(即收到了请求终端120发送的RESP类数据包),响应终端110才会开始根据READ操作请求(或对应的数据包)的要求封装对应的有效负载(Payload),然后再将装有该有效负载的数据包发送至请求终端120,进而请求终端120会将该有效负载保存于对应的内存地址。

在一种可能的实施方式中,如图4b所示,当响应终端110与请求终端120之间传递的是WRITE类操作请求时(请求终端120向响应终端110发送WRITE类操作请求),在响应终端110接收到请求终端120发送的WRITE数据包后,不用读取第一内存模块中的RQ信息,直接解析WRITE数据包中的RETH信息即可。具体地,响应终端110与请求终端120之间关于的WRITE类操作请求的数据传输过程可以参照下述流程:

请求终端120的第二驱动软件122向第二内存模块121的第二内存队列1211中写入WRITE任务书,第二网卡硬件123从第二内存队列1211中读取WRITE任务书,并根据WRITE任务书生成WRITE数据包,随后将WRITE数据包发送至响应终端110的第一网卡硬件113,WRITE数据包中可以包括对应的SRTH报文头信息和数据包序列号,SRTH报文头信息可以包括WRITE数据包对应的有效负载地址、数据长度和访问密钥。

第一网卡硬件113在接收WRITE数据包后,会根据WRITE数据包中的SRTH报文头信息和数据包序列号生成第三任务报告,并将第三任务报告保存至第一内存模块111的第一内存队列1111中。然后响应终端110中的第一驱动软件112会从第一内存队列1111中读取第三任务报告,随后向第一网卡硬件113发送乱序接收指令。响应于乱序接收指令,第一网卡硬件113会直接接收第二网卡硬件123发送的WRITE数据包,不会在第一内存模块111的缓冲内存中按一定规则排列WRITE数据包。

在向第一网卡硬件113发送乱序接收指令之后,第一驱动软件112会根据第三任务报告生成至少一个第二READ任务书,并将这至少一个第二READ任务书保存至第一内存队列1111。第一网卡硬件113从第一内存队列1111读取第二READ任务书后,会生成对应的第二READ数据包,并将该第二READ数据包发送至请求终端120的第二网卡硬件123。

第二网卡硬件123在接收到第二READ数据包后,会根据第二READ数据包对应的SRTH报文头信息和数据包序列号生成第二READ数据包对应的任务报告,并将该第二READ数据包对应的任务报告保存至第二内存队列1211。随后,第二网卡硬件123会根据第二READ数据包对应的任务报告(包含第二READ数据包对应的SRTH报文头信息和数据包序列号),从第二有效负载模块1212中提取对应的第二有效负载,并将该第二有效负载封装成第二RESP数据包发送给第一网卡硬件113。

第一网卡硬件113在接收到第二RESP数据包后,将第二RESP数据包携带的第二有效负载保存至对应的第一内存模块111中的内存地址,该对应的内存地址由第二RESP数据包的SRTH报文头指示。并且第一网卡硬件113在将第二有效负载保存至对应的内存地址之后,会根据第二RESP数据包的SRTH报文头和数据包序列号生成对应的第四任务报告,并将该第四任务报告保存至第一内存队列1111。

第一驱动软件112在确定第二RESP数据包不存在数据传输异常的情况之后,会生成第二ACK任务书,并将该第二ACK任务书保存至第一内存队列1111,该第二ACK任务书用于表示响应终端110完整地接收了请求终端120发送的第二RESP数据包。需要说明的是,第二RESP数据包也是第一网卡硬件113乱序接收的。

若第一驱动软件112检测到响应终端110没有在预设时间内完整地接收到所有的第二RESP数据包(该检测用于检测第二RESP数据包对应的数据包序列号是否连续,且总数是否与第二READ数据包的总数相同),则会根据响应终端110(或第一内存模块111)中现有的第二RESP数据包的数据包序列号,计算出丢失的第二RESP数据包的数据包序列号。然后重新向第一内存队列1111发送与该丢失的第二RESP数据包的数据包序列号对应的第二READ任务书。第一网卡硬件113在从第一内存队列1111中读取到该与丢失的第二RESP数据包的数据包序列号对应的第二READ任务书之后,会生成对应的第二READ数据包,并将该第二READ数据包发送至第二网卡硬件123。随后,第二网卡硬件123会根据该第二READ数据包所指示的目标内存地址,提取对应的有效负载,然后将该有效负载封装成对应的第二RESP数据包,并将该第二RESP数据包发送至第一网卡硬件113。至此,响应终端110成功获取了与丢失的第二RESP数据包。需要说明的是,在响应终端110向请求终端120获取丢失的第二RESP数据的同时,响应终端110还可以继续保持其他数据包的接收或发送操作。

更多地,第一驱动软件112还会对WRITE数据包进行丢包检测。具体地,第一驱动软件112会根据WRITE数据包的数据包序列号,按数据包序列号由小至大的顺序排列第一内存模块111的缓冲内存中的WRITE数据包,若WRITE数据包不存在如丢包的数据传输异常的情况,则将排列好的WRITE数据包保存至第一内存模块111的第一有效负载模块1112中。若发现WRITE数据包存在如丢包的数据传输异常的情况,则生成第二NAK任务书,该第二NAK任务书可以用于表示WRITE数据包存在数据传输异常的情况,该第二NAK任务书中可以包括缺失的WRITE数据包的数据包序列号。

更多地,第一网卡硬件113可以从第一内存队列1111中读取第二NAK任务书,并根据第二NAK任务书生成第二NAK数据包,然后将该第二NAK数据包发送给请求终端120的第二网卡硬件123。进一步地,第二网卡硬件123在接收第二NAK数据包之后,会解析出缺失的WRITE数据包的数据包序列号,再由第二驱动软件生成与该缺失的WRITE数据包的数据包序列号对应的WRITE任务书,并将该与缺失的WRITE数据包的数据包序列号对应的WRITE任务书保存至第二内存模块121的第二内存队列1211。随后,第二网卡硬件123会从第二内存队列1211中读取上述与缺失的WRITE数据包的数据包序列号对应的WRITE任务书,并生成对应的WRITE数据包,最后将该WRITE数据包发送至第一网卡硬件113。需要说明的是,在响应终端110向请求终端120获取丢失的WRITE数据包的同时,响应终端110还可以继续保持其他数据的接收或发送操作。

在另一种可能的实施方式中,如图4c所示,当响应终端110与请求终端120之间传递的是READ类操作请求时(请求终端120向响应终端110发送READ类操作请求),其相关数据传输过程可以参照下述流程:

请求终端120的第二驱动软件122向第二内存模块121的第二内存队列1211中写入第三READ任务书,第二网卡硬件123从第二内存队列1211中读取第三READ任务书,并根据第三READ任务书生成第三READ数据包,随后将第三READ数据包发送至响应终端110的第一网卡硬件113,第三READ数据包中可以包括对应的SRTH报文头信息和数据包序列号,SRTH报文头信息可以包括第三READ数据包对应的目标内存地址,该目标内存地址为响应终端110中的内存地址,第三READ操作请求即为请求终端120想获取响应终端110保存于该目标内存地址上的数据。

在接收第三READ数据包后,第一网卡硬件113会根据第三READ数据包生成第五任务报告,并将第五任务报告保存于第一内存模块111的第一内存队列1111。然后响应终端110中的第一驱动软件112会从第一内存队列1111中读取第五任务报告,随后向第一网卡硬件113发送乱序接收指令。响应于乱序接收指令,第一网卡硬件113会直接接收第二网卡硬件123发送的第三READ数据包,不会在第一内存模块111的缓冲内存中按一定规则排列第三READ数据包。

随后,第一网卡硬件113从第一内存队列1111中读取第五任务报告,根据第五任务报告中第三READ数据包对应的目标内存地址,在第一有效负载模块1112中提取对应的有效负载,然后将该对应的有效负载封装成第三RESP数据包,并将该第三RESP数据包发送给第二网卡硬件123。

需要说明的是,若响应终端110当前只接收到请求终端120发起的READ类操作请求,则响应终端110在接收到请求终端120发送的第三READ数据包后,第一网卡硬件113即可开始根据第五任务报告提取对应有效负载并封装第三RESP数据包。若响应终端110正在处理请求终端120发起的SEND类操作请求或WRITE类操作请求(如上文所述的第一SEND数据包和/或WRITE数据包),则在响应终端110完整地接收到请求终端120发送的所有RESP类数据包后(如上文所述的第一RESP数据包和/或第二RESP数据包),第一网卡硬件113才会开始第三RESP数据包的封装操作。

在第一网卡硬件113将第三RESP数据包发送至第二网卡硬件123后,第二网卡硬件123会根据第三RESP数据包的包头信息,将第三RESP数据包中包含的有效负载保存至第二内存模块121的对应区域,第三RESP数据包的包头信息会指示该对应区域。并且第二网卡硬件123会生成对应的第六任务报告,并将第六任务报告保存至第二内存队列1211中。第二驱动软件122通过读取第二内存队列1211中的第六任务报告,第二驱动软件122在确定第三RESP数据包不存在数据传输异常的情况之后,会生成第三ACK任务书,并将该第三ACK任务书保存至第二内存队列1211。

第二网卡硬件123从第二内存队列1211中读取第三ACK任务书,并生成对应的第三ACK数据包,随后将第三ACK数据包发送至第一网卡硬件113。该第三ACK任务书用于表示请求终端120完整地接收了响应终端110发送的第三RESP数据包。需要说明的是,第二驱动软件122在从第二内存队列1211中读取第六任务报告后,会向第二网卡硬件发送乱序接收指令,因此第三RESP数据包也是第二网卡硬件123乱序接收的。

若第二驱动软件122检测到请求终端120没有在预设时间内完整地接收到所有的第三RESP数据包(该检测用于检测第三RESP数据包对应的数据包序列号是否连续,且总数是否与第三READ数据包的总数相同),则会根据请求终端120(或第二内存模块121)中现有的第三RESP数据包的数据包序列号,计算出丢失的第三RESP数据包的数据包序列号。然后重新向第二内存队列1211发送与该丢失的第三RESP数据包的数据包序列号对应的第三READ任务书。第二网卡硬件123在从第二内存队列1211中读取到该与丢失的第三RESP数据包的数据包序列号对应的第三READ任务书之后,会生成对应的第三READ数据包,并将该第三READ数据包发送至第一网卡硬件113。随后,第一网卡硬件113会根据该第三READ数据包所指示的目标内存地址,提取对应的有效负载,然后将该有效负载封装成对应的第三RESP数据包,并将该第三RESP数据包发送至第二网卡硬件123。至此,请求终端120成功获取了与丢失的第三RESP数据包。需要说明的是,在请求终端120向响应终端110获取丢失的第三RESP数据的同时,请求终端120还可以继续保持其他数据包的接收或发送操作。

需要说明的是,在本申请实施例中,一个READ数据包对应一个RESP数据包。示例性的,在SEND类操作请求的数据传输流程中,若响应终端110向请求终端120发送了10个第一READ数据包,则请求终端120会向响应终端110发送10个第一RESP数据包作为回应;在WRITE类操作请求的数据传输流程中,若响应终端110向请求终端120发送了5个第二READ数据包,则请求终端120会向响应终端110发送5个第二RESP数据包作为回应;在READ类操作请求的数据传输流程中,若请求终端120向响应终端110发送了7个第三READ数据包,则响应终端110会向请求终端120发送7个第三READ数据包作为回应。

需要说明的是,响应终端110中的第一内存模块111、第一驱动软件112和第一网卡硬件113,与请求终端120中的第二内存模块121、第二驱动软件122和第二网卡硬件123在功能本质上并没有区别,它们能实现的功能也是一样的,本申请实施例只是为了更加详细、形象地描述本申请实施例中数据传输的过程,所以才对终端进行了响应终端和请求终端的区分。总而言之,响应终端110中的第一内存模块111、第一驱动软件112和第一网卡硬件113能实现请求终端120中的第二内存模块121、第二驱动软件122和第二网卡硬件123在上述举例中实施的步骤,而请求终端120中的第二内存模块121、第二驱动软件122和第二网卡硬件123也能实现响应终端110中的第一内存模块111、第一驱动软件112和第一网卡硬件113在上述举例中实施的步骤。

为了更好地理解本申请实施例技术方案,下面,结合图5中的步骤对本申请实施例提供的一种软硬件协同实现远端内存访问的方法进行详细说明。

请参见图5,为本申请实施例提供的一种软硬件协同实现远端内存访问的方法的流程示意图。可以理解的是,图5所述方法对应的实施主体为如图1所述的响应终端110中的第一驱动软件112,响应终端110可以包括第一内存模块111、第一网卡硬件113和第一驱动软件112,如图5所示,该方法可以包括以下步骤:

S501,读取所述第一内存模块中的第一任务报告,向所述第一网卡硬件发送乱序接收指令。

需要说明的是,第一任务报告由第一网卡硬件根据第一SEND数据包生成,第一SEND数据包由请求终端发送,第一任务报告可以包括第一SEND数据包的SRTH报文头信息和数据包序列号,所述SRTH报文头包括所述第一SEND数据包对应的有效负载地址、数据长度和访问密钥。

更多地,响应终端可以接收请求终端发送的多个SEND数据包。

S502,根据所述第一SEND数据包的数据包序列号,在所述第一内存模块中按数据包序列号由小至大的顺序排列所述第一SEND数据包。

S503,根据所述第一SEND数据包对应的数据包序列号,判断所述第一SEND数据包是否存在数据传输异常的情况。

需要说明的是,数据传输异常的情况可以包括丢包。

S504,若判断为否,则根据所述第一SEND数据包,生成至少一个第一READ任务书,并将所述至少一个第一READ任务书保存至所述第一内存模块。

具体地,在S504步骤中,第一驱动软件会根据第一任务报告保存第一SEND数据包的立即数据(IMMDT),然后根据第一SEND操作(数据包)对应的SRTH报文头,转化为第一READ操作对应的RETH报文头,并将该RETH报文头保存至上述READ任务书中。然后第一驱动软件会从第一内存模块中的第一内存队列中提取RQE生成第一READ操作对应的SRTH拓展报文头,并保存于第一READ任务书中。

示例性的,设响应终端接收到了请求终端发送的第一SEND数据包,则第一驱动软件可以根据预设规则将第一SEND数据包对应的需求转换为三个第一READ任务书,进而第一网卡硬件可以生成、并向请求终端的第二网卡硬件发送三个第一READ数据包。需要说明的是,上述“根据预设规则将第一SEND数据包对应的需求转换为三个第一READ任务书”只是用于表达本申请实施例方法能够实现“将一个READ操作转换为至少一个READ操作”,上述“三个”数量不应对本申请构成限定。第一驱动软件具体会将第一SEND数据包对应的需求转换为多少个第一READ任务书,是由预设规则决定的,该预设规则由技术人员根据实际情况进行设定,在此不作限制。

在一种可能的实施方式中,在根据数据包序列号,判断所述第一SEND数据包是否存在数据传输异常的情况之后,还可以包括以下步骤:

若判断为是,则生成第一NAK任务书,并将第一NAK任务书保存至第一内存模块。

其中,第一NAK任务书可以用于表示第一SEND数据包存在数据传输异常的情况,该第一NAK任务书可以包括缺失的第一SEND数据包的数据包序列号。

在另一种可能的实施方式中,在若判断为否,则根据所述第一SEND数据包,生成至少一个第一READ任务书,并将至少一个第一READ任务书保存至第一内存模块之后,还可以包括以下步骤:

在接收到请求终端发送的至少一个第一RESP数据包之后,从第一内存模块读取第二任务报告,该第二任务报告可以由第一网卡硬件根据上述至少一个第一RESP数据包生成,第一RESP数据包为请求终端针对响应终端发送的第一READ数据包生成的响应信息,第二任务报告可以包括第一RESP数据包对应的SRTH报文头信息和数据包序列号,第一READ数据包可以由第一网卡硬件根据第一READ任务书生成;

根据第一RESP数据包的数据包序列号,判断第一RESP数据包是否存在数据传输异常的情况;

若判断为是,则重新向所述第一内存模块发送上述至少一个第一READ任务书。

在另一种可能的实施方式中,在若判断为否,则根据所述第一SEND数据包,生成至少一个第一READ任务书,并将至少一个第一READ任务书保存至第一内存模块之后,还可以包括以下步骤:

若响应终端在预设时长内没有接收到至少一个第一RESP数据包,则确定第一RESP数据包存在数据传输异常的情况;

向第一内存模块发送上述至少一个第一READ任务书。

在另一种可能的实施方式中,在根据第一RESP数据包的数据包序列号,判断第一RESP数据包是否存在数据传输异常的情况之后,还可以包括以下步骤:

若判断为否,则生成第一ACK任务书,并将该第一ACK任务书保存至第一内存模块中的第一内存队列中,该第一ACK任务书可以用于表示响应终端完整的接收了请求终端发送的第一RESP数据包。

在另一种可能的实施方式中,在响应终端接收到请求终端的WRITE类操作请求时,响应终端的第一驱动软件可以实施以下步骤:

在响应终端(第一网卡硬件)接收到请求终端(第二网卡硬件)发送WRITE数据包后,在第一内存模块的第一内存队列中读取第三任务报告,并向第一网卡硬件发送乱序接收指令,该第三任务报告由第一网卡硬件根据WRITE数据包生成;

根据WRITE数据包的数据包序列号,在第一内存模块中按数据包数列好由小至大的顺序排列WRITE数据包;

根据WRITE数据包对应的数据包序列号,判断WRITE数据包是否存在数据传输异常的情况,该数据传输异常的情况包括丢包;

若判断为是,则生成第二NAK任务书,并将第二NAK任务书保存至第一内存模块,改第一NAK任务书可以包括缺失的WRITE数据包的数据包序列号;

若判断为否,则根据WRITE数据包生成至少一个第二READ任务书,并将该至少一个第二READ任务书保存至第一内存模块;

在接收请求终端发送的至少一个第二RESP数据包之后,从第一内存模块读取第四任务报告,该第四任务报告由所述第一网卡硬件根据所述至少一个第二RESP数据包生成,该第二RESP数据包为请求终端针对所述响应终端发送的第一READ数据包生成的响应信息,该第四任务报告可以包括第二RESP数据包对应的SRTH报文头信息和数据包序列号,该第二READ数据包由第一网卡硬件根据第二READ任务书生成;

根据第二RESP数据包的数据包序列号,判断第二RESP数据包是否存在数据传输异常的情况;

若判断为是,则重新向第一内存模块发送至少一个第二READ任务书;

若判断为否,则生成第二ACK任务书,并将该第二ACK任务书保存至第一内存模块中的第一内存队列中,该第二ACK任务书可以用于表示响应终端完整的接收了请求终端发送的第二RESP数据包。

更多地,若响应终端在预设时长内没有接收到上述至少一个第二RESP数据包,则确定第二RESP数据包存在数据传输异常的情况;

向第一内存模块发送上述至少一个第一READ任务书。

在另一种可能的实施方式中,在响应终端接收到请求终端的READ类操作请求时,响应终端的第一驱动软件可以实施以下步骤:

在响应终端(第一网卡硬件)接收请求终端(第二网卡硬件)发送的第三READ数据包后,从第一内存模块的第一内存队列中读取第五任务报告,并向第一网卡硬件发送乱序接收指令。

可以看出,在本申请实施例中,网卡装置的驱动软件拥有超时检测、丢包检测、数据包排序等功能,而网卡装置的网卡硬件只需执行读取任务书和收发数据等操作,大大地降低了网卡硬件的工作负荷和工作难度,有助于提高数据传输丢包的恢复效率,也有助于网卡装置适应更加分散、复杂的数据交流环境。而且本申请实施例通过将请求端的。

请参见图6,为本申请实施例提供的另一种软硬件协同实现远端内存访问的方法的流程示意图。可以理解的是,图6所述方法对应的实施主体为如图1所述的响应终端110中的第一网卡硬件113,响应终端110可以包括第一内存模块111、第一网卡硬件113和第一驱动软件112,如图6所示,该方法可以包括以下步骤:

S601,接收请求终端发送的第一SEND数据包。

S602,根据所述第一SEND数据包生成第一任务报告,并将所述第一任务报告保存至所述第一内存模块。

需要说明的是,第一任务报告可以包括第一SEND数据包的SRTH报文头信息和数据包序列号,SRTH报文头可以包括第一SEND数据包对应的有效负载地址、数据长度和访问密钥。

S603,响应于所述第一驱动软件发送的乱序接收指令,乱序接收所述请求终端发送的第一SEND数据包;

其中,在接收乱序接收指令之后,第一网卡硬件只用直接接收请求终端发送的第一SEND数据包,不会在第一内存模块的缓冲内存中按一定规则排列第一SEND数据包。

在一种可能的实施方式中,在根据第一SEND数据包生成第一任务报告,并将第一任务报告保存至第一内存模块之后,还可以包括以下步骤:

读取第一内存模块中的第一NAK任务书,并根据第一NAK任务书生成第一NAK数据包,该第一NAK任务书可以用于表示第一SEND数据包存在数据传输异常的情况,该第一NAK任务书可以包括缺失的第一SEND数据包的数据包序列号;

将第一NAK数据包发送至请求终端,该第一NAK数据包可以用于要求请求终端重传缺失的第一SEND数据包。

更多地,在向请求终端发送第一NAK数据包后,第一网卡硬件还可以接收请求终端(第二网卡硬件)发送的与该第一NAK数据包对应的第一SEND数据包。

S604,读取所述第一内存模块中的至少一个第一READ任务书,并根据所述至少一个第一READ任务书生成对应的至少一个第一READ数据包。

S605,将所述至少一个第一READ数据包发送至所述请求终端。

在一种可能的实施方式中,在将所述第一READ数据包发送至所述请求终端之后,还可以包括以下步骤:

接收请求终端发送的至少一个第一RESP数据包;

根据至少一个第一RESP数据包的SRTH报文头信息,将至少一个第一RESP数据包携带的有效负载保存至对应的内存区域,该内存区域位于所述第一内存模块中;

根据至少一个第一RESP数据包生成对应的第二任务报告,并将第二任务报告保存至第一内存模块,该第二任务报告可以包括至少一个第一RESP对应的SRTH报文头和数据包序列号。

需要说明的是,第一RESP数据包也是第一网卡硬件乱序接收的。

在另一种可能的实施方式中,在将第一READ数据包发送至请求终端之后,还可以包括以下步骤:

若响应终端在预设时长内没有接收到至少一个第一RESP数据包,则读取第一内存模块中的至少一个第一READ任务书;

根据至少一个第一READ任务书,生成对应的至少一个第一READ数据包;

将至少一个第一READ数据包发送至请求终端。

在另一种可能的实施方式中,在第一驱动软件确定第一RESP数据包不存在数据传输异常的情况之后,第一网卡硬件还可以读取第一内存模块的第一内存队列中的第一ACK任务书,然后根据第一ACK任务书生成第一ACK数据包,并将该第一ACK数据包发送给请求终端(第二网卡硬件),该第一ACK任务书或第一ACK数据包可以用于表示响应终端完整的接收了请求终端发送的第一RESP数据包。

在另一种可能的实施方式中,在响应终端接收到请求终端的WRITE类操作请求时,响应终端的第一驱动软件可以实施以下步骤:

接收请求终端发送的WRITE数据包,该WRITE数据包中可以包括对应的SRTH报文头信息和数据包序列号,SRTH报文头信息可以包括WRITE数据包对应的有效负载地址、数据长度和访问密钥;

根据WRITE数据包中的SRTH报文头信息和数据包序列号生成第三任务报告,并将第三任务报告保存至第一内存模块的第一内存队列中;

响应于第一驱动软件发送的乱序接收指令,直接接收请求终端(第二网卡硬件)发送的第一WRITE数据包,不会在第一内存模块111的缓冲内存中按一定规则排列WRITE数据包;

从第一内存模块的第一内存队列中读取第二READ任务书,根据该第二READ任务书生成第二READ数据包,并将第二READ数据包发送至请求终端(第二网卡硬件);

接收请求终端(第二网卡硬件)发送的带有第二有效负载的第二RESP数据包,其中,第二RESP数据包也是第一网卡硬件乱序接收的;

将第二RESP数据包携带的第二有效负载保存至对应的第一内存模块中的内存地址,该对应的内存地址由第二RESP数据包的SRTH报文头指示;

根据第二RESP数据包的SRTH报文头和数据包序列号生成对应的第四任务报告,并将该第四任务报告保存至第一内存队列;

在响应终端110没有在预设时间内完整地接收到所有的第二RESP数据包时(该检测用于检测第二RESP数据包对应的数据包序列号是否连续,且总数是否与第二READ数据包的总数相同),从第一内存模块的第一内存队列中读取到该与丢失的第二RESP数据包的数据包序列号对应的第二READ任务书,并生成对应的第二READ数据包;

将该第二READ数据包发送至请求终端(第二网卡硬件)。

接收请求终端(第二网卡硬件)发送的与上述的第二READ数据包对应的第二RESP数据包(即上文提及的“丢失的第二RESP数据包”)。

更多地,在WRITE数据包存在如丢包的数据传输异常的情况时,第一网卡硬件可以从第一内存模块的第一内存队列中读取第二NAK任务书,并根据第二NAK任务书生成第二NAK数据包,然后将该第二NAK数据包发送给请求终端(第二网卡硬件)。更进一步地,接收请求终端(第二网卡硬件)发送的与第二NAK数据包对应的WRITE数据包。

在另一种可能的实施方式中,在响应终端接收到请求终端的READ类操作请求时,响应终端的第一驱动软件可以实施以下步骤:

接收请求终端(第二网卡硬件)发送的第三READ数据包,该第三READ数据包中可以包括对应的SRTH报文头信息和数据包序列号,SRTH报文头信息可以包括第三READ数据包对应的目标内存地址,该目标内存地址为响应终端110中的内存地址,第三READ操作请求即为请求终端想获取响应终端保存于该目标内存地址上的数据;

根据第三READ数据包生成第五任务报告,并保存于第一内存模块的第一内存队列;

响应于第一驱动软件发送的乱序接收指令,直接接收请求终端(第二网卡硬件)发送的第三READ数据包,不会在第一内存模块的缓冲内存中按一定规则排列第三READ数据包。

从第一内存模块的第一内存队列中读取第五任务书,根据第五任务书中第三READ数据包对应的目标内存地址,在第一内存模块的第一有效负载模块中提取对应的有效负载;

将该对应的有效负载封装成第三RESP数据包,并将该第三RESP数据包发送给请求终端(第二网卡硬件);

接收请求终端(第二网卡硬件)发送的第三ACK数据包,该第三ACK数据包可以用于表示请求终端(第二网卡硬件)完整地接收了响应终端(第一网卡硬件)发送的第三RESP数据包。

需要说明的是,若响应终端当前只接收到请求终端发起的READ类操作请求,则响应终端在接收到请求终端发送的第三READ数据包后,第一网卡硬件即可开始根据第五任务报告提取对应有效负载并封装第三RESP数据包。若响应终端正在处理请求终端发起的SEND类操作请求或WRITE类操作请求(如上文所述的第一SEND数据包和/或WRITE数据包),则在响应终端完整地接收到请求终端发送的所有RESP类数据包后(如上文所述的第一RESP数据包和/或第二RESP数据包),第一网卡硬件113才会开始第三RESP数据包的封装操作。

可以看出,在本申请实施例中,网卡硬件只用承担收发数据包、生成或读取内存队列中的任务书,这使得网卡硬件的工作量大大下降,有助于提高网卡硬件的工作效率。

下面结合附图介绍本申请实施例涉及的装置。

请参见图7,为本申请实施例提供的一种软硬件协同实现远端内存访问的装置的组成示意图,该装置可以包括:第一内存模块111、第一驱动软件112以及第一网卡硬件113,所述第一驱动软件112可以用于实现如图5实施例所述的步骤,第一网卡硬件113可以实现如图6实施例所述的步骤,第一内存模块111可以包括第一内存队列1111和第一有效负载模块1112;

第一内存模块111的第一内存队列1111,可以用于保存第一任务报告,该第一任务报告可以包括第一SEND数据包的SRTH报文头信息和数据包序列号,SRTH报文头可以包括第一SEND数据包对应的有效负载地址、数据长度和访问密钥;

第一内存模块111的第一内存队列1111,还可以用于保存至少一个第一READ任务书。

更多地,图7所示的软硬件协同实现远端内存访问的装置的更多功能可以参照图1所述软硬件协同实现远端内存访问的系统中的响应终端,以及图2中所述响应终端对应的相关功能。

更多关于第一内存模块111的作用,可以参照图1相关实施例中的第一内存模块111的相关工作内容,在此不做赘述。

请参见图8,为本申请实施例提供的另一种软硬件协同实现远端内存访问的装置的组成示意图,该装置可以包括:

处理器810、存储器820和I/O接口830。处理器810、存储器820和I/O接口830间可实现通信地连接,该存储器820用于存储指令,该处理器810用于执行该存储器820存储的指令,以实现如上图5和/或图6及其相关实施例对应的方法步骤。

处理器810用于执行该存储器820存储的指令,以控制I/O接口830接收和发送信号,完成上述方法中的步骤。其中,所述存储器820可以集成在所述处理器810中,也可以与所述处理器810分开设置。

存储器820中还可以包括存储系统821、高速缓存822和RAM823。其中高速缓存822是存在于RAM823与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度;RAM823是与CPU直接交换数据的内部存储器,可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。三者结合实现存储器820功能。

作为一种实现方式,I/O接口830的功能可以考虑通过收发电路或者收发的专用芯片实现。处理器810可以考虑通过专用处理芯片、处理电路、处理器或者通用芯片实现。

作为另一种实现方式,可以考虑使用通用计算机的方式来实现本申请实施例提供的装置。即将实现处理器810,I/O接口830功能的程序代码存储在存储器820中,通用处理器通过执行存储器820中的代码来实现处理器810,I/O接口830的功能。

该装置所涉及的与本申请实施例提供的技术方案相关的概念,解释和详细说明及其他步骤请参见前述方法或其他实施例中关于装置执行的方法步骤的内容的描述,此处不做赘述。

作为本实施例的另一种实现方式,提供一种计算机可读存储介质,其上存储有指令,该指令被执行时执行上述方法实施例中的方法。

作为本实施例的另一种实现方式,提供一种包含指令的计算机程序产品,该指令被执行时执行上述方法实施例中的方法。

本领域技术人员可以理解,为了便于说明,图8中仅示出了一个存储器和处理器。在实际的终端或服务器中,可以存在多个处理器和存储器。存储器也可以称为存储介质或者存储设备等,本申请实施例对此不做限制。

应理解,在本申请实施例中,处理器可以是中央处理单元(Central ProcessingUnit,简称CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital SignalProcessing ,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Progracmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。

还应理解,本申请实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,简称ROM)、可编程只读存储器(Progracmable ROM,简称PROM)、可擦除可编程只读存储器(Erasable PROM,简称EPROM)、电可擦除可编程只读存储器(Electrically EPROM,简称EEPROM)或闪存。易失性存储器可以是随机存取存储器(RandomAccess Memory,简称RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,简称SRAM)、动态随机存取存储器(Dynamic RAM,简称DRAM)、同步动态随机存取存储器(Synchronous DRAM,简称SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,简称DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,简称ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,简称SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,简称DR RAM)。

需要说明的是,当处理器为通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)集成在处理器中。

应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。

该总线除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线。

还应理解,本文中涉及的第一、第二、第三、第四以及各种数字编号仅为描述方便进行的区分,并不用来限制本申请的范围。

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

在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

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

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

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

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

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。

本申请实施例还提供一种计算机存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现如上述方法实施例中记载的任何一种软硬件协同实现远端内存访问的方法的部分或全部步骤。

本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种软硬件协同实现远端内存访问的方法的部分或全部步骤。

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

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号