具体实施方式
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本申请的构思或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的,而非限制性的。
为便于理解本申请实施例的技术方案,以下对本申请实施例的相关技术进行说明。以下相关技术作为可选方案与本申请实施例的技术方案可以进行任意结合,其均属于本申请实施例的保护范围。
本申请实施例中涉及到数据传输方案,该数据传输方案应用于数据接收端的网卡。其中,网卡是数据接收端中用于负责网络通信的硬件设备,网卡通过总线与数据接收端的主机相连,同时,网卡也通过总线与数据接收端的其他硬件设备相连。若数据发送端通过远程直接内存访问方式向数据接收端进行数据发送,即,通过远程直接内存访问方式向数据接收端发送目标数据,数据接收端的网卡在接收到数据发送端传输的目标数据后会通过总线向主机内存中写入数据(目标数据)。。
本申请实施例中,总线的类型一般是PCIe(PCI Express,高速串行计算机扩展总线标准)总线,也可以是其他类型的总线,网卡的类型一般是Smart NIC(Smart NetworkInterface Card,智能网卡),也可以是其他类型的网卡。另外,需要说明的是,通过远程直接内存访问方式向数据接收端进行数据发送的数据发送端的数目一般是多个,也可以仅仅只有一个。以下具体以总线的类型是PCIe总线、网卡的类型是Smart NIC以及数据发送端的数目是多个为例,来对本申请实施例中提供的数据传输方法进行说明。
本申请实施例中涉及到的数据传输方案,在数据接收端接收数据发送端发送的目标数据的过程中,如果网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源,则先将目标数据中的部分数据写入至网卡的网卡缓冲区,然后,再将部分数据从网卡缓冲区写入至主机内存。
具体的,在网卡通过总线向数据接收端的主机内存写入数据时,要先获取流量控制信用额度(Flow Control Credit)。而在面临突发流量场景导致网卡将目标数据写入至主机内存所需获取的流量控制信用额度超出网卡可获取的流量控制信用额度时,网卡将无法获取足够的流量控制信用额度将目标数据中的部分数据写入至主机内存,此时,即出现了网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源的情况。在所需消耗的总线带宽资源超出可获取到的总线带宽资源的情况出现时,可先将上述部分数据暂时写入至网卡的网卡缓冲区,然后,在网卡能够获取到足够的流量控制信用额度支持部分数据的传输时,再将部分数据从网卡缓冲区写入至主机内存。
本申请实施例中,网卡缓冲区包括第一内存缓冲区以及第二内存缓冲区。其中,第一内存缓冲区是依据网卡的片上内存为该网卡配置的默认内存缓冲区,例如,依据网卡的片上内存为该网卡配置的共享内存缓冲区,第二内存缓冲区是指利用网卡的板载内存为该网卡配置的扩展内存缓冲区。
由于网卡的网卡缓冲区除了包括依据网卡的片上内存为网卡配置的第一内存缓冲区外,还包括依据网卡的板载内存为网卡配置的第二内存缓冲区,因此,网卡的网卡缓冲区相较于依据网卡的片上内存为网卡配置的第一内存缓冲区具有更高的内存容量。也即是说,相较于依据网卡的片上内存为网卡配置的第一内存缓冲区,网卡的网卡缓冲区能够存储更多的数据。由于网卡的网卡缓冲区能够存储更多的数据,这样,在网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源时,先将目标数据中的部分数据写入至网卡的网卡缓冲区,然后,再将部分数据从网卡缓冲区写入至主机内存,能够更好的避免在所需消耗的总线带宽资源超出可获取到的总线带宽资源时出现数据丢包。也即是说,在因面临突发流量场景导致所需消耗的总线带宽资源超出可获取到的总线带宽资源时,能够更好的避免数据丢包问题的出现,进而能够降低数据丢包问题对数据发送的通讯时延以及数据传输速率的影响。
另外,由于网卡的板载内存配置在网卡内,并且成本相对较低,因此,将网卡的板载内存配置为网卡的第二内存缓冲区,能够降低网卡的网卡缓冲区的配置成本以及配置复杂度。
为了更清楚地展示本申请实施例中提供的数据传输方法,首先介绍一下本申请实施例中提供的数据传输方法的一个应用示例,该数据传输方法应用于数据接收端的网卡,并且该网卡通过总线向数据接收端的主机内存写入数据。该应用示例的具体实现过程可参照图1,示出的数据传输过程如下:
在多数情况下,当多个数据发送端在短时间内向网卡发送大量的目标数据时,网卡将目标数据写入至主机内存所需获取的流量控制信用额度会超出网卡可获取的流量控制信用额度。在所需获取的流量控制信用额度超出网卡可获取的流量控制信用额度时,网卡无法获取足够的流量控制信用额度将目标数据中的部分数据写入至主机内存,此时,就出现了网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源的情况,在该情况出现时,要先将目标数据中的部分数据写入至网卡的网卡缓冲区,然后,在网卡能够获取到足够的流量控制信用额度支持部分数据的传输时,再将部分数据从网卡缓冲区写入至主机内存,具体的,在网卡能够获取到足够的流量控制信用额度支持部分数据的传输时,从网卡缓冲区中读取部分数据,并将部分数据写入至主机内存。
由于网卡的网卡缓冲区除了包括依据网卡的片上内存为网卡配置的第一内存缓冲区外,还包括依据网卡的板载内存为网卡配置的第二内存缓冲区,因此,网卡的网卡缓冲区相较于依据网卡的片上内存为网卡配置的第一内存缓冲区具有更高的内存容量。也即是说,相较于依据网卡的片上内存为网卡配置的第一内存缓冲区,网卡的网卡缓冲区能够存储更多的数据。这样,即便当数据发送端在短时间内向网卡异常发送大量的目标数据,导致所需消耗的总线带宽资源超出可获取到的总线带宽资源时,也能够通过先将目标数据中的部分数据写入至网卡的网卡缓冲区,然后,再将部分数据从网卡缓冲区写入至主机内存的方式,来更好的避免数据丢包问题的出现。由于可以更好的避免数据丢包问题的出现,因此,本申请实施例中提供的数据传输方法还能够降低数据丢包问题对数据发送的通讯时延以及数据传输速率的影响。
需要说明的是,本申请实施例中提供的数据传输方法的上述应用示例,是为了便于理解而并非用于限定本申请实施例中提供的数据传输方法。具体的,本申请实施例中提供的数据传输方法的应用场景不做具体限定。
另外,数据接收端以及数据发送端的存在形式可以为具有数据传输功能的硬件设备,例如,服务器以及终端设备等。
下面以具体实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。以下相关技术作为可选方案与本申请实施例的技术方案可以进行任意结合,其均属于本申请实施例的保护范围,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
图2示出了本申请实施例中提供的一种数据传输方法200的流程图,图2示出的数据传输方法应用于数据接收端的网卡,网卡通过总线向数据接收端的主机内存写入数据,该方法可以包括步骤S201-S202。
在步骤S201中,在数据接收端接收数据发送端发送的目标数据的过程中,如果网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源,则将目标数据中的部分数据写入至网卡的网卡缓冲区;网卡缓冲区包括依据网卡的片上内存为网卡配置的第一内存缓冲区以及依据网卡的板载内存为网卡配置的第二内存缓冲区;数据发送端通过远程直接内存访问方式向数据接收端发送目标数据。
网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源情况的出现,一般是由数据发送端在短时间内向网卡发送大量的目标数据导致,例如,由多个数据发送端在短时间内同时向网卡发送大量的目标数据导致。具体的,在网卡将目标数据写入至主机内存所需获取的流量控制信用额度超出网卡可获取的流量控制信用额度时,网卡将无法获取足够的流量控制信用额度将目标数据中的部分数据写入至主机内存,此时,就出现了网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源的情况。
将目标数据中的部分数据写入至网卡的网卡缓冲区可以是指,先在网卡缓冲区中获取一段可用内存空间作为目标可用内存空间,然后,再将部分数据写入至目标可用内存空间。
在一种可能的实现方式中,为了便于对网卡缓冲区的内存空间进行管理,提高网卡缓冲区的内存空间的利用率以及将目标数据中的部分数据写入至网卡的网卡缓冲区的效率,在将目标数据中的部分数据写入至网卡的网卡缓冲区时,可以先在预先配置的缓冲区队列(Buffer Queue,BQ)中存在剩余缓冲区队列元素时,读取剩余缓冲区队列元素中的目标缓冲区队列元素,然后,再将部分数据写入至目标缓冲区队列元素标识的目标可用内存空间。其中,缓冲区队列用于存储依据网卡缓冲区对应的可用内存空间配置的多个缓冲区队列元素;缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间。
缓冲区队列由运行在数据接收端的应用程序以及相应的驱动负责创建,一般情况下,在进行数据传输之前,应用程序以及相应的驱动会预先在第二内存缓冲区中预先创建缓冲区队列。如图3所示,应用程序以及相应的驱动预先在第二内存缓冲区中创建缓冲区队列之后,数据接收端的主机(具体可以是指运行在主机上的应用程序)会先依据网卡缓冲区对应的可用内存空间配置多个缓冲区队列元素(Buffer Queue Entry,BQE),然后,再将多个缓冲区队列元素写入至缓冲区队列。其中,依据网卡缓冲区对应的可用内存空间配置多个缓冲区队列元素可以是指,先将网卡缓冲区中的第二内存缓冲区对应的可用内存空间划分为多段可用内存空间,然后,再针对多段可用内存空间分别生成对应的缓冲区队列元素。其中,各段可用内存空间对应连续的物理地址,各缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间,也即是说,各缓冲区队列元素用于标识网卡缓冲区中一段连续的物理地址,具体的,各缓冲区队列元素用于标识第二内存缓冲区中一段连续的物理地址。
在一示例中,第二内存缓冲区对应的可用内存空间为50MB(Mega Byte,兆字节),此时,可以在第二内存缓冲区对应的可用内存空间中选定40MB的可用内存空间,并将这40MB的可用内存空间平均划分为20段可用内存空间,然后,再针对这20段可用内存空间分别生成对应的缓冲区队列元素,即,生成20个缓冲区队列元素,各缓冲区队列元素用于标识第二内存缓冲区中的一段大小为2MB的可用内存空间。
在将多个缓冲区队列元素写入至缓冲区队列之后,由于缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间,在缓冲区队列中存在剩余缓冲区队列元素时,则证明网卡缓冲区中存在至少一段可用内存空间。请再参照图3,在网卡的缓冲区队列中存在剩余缓冲区队列元素时,网卡即可进一步从剩余缓冲区队列元素中读取目标缓冲区队列元素,获取目标缓冲区队列元素标识的目标可用内存空间,并将部分数据写入至目标可用内存空间,以实现将部分数据写入至网卡的网卡缓冲区。
在一种可能的实现方式中,为了能够使剩余缓冲区队列元素可以准确的标识网卡缓冲区中剩余的可用内存空间,在将部分数据写入至目标缓冲区队列元素标识的目标可用内存空间之后,还要进一步在剩余缓冲区队列元素中删除目标缓冲区队列元素。
在一示例中,剩余缓冲区队列元素包括缓冲区队列元素1、缓冲区队列元素2以及缓冲区队列元素3,在缓冲区队列元素1为目标缓冲区队列元素,并且网卡已将部分数据写入至缓冲区队列元素1标识的目标可用内存空间之后,可以从剩余缓冲区队列元素中删除缓冲区队列元素1,以对剩余缓冲区队列元素进行更新,得到更新后的剩余缓冲区队列元素,此时,更新后的剩余缓冲区队列元素包括缓冲区队列元素2以及缓冲区队列元素3。
另外,为了使数据接收端的主机可以及时了解到部分数据的数据存储情况(至少包括该部分数据已被存储在网卡缓冲区中,以及该部分数据在网卡缓冲区中的存储位置),以便在所需消耗的总线带宽资源超出可获取到的总线带宽资源时,将部分数据从网卡缓冲区写入至主机内存,如图3所示,在将部分数据写入至目标缓冲区队列元素标识的目标可用内存空间之后,网卡还可以进一步在预先配置的完成队列(Completion Queue,CQ)中写入第一完成队列元素(Completion Queue Entry,CQE),并将第一完成队列元素发送至数据接收端的主机。为了更好地标识所完成的IO(Input/Output,输入/输出)任务,在将第一完成队列元素发送至数据接收端的主机的同时,还可以发送将部分数据写入至目标可用内存空间的IO任务对应的IO任务标识至数据接收端的主机。其中,完成队列由运行在数据接收端的应用程序以及相应的驱动负责创建,一般情况下,在进行数据传输之前,应用程序以及相应的驱动会预先对完成队列进行创建,第一完成队列元素用于标识将部分数据写入至目标可用内存空间的IO任务已完成。
本申请实施例中提供的数据传输方法,在部分数据写入至网卡的网卡缓冲区之后,要进一步执行步骤S202,在步骤S202中,将部分数据从网卡缓冲区写入至主机内存。
将部分数据从网卡缓冲区写入至主机内存可以是指,从网卡缓冲区中读取部分数据,并将部分数据写入至主机内存。具体的,在网卡能够获取到足够的流量控制信用额度支持部分数据的传输时,即可从网卡缓冲区中读取部分数据,并将部分数据写入至主机内存。
在一种可能的实现方式中,为了能够精准的将部分数据从网卡缓冲区写入至主机内存,在将部分数据从网卡缓冲区写入至主机内存时,可以先获取部分数据在网卡缓冲区中对应的存储物理地址,以及部分数据在主机内存中对应的待写入物理地址,然后,再从存储物理地址对应的内存中读取部分数据,并将部分数据写入至待写入物理地址对应的内存中。
获取部分数据在网卡缓冲区中对应的存储物理地址可以是指,在预先创建的发送队列(Send Queue,SQ)中读取针对部分数据的目标发送队列元素(Send Queue Entry,SQE),获取存储物理地址。其中,目标发送队列元素依据数据接收端的主机(具体可以是指运行在主机上的应用程序)针对部分数据提供的数据发送请求生成,发送队列由运行在数据接收端的应用程序以及相应的驱动负责创建,一般情况下,在进行数据传输之前,应用程序以及相应的驱动会预先对发送队列进行创建。
获取部分数据在主机内存中对应的待写入物理地址可以是指,在网卡的接收队列(Receive Queue,RQ)中读取针对部分数据的目标接收队列元素(Receive Queue Entry,RQE),获取待写入物理地址。其中,目标接收队列元素依据数据接收端的主机(具体可以是指运行在主机上的应用程序)针对部分数据提供的数据接收请求生成,接收队列由运行在数据接收端的应用程序以及相应的驱动负责创建,一般情况下,在进行数据传输之前,应用程序以及相应的驱动会预先对接收队列进行创建。
在一示例中,将部分数据从网卡缓冲区写入至主机内存的过程如图4所示,该过程如下:在网卡将部分数据写入至网卡的网卡缓冲区之后,当网卡读取到用于指示将部分数据从网卡缓冲区发送至主机内存的目标发送队列元素时,网卡会获取部分数据在网卡缓冲区中对应的存储物理地址。当网卡读取到用于指示接收从网卡缓冲区写入至主机内存的部分数据的目标接收队列元素时,网卡会获取部分数据在主机内存中对应的待写入物理地址。在获取到存储物理地址以及待写入物理地址之后,网卡会进一步从存储物理地址对应的内存中读取部分数据,并将部分数据写入至待写入物理地址对应的内存中。其中,目标发送队列元素由数据接收端的主机(具体可以是指运行在主机上的应用程序)在发送队列中写入,目标接收队列元素由数据接收端的主机(具体可以是指运行在主机上的应用程序)在接收队列中写入。另外,为了使数据接收端的主机可以及时了解到部分数据的数据存储情况(至少包括该部分数据已被存储在主机内存中,以及该部分数据在主机内存中的存储位置),在从存储物理地址对应的内存中读取部分数据,并将部分数据写入至待写入物理地址对应的内存中之后,网卡还可以进一步在完成队列中写入第二完成队列元素,并将第二完成队列元素发送至数据接收端的主机。其中,第二完成队列元素用于标识将部分数据从网卡缓冲区写入至主机内存的IO任务已完成,具体的,第二完成队列元素用于标识从存储物理地址中读取部分数据,以及将部分数据写入至写入物理地址的IO任务已完成。为了更好地标识所完成的IO任务,在将第二完成队列元素发送至数据接收端的主机的同时,还可以发送将部分数据从网卡缓冲区写入至主机内存的IO任务对应的IO任务标识至数据接收端的主机。
在一示例中,为了能够使剩余缓冲区队列元素可以准确的标识网卡缓冲区中剩余的可用内存空间,以及后续可以依据剩余缓冲区队列元素对应的元素数目,准确的确定出标注概率,在从存储物理地址中读取部分数据,并将部分数据写入至写入物理地址之后,还需要进一步针对存储物理地址,在网卡的缓冲区队列中配置目标缓冲区队列元素,并将目标缓冲区队列元素添加至缓冲区队列中,以更新剩余缓冲区队列元素。其中,缓冲区队列用于存储依据网卡缓冲区对应的可用内存空间配置的多个缓冲区队列元素;缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间。也即是说,在将部分数据从网卡缓冲区写入至主机内存之后,需要在缓冲区队列中及时补充目标缓冲区队列元素。
在一种可能的实现方式中,为了准确且及时的控制数据发送端对数据发送速率进行降速,以避免数据丢包问题的出现,在将目标数据中的部分数据写入至网卡的网卡缓冲区之后,还可以先针对目标数据中已写入至主机内存的已写入数据,确定显式拥塞通知的标注概率,然后,再基于标注概率,对已写入数据分别对应的数据确收报文进行显式拥塞通知标注,得到待发送的数据确收报文,之后,将待发送的数据确收报文发送至数据发送端。其中,标注概率用于标识数据接收端对数据发送速率的降速程度,一般情况下,标注概率越大降速程度越大。具体的,标注概率越大,则待发送的数据确收报文中标注有显式拥塞通知的数据确收报文越多,也即是说,标注概率越大,数据接收端接收到的标注有显式拥塞通知的数据确收报文越多。数据接收端接收到的标注有显式拥塞通知的数据确收报文越多,则证明网卡缓冲区中剩余的可用内存空间越少,此时,数据发送端对数据发送速率的降速程度应当越大。
对于已写入至主机内存的已写入数据,数据接收端需要通过网卡向数据接收端发送数据确收报文,以告知数据发送端已写入数据已被数据接收端成功接收。在一示例中,发送数据确收报文的存在形式为ACK(Acknowledgement,确认字符)报文。另外,显式拥塞通知(Explicit Congestion Notification,ECN)的标注概率用于表示对已写入数据分别对应的数据确收报文进行显式拥塞通知标注的概率。
在一种可能的实现方式中,在针对目标数据中已写入至主机内存的已写入数据,确定显式拥塞通知的标注概率时,可先获取网卡的缓冲区队列中存在的剩余缓冲区队列元素,然后,再依据剩余缓冲区队列元素对应的元素数目,确定标注概率。
缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间,剩余缓冲区队列元素可以准确的标识网卡缓冲区中剩余的可用内存空间,而在网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源时,总线已处于满负载状态,在此情况下,如果剩余缓冲区队列元素越少,则表明网卡缓冲区中剩余的可用内存空间越少。为了避免数据丢包问题的出现,在网卡缓冲区中剩余的可用内存空间越少时,则需要数据发送端对数据发送速率进行更大程度的降速。因此,依据剩余缓冲区队列元素对应的元素数目,确定标注概率,可以使标注概率准确的反映出数据发送端要对数据发送速率的降速程度。具体的,在网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源时,网卡缓冲区中剩余的可用内存空间越少,标注概率越大,在此情况下,数据发送端要对数据发送速率的降速程度也越大。
在一示例中,在依据剩余缓冲区队列元素对应的元素数目,确定标注概率时,可以先在针对多个缓冲区队列元素配置的多个数值范围中,确定元素数目对应的数值范围,然后,再在多个数值范围分别对应的标注概率计算模型中,依据元素数目对应的数值范围,确定元素数目对应的标注概率计算模型,之后,利用元素数目以及标注概率计算模型,计算得到标注概率。例如,针对多个缓冲区队列元素(多个缓冲区队列元素的数目为N,N为正整数)配置了三个数值范围,分别记为数值范围1、数值范围2以及数值范围3,其中,数值范围1为大于P(P为小于N的正整数)、小于等于N,数值范围2为小于等于P、大于等于Q(Q为小于P的正整数),数值范围2为大于等于0、小于Q。另外,针对多个数值范围分别配置的标注概率计算模型为数值范围1对应标注概率计算模型1,数值范围2对应标注概率计算模型2以及数值范围3对应标注概率计算模型3,其中,标注概率计算模型1对应的计算公式可以为Y=0,(P<M≤N);标注概率计算模型2对应的计算公式可以为Y=(P-M)/(P-Q),(Q≤M≤P);标注概率计算模型3对应的计算公式可以为Y=1,(0≤M<Q)。其中,M用于表示剩余缓冲区队列元素对应的元素数目,Y表示标注概率。
本申请实施例提供的数据传输方法,由于网卡的网卡缓冲区除了包括依据网卡的片上内存为网卡配置的第一内存缓冲区外,还包括依据网卡的板载内存为网卡配置的第二内存缓冲区,因此,网卡的网卡缓冲区相较于依据网卡的片上内存为网卡配置的第一内存缓冲区具有更高的内存容量。也即是说,相较于依据网卡的片上内存为网卡配置的第一内存缓冲区,网卡的网卡缓冲区能够存储更多的数据。由于网卡的网卡缓冲区能够存储更多的数据,这样,在网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源时,先将目标数据中的部分数据写入至网卡的网卡缓冲区,然后,再将部分数据从网卡缓冲区写入至主机内存,能够更好的避免在所需消耗的总线带宽资源超出可获取到的总线带宽资源时出现数据丢包。也即是说,在因面临突发流量场景导致所需消耗的总线带宽资源超出可获取到的总线带宽资源时,能够更好的避免数据丢包问题的出现,进而能够降低数据丢包问题对数据发送的通讯时延以及数据传输速率的影响。
另外,由于网卡的板载内存配置在网卡内,并且成本相对较低,因此,将网卡的板载内存配置为网卡的第二内存缓冲区,能够降低网卡的网卡缓冲区的配置成本以及配置复杂度。
与本申请实施例提供的方法的应用示例以及方法相对应地,本申请实施例还提供一种应用于数据接收端的网卡,该应用于数据接收端的网卡如图5所示。图5示出了本申请实施例中提供的一种应用于数据接收端的网卡500的结构框图,该应用于数据接收端的网卡500该网卡通过总线向数据接收端的主机内存写入数据,可以包括:
第一数据写入模块501,用于在数据接收端接收数据发送端发送的目标数据的过程中,如果网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源,则将目标数据中的部分数据写入至网卡的网卡缓冲区;网卡缓冲区包括依据网卡的片上内存为网卡配置的第一内存缓冲区以及依据网卡的板载内存为网卡配置的第二内存缓冲区;数据发送端通过远程直接内存访问方式向数据接收端发送目标数据;
第二数据写入模块502,用于将部分数据从网卡缓冲区写入至主机内存。
在一种可能的实现方式中,网卡将目标数据写入至主机内存所需消耗的总线带宽资源超出网卡可获取到的总线带宽资源包括:网卡将目标数据写入至主机内存所需获取的流量控制信用额度超出网卡可获取的流量控制信用额度。
在一种可能的实现方式中,第一数据写入模块501包括:
目标缓冲区队列元素读取子模块,用于在预先配置的缓冲区队列中存在剩余缓冲区队列元素时,读取剩余缓冲区队列元素中的目标缓冲区队列元素;缓冲区队列用于存储依据网卡缓冲区对应的可用内存空间配置的多个缓冲区队列元素;缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间;
第一数据写入子模块,用于将部分数据写入至目标缓冲区队列元素标识的目标可用内存空间。
在一种可能的实现方式中,该应用于数据接收端的网卡还包括:
目标缓冲区队列元素删除模块,用于在将部分数据写入至目标缓冲区队列元素标识的目标可用内存空间之后,在剩余缓冲区队列元素中删除目标缓冲区队列元素;
和/或,第一完成队列元素写入模块,用于在预先配置的完成队列中写入第一完成队列元素;第一完成队列元素用于标识将部分数据写入至目标可用内存空间的IO任务已完成;
第一完成队列元素发送模块,用于将第一完成队列元素发送至数据接收端的主机。
在一种可能的实现方式中,第二数据写入模块502包括:
物理地址获取子模块,用于获取部分数据在网卡缓冲区中对应的存储物理地址,以及部分数据在主机内存中对应的待写入物理地址;
第二数据写入子模块,用于从存储物理地址对应的内存中读取部分数据,并将部分数据写入至待写入物理地址对应的内存中。
在一种可能的实现方式中,物理地址获取子模块包括:
存储物理地址获取子模块,用于在预先配置的发送队列中读取针对部分数据的目标发送队列元素,获取存储物理地址;目标发送队列元素依据数据接收端的主机针对部分数据提供的数据发送请求生成。
在一种可能的实现方式中,该应用于数据接收端的网卡还包括:
第二完成队列元素写入模块,用于在从存储物理地址对应的内存中读取部分数据,并将部分数据写入至待写入物理地址对应的内存中之后,在网卡的完成队列中写入第二完成队列元素;第二完成队列元素用于标识将部分数据从网卡缓冲区写入至主机内存的IO任务已完成;
第二完成队列元素发送模块,用于将第二完成队列元素发送至数据接收端的主机。
在一种可能的实现方式中,该应用于数据接收端的网卡还包括:
目标缓冲区队列元素配置模块,用于在从存储物理地址中对应的内存读取部分数据,并将部分数据写入至待写入物理地址对应的内存中之后,针对存储物理地址,在预先配置的缓冲区队列中配置目标缓冲区队列元素;缓冲区队列用于存储依据网卡缓冲区对应的可用内存空间配置的多个缓冲区队列元素;缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间;
目标缓冲区队列元素写入模块,用于将目标缓冲区队列元素添加至缓冲区队列中。
在一种可能的实现方式中,该应用于数据接收端的网卡还包括:
标注概率确定模块,用于在将目标数据中的部分数据写入至网卡的网卡缓冲区之后,针对目标数据中已写入至主机内存的已写入数据,确定显式拥塞通知的标注概率;标注概率用于标识数据接收端对数据发送速率的降速程度;
标注模块,用于基于标注概率,对已写入数据分别对应的数据确收报文进行显式拥塞通知标注,得到待发送的数据确收报文;
报文发送模块,用于将待发送的数据确收报文发送至数据发送端。
在一种可能的实现方式中,标注概率确定模块包括:
剩余缓冲区队列元素获取子模块,用于获取网卡的缓冲区队列中存在的剩余缓冲区队列元素;缓冲区队列用于存储依据网卡缓冲区对应的可用内存空间配置的多个缓冲区队列元素;缓冲区队列元素用于标识网卡缓冲区中的一段可用内存空间;
标注概率确定子模块,用于依据剩余缓冲区队列元素对应的元素数目,确定标注概率。
在一种可能的实现方式中,标注概率确定子模块包括:
数值范围确定子模块,用于在针对多个缓冲区队列元素配置的多个数值范围中,确定元素数目对应的数值范围;
标注概率计算模型确定子模块,用于在多个数值范围分别对应的标注概率计算模型中,依据元素数目对应的数值范围,确定对应的标注概率计算模型;
标注概率计算子模块,用于利用元素数目以及标注概率计算模型,计算得到标注概率。
本申请实施例各装置中的各模块的功能可以参见上述方法中的对应描述,并具备相应的有益效果,在此不再赘述。
图6为用来实现本申请实施例的电子设备的框图。如图6所示,该电子设备包括:存储器601和处理器602,存储器601内存储有可在处理器602上运行的计算机程序。处理器602执行该计算机程序时实现上述实施例中的方法。存储器601和处理器602的数量可以为一个或多个。
该电子设备还包括:
通信接口603,用于与外界设备进行通信,进行数据交互传输。
如果存储器601、处理器602和通信接口603独立实现,则存储器601、处理器602和通信接口603可以通过总线相互连接并完成相互间的通信。该总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准体系结构(Extended Industry StandardArchitecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器601、处理器602及通信接口603集成在一块芯片上,则存储器601、处理器602及通信接口603可以通过内部接口完成相互间的通信。
本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现本申请实施例中提供的方法。
本申请实施例还提供了一种芯片,该芯片包括,包括处理器,用于从存储器中调用并运行存储器中存储的指令,使得安装有芯片的通信设备执行本申请实施例提供的方法。
本申请实施例还提供了一种芯片,包括:输入接口、输出接口、处理器和存储器,输入接口、输出接口、处理器以及存储器之间通过内部连接通路相连,处理器用于执行存储器中的代码,当代码被执行时,处理器用于执行申请实施例提供的方法。
应理解的是,上述处理器可以是中央处理器(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,处理器可以是支持进阶精简指令集机器(Advanced RISC Machines,ARM)架构的处理器。
进一步地,可选的,上述存储器可以包括只读存储器和随机存取存储器,还可以包括非易失性随机存取存储器。该存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以包括只读存储器(Read-OnlyMemory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以包括随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用。例如,静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic Random Access Memory,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(EnhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DR RAM)。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包括于本申请的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。