CN109802897B - 一种数据传输方法及通信设备 - Google Patents
一种数据传输方法及通信设备 Download PDFInfo
- Publication number
- CN109802897B CN109802897B CN201711153125.8A CN201711153125A CN109802897B CN 109802897 B CN109802897 B CN 109802897B CN 201711153125 A CN201711153125 A CN 201711153125A CN 109802897 B CN109802897 B CN 109802897B
- Authority
- CN
- China
- Prior art keywords
- sub
- communication device
- queue
- packet
- data packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1867—Arrangements specially adapted for the transmitter end
- H04L1/1887—Scheduling and prioritising arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1867—Arrangements specially adapted for the transmitter end
- H04L1/1874—Buffer management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/56—Queue scheduling implementing delay-aware scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/30—Peripheral units, e.g. input or output ports
- H04L49/3027—Output queuing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/50—Overload detection or protection within a single switching element
- H04L49/505—Corrective measures
- H04L49/506—Backpressure
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9084—Reactions to storage capacity overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0879—Burst mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例公开了一种数据传输方法及通信设备。本申请实施例方法包括:通信设备获取出队信息,出队信息指示通信设备中请求输出的队列及每个队列单次输出的目标数据量,通信设备维护有突发值,并基于突发值管理目标数据量,使得目标数据量不大于突发值,通信设备根据队列读取子包描述符PD,子PD由第一PD分割得到,子PD包括用于指示目标数据包的目标描述信息,第一PD包括用于指示第一数据包集合的第一描述信息,第一数据包集合包括目标数据包,第一数据包集合及子PD存储于包缓存,包缓存包括动态随机存取存储器DRAM,第一PD存储于控制缓存,控制缓存包括静态随机存取存储器SRAM,通信设备根据子PD确定并发送目标数据包。
Description
技术领域
本申请涉及通信领域,尤其涉及一种数据传输方法及通信设备。
背景技术
在当前的数据通信系统中,数据包存储于通信设备的包缓存中,包缓存通常由包描述符(PD,packet descriptor)管理,每个PD都管理有一定存储空间的包缓存,例如,一个8GB的包缓存通过数量为1M个PD来管理,那么每个PD管理8GB/1M=8KB的缓存空间,每个PD记录有其管理的缓存空间中存储的数据包的描述信息,比如包长,包数据在缓存空间里的起始和结束地址,以及把PD串成链表的PD指针等。
由于一个数据包有可能用不完一个PD管理的缓存空间,例如,数据包大小为1KB,而PD管理8KB的缓存空间,若一个PD管理的缓存空间只能存一个数据包就会造成包缓存的浪费,所以目前有一种拼包技术,允许多个数据包存储于同一PD管理的缓存空间。
不过这种拼包技术要求PD管理的缓存空间中存入的所有数据包作为一个整体来发送,例如,1KB的数据包按照100Mbps的带宽来发送,那么理想状态是每1KB*8/100Mbps=800us发送一个数据包,而使用这种拼包技术,一个PD管理的8KB缓存空间可以存8个1KB的数据包,这样就变成每8*800us=6400us发送8个数据包,对于突发容忍度较低的下行设备,一次无法接收这么多的数据包,进而就会导致下行设备的丢包。
发明内容
本申请实施例提供了一种数据传输方法及通信设备,用于降低下行设备出现丢包的可能性。
有鉴于此,本申请实施例第一方面提供了一种数据传输方法,包括:
通信设备获取出队信息,所述出队信息指示所述通信设备中请求输出的队列及每个队列单次输出的目标数据量,所述通信设备维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
所述通信设备根据所述队列读取子包描述符PD,所述队列包括第一PD,所述子PD由所述第一PD分割得到,所述子PD的数量不少于两个,所述子PD包括用于指示目标数据包的目标描述信息,所述第一PD包括用于指示第一数据包集合的第一描述信息,所述第一数据包集合包括所述目标数据包,所述第一数据包集合及所述子PD存储于包缓存,所述包缓存包括动态随机存取存储器DRAM,所述第一PD存储于控制缓存,所述控制缓存包括静态随机存取存储器SRAM;
所述通信设备根据所述子PD确定所述目标数据包;
所述通信设备发送所述目标数据包。
本实申请施例中,通信设备可以按照一定的调度策略生成出队信息,出队信息可以发送给某一个队列,也可以发送给多条队列,具体此处不做限定。
可以理解的是,不同的队列收到出队信息的频率也会不一样,例如,对于传输速度较大的流所在的队列,该队列收到出队信息的频率较大,对于传输速度较小的流所在的队列,该队列收到出队信息的频率较小。
由于下行设备对于流量突发容忍能力的不同,为了更好的控制流量突发,本实施例中通信设备维护的突发值理应越小越好,相应的,出队信息指示的每个队列单次输出的目标数据量也应当越小越好。
本申请实施例中,第一PD存储于包括SRAM的控制缓存,子PD及数据包存储于包括DRAM的包缓存,可以理解的是,SRAM相对于DRAM读写时延较低,而DRAM比SRAM成本低,所以将需要低读写时延的第一PD存储于控制缓存,而将占用较多存储空间的子PD及数据包存储于包缓存。
通信设备获取出队信息,该出队信息指示通信设备中等待输出的队列及每个队列单次输出的目标数据量,该目标数据量不大于通信设备维护的突发值,之后通信设备读取由第一PD分割得到的子PD,通信设备可以根据子PD确定目标数据包,该目标数据包属于第一PD指示的第一数据包集合,进而通信设备发送该目标数据包,由于通信设备中的每个PD都分割成了多个子PD,并且每个子PD指示的数据包大小不大于预置的突发值,所以通信设备发送的数据量不会超过预置的突发值,降低了下行设备出现丢包的可能性。
结合本申请实施例第一方面,本申请实施例第一方面的第一种实施方式中,所述通信设备根据所述队列读取子PD包括:
所述通信设备确定位于所述队列队首的所述第一PD,所述队首指所述队列中靠近输出端口的一端;
所述通信设备读取由所述第一PD分割得到的所述子PD。
本申请实施例中,通信设备需要按照队列的排序读取相应的PD,所以应当首先确定排在队列队首的第一PD。
结合本申请实施例第一方面的第一种实施方式,本申请实施例第一方面的第二种实施方式中,所述通信设备读取由所述第一PD分割得到的所述子PD包括:
所述通信设备获取子PD集合,所述子PD集合中的每个子PD由所述第一PD分割得到;
所述通信设备确定所述子PD集合的排序,所述排序指示所述通信设备读取所述子PD集合中每个子PD的先后顺序;
所述通信设备读取所述子PD集合中所述排序在第一位的所述子PD。
可以理解的是,通信设备确定了位于队列队首的第一PD之后,由于第一PD分割成了多个子PD组成的子PD集合,子PD集合中的每个子PD也存在排列顺序,因此通信设备需要根据子PD集合中每个子PD排序先读取出排序在第一位的子PD。
结合本申请实施例第一方面的第一种实施方式,本申请实施例第一方面的第三种实施方式中,所述通信设备确定位于所述队列队首的所述第一PD之后,所述方法还包括:
所述通信设备记录第一数据量,所述第一数据量为所述第一PD指示的所述第一数据包集合的大小。
通信设备从控制缓存中读取出第一PD也就可以获知第一PD所指示的第一数据量,进一步通信设备需要记录该第一数据量。
结合本申请实施例第一方面的第三种实施方式,本申请实施例第一方面的第四种实施方式中,所述通信设备发送所述目标数据包之后,所述方法还包括:
所述通信设备从所述第一数据量中减去所述目标数据量计算得到第二数据量,所述第二数据量为所述第一数据包集合减去所述目标数据包后剩余的第二数据包的大小。
本申请实施例中,通信设备每完成一次数据包的发送都会计算当前的第二数据量,因此第二数据量并非一个定值,随着数据包不断地输出,第二数据量会越来越小。
结合本申请实施例第一方面的第四种实施方式,本申请实施例第一方面的第五种实施方式中,所述方法还包括:
当所述通信设备累计的出队信息集合所指示的第三数据量大于所述第二数据量时,所述通信设备读取第二PD,所述第二PD用于指示所述第二数据包;
所述通信设备发送所述第二数据包。
本申请实施例中,数据包在输出的同时,通信设备仍会获取到新的出队信息,如果前一个出队信息所指示的数据量还未完全输出,这时后一个出队信息已经发送到该队列,那么后一个出队信息就会累计起来,可以理解的是,第三数据量也并非一个定值,第三数据量会随着出队信息的累计不断增加。
本申请实施例第二方面提供了一种通信设备,包括:
调度单元,用于发送出队信息,所述出队信息指示每个队列单次输出的目标数据量,所述调度单元维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
队列管理单元,用于根据收到的出队信息确定请求输出的队列,所述队列包括第一PD;
包缓存控制单元,用于根据所述队列读取子PD,进而根据读取到的所述子PD确定目标数据包,并发送所述目标数据包,所述子PD由所述第一PD分割得到,所述子PD的数量不少于两个,所述子PD包括用于指示目标数据包的目标描述信息,所述第一PD包括用于指示第一数据包集合的第一描述信息,所述第一数据包集合包括所述目标数据包,所述第一数据包集合及所述子PD存储于包缓存,所述包缓存包括动态随机存取存储器DRAM,所述第一PD存储于控制缓存,所述控制缓存包括静态随机存取存储器SRAM。
结合本申请实施例第二方面,本申请实施例第二方面的第一种实施方式中,
所述队列管理单元,还用于确定位于所述队列队首的所述第一PD,所述队首指所述队列中靠近输出端口的一端。
结合本申请实施例第二方面,本申请实施例第二方面的第二种实施方式中,
所述包缓存控制单元,具体用于读取子PD集合中排序在第一位的所述子PD,所述子PD集合中每个子PD由所述第一PD分割得到,所述排序指示所述包缓存控制单元读取所述子PD集合中每个子PD的先后顺序。
结合本申请实施例第二方面,本申请实施例第二方面的第三种实施方式中,所述通信设备还包括:
队列突发控制表,还用于记录第一数据量,所述第一数据量为所述第一PD指示的所述第一数据包集合的大小。
结合本申请实施例第二方面的第三种实施方式,本申请实施例第二方面的第四种实施方式中,
所述队列突发控制表,还用于记录第二数据量,所述第二数据量由所述第一数据量减去所述目标数据量计算得到,所述第二数据量为所述第一数据包集合减去所述目标数据包后剩余的第二数据包的大小。
结合本申请实施例第二方面的第四种实施方式,本申请实施例第二方面的第五种实施方式中,
所述队列突发控制表,还用于记录第三数据量,所述第三数据量为累计的出队信息集合所指示的数据量。
结合本申请实施例第二方面的第五种实施方式,本申请实施例第二方面的第六种实施方式中,
所述包缓存控制单元,还用于当所述第三数据量大于所述第二数据量时,读取第二PD,并发送所述第二PD指示的所述第二数据包。
本申请实施例第三方面提供了一种网络设备,包括:
处理系统、SRAM、DRAM、总线以及输入输出接口,所述处理系统包括处理器和转发控制器;
所述SRAM存储有第一PD,所述第一PD包括用于指示第一数据包集合的第一描述信息;
所述DRAM存储有子PD集合及第一数据包集合,所述子PD集合由所述第一PD分割得到,所述子PD集合中的子PD包括用于指示目标数据包的目标描述信息,所述第一数据包集合包括所述目标数据包;
所述处理器执行如下操作:
生成出队信息,所述出队信息指示所述通信设备中请求输出的队列及每个队列单次输出的目标数据量,所述通信设备维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
所述转发控制器执行如下操作:
根据所述队列读取所述子PD;
根据所述子PD确定所述目标数据包;
发送所述目标数据包。
本申请实施例第四方面提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面数据传输方法中的流程。
本申请实施例第五方面提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面数据传输方法中的流程。
从以上技术方案可以看出,本申请实施例具有以下优点:
本实施例中,通信设备获取出队信息,该出队信息指示通信设备中请求输出的队列及每个队列单次输出的目标数据量,该目标数据量不大于通信设备维护的突发值,之后通信设备读取由第一PD分割得到的子PD,通信设备可以根据子PD确定目标数据包,该目标数据包属于第一PD指示的第一数据包集合,进而通信设备发送该目标数据包,由于通信设备中的每个PD都分割成了多个子PD,并且每个子PD指示的数据包大小不大于突发值,所以通信设备每次发送的数据量不会超过突发值,降低了下行设备出现丢包的可能性。
附图说明
图1为调度数据包出队的系统结构示意图;
图2为本申请数据传输方法一个实施例示意图;
图3为本申请数据传输方法另一实施例示意图;
图4为本申请通信设备一个实施例示意图;
图5为本申请通信设备另一实施例示意图;
图6为本申请通信设备另一实施例示意图。
具体实施方式
本申请实施例提供了一种数据传输方法,用于避免因通信设备输出流量突发引起的下行设备丢包。
本申请实施例可以应用于局域网、广域网等交换网络中的通信设备,图1是通信设备在调度数据包出队的场景中的部分系统结构示意图,其中包括:调度单元101、队列管理单元102、控制缓存103、包缓存控制单元104以及包缓存105,以上各系统单元由总线连接在一起,下面结合以上提到的系统单元对通信设备调度数据包出队的具体流程进行描述:
调度单元101负责向队列管理单元102提供出队调度,队列管理单元102中包含有由PD指针组成的队列,队列管理单元102根据出队调度确定对应的队列,控制缓存103中存储有PD的集合,之后队列管理单元102从控制缓存103中读取位于该队列队首的PD指针所对应的PD,包缓存控制单元104接收队列管理单元102发送的PD,进而包缓存控制单元104可以根据该PD中包含的数据包的起始地址、终止地址及包长等信息从包缓存105中读取出相应的数据包,并最终将读取到数据包发送出去。
可以理解的是,队列管理单元102中的队列是由PD指针组成的逻辑队列,PD指针指示数据包的地址信息,如初始位置或终止位置,相应的,每条逻辑队列都有在包缓存105中对应的由数据包组成的实体队列,实体队列每次发送都需要以一个PD对应的数据量为基本单位安排相应的数据包出队,对于突发容忍度较差的下行设备而言,有可能无法单次接收一个PD对应的数据量,这种流量的突发会造成下行设备出现丢包的现象,所以需要在通信设备中设置一种控制输出流量突发的机制。
为便于理解,下面对本申请实施例中的具体流程进行描述:
请参阅图2,本申请实施例中数据传输方法的一个实施例包括:
201、通信设备设置突发值。
本实施例中,通信设备会设置一个突发值用来控制通信设备中每个队列单次输出的数据量,可以理解的是,突发值应当小于一个PD所指示的数据包集合的大小,由于不同的下行设备对于突发容忍的能力不同,在实际应用中,该突发值应当尽可能的小以保证突发容忍度较差的下行设备不会因单次传输的数据量大而发生丢包,因此该突发值的数值以实际应用为准,具体此处不做限定。
202、通信设备获取出队信息。
本实施例中,通信设备中会根据预置的调度策略确定需要输出数据包的队列并生成出队信息,通信设备会按照设定的频率向该队列发送出队信息,出队信息可以指示该队列单次需要输出的目标数据量,可以理解的是,该目标数据量不大于突发值。
需要说明的是,通信设备中不同队列中会包括不同的流,流是指具有相同特征的数据包的集合,不同的流的传输速度也会不同,可以理解的是,对于传输速度较大的流来说,发送出队信息的频率较高,相应的,对于传输速度较小的流来说,发送出队信息的频率就较低。
需要说明的是,通信设备确定的队列可以是一条也可以是多条,具体此处不做限定。
203、通信设备根据出队信息读取子PD。
本实施例中,通信设备根据出队信息确定了需要输出数据包的队列,随后从该队列中确定位于队首的第一PD,进一步读取由第一PD分割得到的子PD。
需要说明的是,该队列中的每个PD都会分割成一定数量的子PD,每个子PD至少可以指示一个数据包,可以理解的是,PD划分为多个子PD是一种逻辑上的划分,例如,PD指示数据量为8KB的数据包集合,该数据包集合包括8个1KB的数据包,那么PD存储有该数据包集合的初始位置、终止位置及包长等信息,而PD分割得到的8个子PD分别存储有每个1KB数据包的起始位置、终止位置及包长等信息。
需要说明的是,PD会根据突发值对PD进行分割从而得到子PD,例如,一个PD指示8KB大小的数据包,突发值设置为1KB,出队信息所指示的目标数据量也按照突发值设置为1KB,如果定义每个子PD指示1KB大小的数据包,相应的,一个PD就分割成8个子PD,如果定义每个子PD指示512B大小的数据包,那么一个PD就分割成16子PD,可以理解的是,PD是以等分的方式进行分割的,具体一个PD分割得到的子PD的数量以实际应用为准,具体此处不做限定。
需要说明的是,PD存储于由静态随机存取存储器(SRAM,static random accessmemory)组成的控制缓存中,由于每个PD都分割成了多个子PD,并且每个子PD也需要存储比如包长,包数据在缓存空间里的起始地址和结束地址等信息,所以每个子PD也需要占用一定的存储空间来存储与数据包的相关信息,虽然每个PD占用的存储空间与每个子PD占用的存储空间相差不大,但子PD的数量肯定远远多于PD的数量,因此子PD总共需要占用的存储空间要远大于PD占用的存储空间,如果将所有的子PD也存储于由SRAM组成的控制缓存中,花费的成本会非常高,故在本实施例中,将子PD存储于包缓存中,包缓存是由动态随机存取存储器(DRAM,dynamic random access memory)组成的,DRAM相对于SRAM成本要低很多,将子PD存储于包缓存中可以有效地节约成本。
204、通信设备根据子PD确定目标数据包。
本实施例中,通信设备可以根据子PD确定该子PD指示的目标数据包,可以理解的是,通信设备根据读取到的子PD可以获知目标数据包的起始地址、终止地址及包长等信息,进而从包缓存中读取出该目标数据包。
需要说明的是,PD分割得到的子PD集合中的子PD仍然按顺序排列,也就是说,队列会根据出队信息指示的目标数据量按顺序依次读取相应的子PD。
205、通信设备发送目标数据包。
本实施例中,通信设备从包缓存中读取读取到目标数据包之后就可以将目标数据包进行发送,在目标数据包输出之后,通信设备会根据后续收到的出队信息重复执行如202至205所述的步骤。
本实施例中,通信设备获取出队信息,该出队信息指示通信设备中等待输出的队列及每个队列单次输出的目标数据量,该目标数据量不大于通信设备维护的突发值,之后通信设备读取由第一PD分割得到的子PD,通信设备可以根据子PD确定目标数据包,该目标数据包属于第一PD指示的第一数据包集合,进而通信设备发送该目标数据包,由于通信设备中的每个PD都分割成了多个子PD,并且每个子PD指示的数据包大小不大于预置的突发值,所以通信设备每次发送的数据量不会超过预置的突发值,避免了下行设备的丢包。
图2所示的实施例介绍了一种控制通信设备输出流量突发的实施方式,可以有效地控制流量的突发,然而通信设备中不同的流会有不同的传输速度,如果传输速度较大的流也严格按照图2所示的方式发送数据包,会在一定程度上限制该流的传输速度,下面在图2所示实施例的基础上介绍一种更灵活的数据传输方法。
请参阅图3,本申请实施例中数据传输方法的另一个实施例包括:
301、通信设备设置突发值。
302、通信设备获取出队信息。
303、通信设备根据出队信息读取子PD。
304、通信设备根据子PD确定目标数据包。
305、通信设备发送目标数据包。
本实施例中,步骤301至步骤305与图2所示的实施例中的步骤201至步骤205类似,具体此处不再赘述。
306、通信设备记录第一数据量。
本实施例中,通信设备在从队列中确定了位于队首的第一PD之后会将第一PD对应的第一数据量记录到队列突发控制表中,可以理解的是,该第一数据量为第一PD所指示的数据包集合的大小。
需要说明的是,步骤306与步骤305之间没有固定的时序关系,可以先执行步骤305,也可以先执行步骤306,又或者可以同时执行步骤305及步骤306,具体此处不做限定。
307、通信设备从第一数据量中减去目标数据量得到第二数据量。
本实施例中,通信设备发送了目标数据包之后会从第一数据量中减去目标数据量得到第二数据量,可以理解的是,第一PD指示的数据包集合减去已经输出的目标数据包后剩余的第二数据包的大小总和即为第二数据量。
需要说明的是,第二数据量并不是一个定值,随着队列中的数据包不断地输出,第二数据量会不断地变小。
308、通信设备判断第三数据量是否大于或等于第二数据量,若是,则执行步骤309。
本实施例中,如果前一个出队信息所指示的数据量还未完全输出,这时后一个出队信息已经发送到该队列,那么后一个出队信息就会累计起来,而累计的出队信息所指示的数据量即为第三数据量,可以理解的是,第三数据量也并非一个定值,第三数据量会随着出队信息的累计不断增加,通信设备在每输出一次出队信息指示的目标数据量后会判断当前的第三数据量是否大于或等于当前的第二数据量。
309、通信设备发送第二数据包。
本实施例中,当第三数据量大于或等于第二数据量时,通信设备发送第二数据包,可以理解的是,通信设备从控制缓存中可以读取出第一PD,获知整个PD所指示的数据包集合的相关描述信息,同时通信设备之前也获知了已经输出的数据包的相关描述信息,所以通信设备可以读取到指示第二数据包的第二PD,根据第二PD也就可以从包缓存中读取第二数据包并发送。
需要说明的是,通信设备从包缓存中读取子PD会有一定的时延,对于传输速度较大的流来说,向其发送出队信息的频率也较高,所以就有可能出现上一条出队信息指示的数据量还未完全输出,后一条出队信息就已经到达,那么出队信息就会累计,而对于传输速度较小的流来说,发送出队信息的频率相对较低,在前一个出队信息指示的数据量输出完成之后,下一个出队信息还没有送达,就不会出现出队信息累计的情况,可以理解的是,本实施例中,对于传输速度较小的流,由于出队信息不会累计,还是会按照图2所示的实施例的实施方式传输数据,而对于传输速度较大的流,出队信息会不断累计,为了保证流的传输速度不受较大的限制,通过本实施例的判定方式调整数据的传输方式,这样对于整个通信设备而言,传输速度较小的流可以最大程度的控制其流量的突发,传输速度较大的流可以保证传输速度不受较大的限制,这样的数据传输方式更灵活。
下面以通过一个举例场景来描述图3所示的实施例:
例如,一个PD对应8KB的数据量,突发值设置为1KB,出队信息也设置为1KB,一个PD分割为8个子PD,每个子PD对应1KB的数据量,那么队列每次输出1KB的数据量,在输出了2KB的数据量后,此时累计了2个出队信息,而PD管理的8KB数据量还剩下6KB,2个出队信息对应2KB的数据量小于6KB,所以继续按照每次1KB的数据量输出,在输出了4KB的数据量后,PD管理的8KB数据量还剩下4KB,此时已经累计了4个出队信息,4个出队信息对应4KB的数据量,那么就一次性将剩下的4KB数据量发送出去。
上面对本申请实施例中的拥塞流识别方法进行了描述,下面对本申请实施例中的网络设备进行描述:
请参阅图4,本申请实施例中通信设备的一个实施例包括:调度单元401、队列管理单元402、控制缓存403、包缓存404、包缓存控制单元405。
调度单元401用于发送出队信息,所述出队信息指示每个队列单次输出的目标数据量,所述调度单元维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
队列管理单元402用于根据收到的出队信息确定请求输出的队列,所述队列包括第一PD;
控制缓存403存储有第一PD,所述第一PD包括用于指示第一数据包集合的第一描述信息;
包缓存404存储有子PD集合及第一数据包集合,所述子PD集合由所述第一PD分割得到,所述子PD集合中的子PD包括用于指示目标数据包的目标描述信息,所述第一数据包集合包括所述目标数据包;
包缓存控制单元405用于根据所述队列读取子PD,进而根据读取到的所述子PD确定目标数据包,并发送所述目标数据包。
其中,队列管理单元402还用于确定位于所述队列队首的所述第一PD,所述队首指所述队列中靠近输出端口的一端。
其中,包缓存控制单元405具体用于读取子PD集合中排序在第一位的所述子PD,所述子PD集合中每个子PD由所述第一PD分割得到,所述排序指示所述包缓存控制单元读取所述子PD集合中每个子PD的先后顺序。
本申请实施例中,调度单元401发送出队信息,队列管理单元402根据出队信息确定请求输出的队列并确定位于该队列队首的第一PD,该出队信息指示了每个队列单次输出的目标数据量,该目标数据量不大于通信设备维护的突发值,随后包缓存控制单元405从包缓存404中读取由第一PD分割得到的子PD,进而根据读取到的所述子PD确定目标数据包,并发送所述目标数据包,由于通信设备中的每个PD都分割成了多个子PD,并且每个子PD指示的数据包大小不大于突发值,所以通信设备每次发送的数据量不会超过突发值,降低了下行设备出现丢包的可能性。
为便于理解,下面基于一种更灵活的数据传输方法对本申请实施例中的通信设备进行描述:
请参阅图5,本申请实施例中通信设备的一个实施例包括:调度单元501、队列管理单元502、控制缓存503、包缓存504、包缓存控制单元505、队列突发控制表506。
调度单元501用于发送出队信息,所述出队信息指示每个队列单次输出的目标数据量,所述调度单元维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
队列管理单元502用于根据收到的出队信息确定请求输出的队列,所述队列包括第一PD;
控制缓存503存储有第一PD,所述第一PD包括用于指示第一数据包集合的第一描述信息;
包缓存504存储有子PD集合及第一数据包集合,所述子PD集合由所述第一PD分割得到,所述子PD集合中的子PD包括用于指示目标数据包的目标描述信息,所述第一数据包集合包括所述目标数据包;
包缓存控制单元505用于根据所述队列读取子PD,进而根据读取到的所述子PD确定目标数据包,并发送所述目标数据包。
其中,队列管理单元502还用于确定位于所述队列队首的所述第一PD,所述队首指所述队列中靠近输出端口的一端。
其中,包缓存控制单元505具体用于读取子PD集合中排序在第一位的所述子PD,所述子PD集合中每个子PD由所述第一PD分割得到,所述排序指示所述包缓存控制单元读取所述子PD集合中每个子PD的先后顺序。
其中,队列突发控制表506用于记录第一数据量,所述第一数据量为所述第一PD指示的所述第一数据包集合的大小。
队列突发控制表506还可用于记录第二数据量,所述第二数据量由所述第一数据量减去所述目标数据量计算得到,所述第二数据量为所述第一数据包集合减去所述目标数据包后剩余的第二数据包的大小。
队列突发控制表506还可用于记录第三数据量,所述第三数据量为累计的出队信息集合所指示的数据量。
进一步,包缓存控制单元505还用于当所述第三数据量大于所述第二数据量时,读取第二PD,并发送所述第二PD指示的所述第二数据包。
上面从模块化功能实体的角度对本发明实施例中的通信设备进行描述,下面从硬件处理的角度对本发明实施例中的通信设备进行描述:
请参阅图6,本申请中通信设备一个实施例可以包括一个或一个以上处理系统601,SRAM602,DRAM603,输入输出接口604,有线或无线网络接口605,电源606。
该处理系统进一步包括处理器6011和转发控制器6012。
SRAM602存储有PD,DRAM603存储有数据包及子PD。
本实施例中,处理系统601可以执行前述图2和图3所示实施例中通信设备所执行的操作,具体此处不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,read-onlymemory)、随机存取存储器(RAM,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (15)
1.一种数据传输方法,其特征在于,包括:
通信设备获取出队信息,所述出队信息指示所述通信设备中请求输出的队列及每个队列单次输出的目标数据量,所述通信设备维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
所述通信设备根据所述队列读取子包描述符PD,所述队列包括第一PD,所述子PD由所述第一PD分割得到,所述子PD的数量不少于两个,所述子PD包括用于指示目标数据包的目标描述信息,所述第一PD包括用于指示第一数据包集合的第一描述信息,所述第一数据包集合包括所述目标数据包,所述第一数据包集合及所述子PD存储于包缓存,所述包缓存包括动态随机存取存储器DRAM,所述第一PD存储于控制缓存,所述控制缓存包括静态随机存取存储器SRAM;
所述通信设备根据所述子PD确定所述目标数据包;
所述通信设备发送所述目标数据包。
2.根据权利要求1所述的方法,其特征在于,所述通信设备根据所述队列读取子PD包括:
所述通信设备确定位于所述队列队首的所述第一PD,所述队首指所述队列中靠近输出端口的一端;
所述通信设备读取由所述第一PD分割得到的所述子PD。
3.根据权利要求2所述的方法,其特征在于,所述通信设备读取由所述第一PD分割得到的所述子PD包括:
所述通信设备获取子PD集合,所述子PD集合中的每个子PD由所述第一PD分割得到;
所述通信设备确定所述子PD集合的排序,所述排序指示所述通信设备读取所述子PD集合中每个子PD的先后顺序;
所述通信设备读取所述子PD集合中所述排序在第一位的所述子PD。
4.根据权利要求2所述的方法,其特征在于,所述通信设备确定位于所述队列队首的所述第一PD之后,所述方法还包括:
所述通信设备记录第一数据量,所述第一数据量为所述第一PD指示的所述第一数据包集合的大小。
5.根据权利要求4所述的方法,其特征在于,所述通信设备发送所述目标数据包之后,所述方法还包括:
所述通信设备从所述第一数据量中减去所述目标数据量计算得到第二数据量,所述第二数据量为所述第一数据包集合减去所述目标数据包后剩余的第二数据包的大小。
6.根据权利要求5所述的方法,其特征在于,所述通信设备发送所述目标数据包之后,所述方法还包括:
当所述通信设备累计的出队信息集合所指示的第三数据量大于所述第二数据量时,所述通信设备读取第二PD,所述第二PD指示所述第二数据包;
所述通信设备发送所述第二数据包。
7.一种通信设备,其特征在于,包括:
调度单元,用于发送出队信息,所述出队信息指示每个队列单次输出的目标数据量,所述调度单元维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
队列管理单元,用于根据收到的出队信息确定请求输出的队列,所述队列包括第一包描述符PD;
包缓存控制单元,用于根据所述队列读取子PD,进而根据读取到的所述子PD确定目标数据包,并发送所述目标数据包,所述子PD由所述第一PD分割得到,所述子PD的数量不少于两个,所述子PD包括用于指示目标数据包的目标描述信息,所述第一PD包括用于指示第一数据包集合的第一描述信息,所述第一数据包集合包括所述目标数据包,所述第一数据包集合及所述子PD存储于包缓存,所述包缓存包括动态随机存取存储器DRAM,所述第一PD存储于控制缓存,所述控制缓存包括静态随机存取存储器SRAM。
8.根据权利要求7所述的通信设备,其特征在于,
所述队列管理单元,还用于确定位于所述队列队首的所述第一PD,所述队首指所述队列中靠近输出端口的一端。
9.根据权利要求7所述的通信设备,其特征在于,
所述包缓存控制单元,具体用于读取子PD集合中排序在第一位的所述子PD,所述子PD集合中每个子PD由所述第一PD分割得到,所述排序指示所述包缓存控制单元读取所述子PD集合中每个子PD的先后顺序。
10.根据权利要求7所述的通信设备,其特征在于,所述通信设备还包括:
队列突发控制表,用于记录第一数据量,所述第一数据量为所述第一PD指示的所述第一数据包集合的大小。
11.根据权利要求10所述的通信设备,其特征在于,
所述队列突发控制表,还用于记录第二数据量,所述第二数据量由所述第一数据量减去所述目标数据量计算得到,所述第二数据量为所述第一数据包集合减去所述目标数据包后剩余的第二数据包的大小。
12.根据权利要求11所述的通信设备,其特征在于,
所述队列突发控制表,还用于记录第三数据量,所述第三数据量为累计的出队信息集合所指示的数据量。
13.根据权利要求12所述的通信设备,其特征在于,
所述包缓存控制单元,还用于当所述第三数据量大于所述第二数据量时,读取第二PD,并发送所述第二PD指示的所述第二数据包。
14.一种通信设备,其特征在于,包括:
处理系统、SRAM、DRAM、总线以及输入输出接口,所述处理系统包括处理器和转发控制器;
所述SRAM存储有第一包描述符PD,所述第一PD包括用于指示第一数据包集合的第一描述信息;
所述DRAM存储有子PD集合及第一数据包集合,所述子PD集合由所述第一PD分割得到,所述子PD集合中的子PD包括用于指示目标数据包的目标描述信息,所述第一数据包集合包括所述目标数据包;
所述处理器执行如下操作:
生成出队信息,所述出队信息指示所述通信设备中请求输出的队列及每个队列单次输出的目标数据量,所述通信设备维护有突发值,并基于所述突发值管理所述目标数据量,使得所述目标数据量不大于所述突发值;
所述转发控制器执行如下操作:
根据所述队列读取所述子PD;
根据所述子PD确定所述目标数据包;
发送所述目标数据包。
15.一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使得计算机执行如权利要求1至6中任意一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711153125.8A CN109802897B (zh) | 2017-11-17 | 2017-11-17 | 一种数据传输方法及通信设备 |
PCT/CN2018/111426 WO2019095942A1 (zh) | 2017-11-17 | 2018-10-23 | 一种数据传输方法及通信设备 |
US16/874,191 US11297011B2 (en) | 2017-11-17 | 2020-05-14 | Data transmission method and communications device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711153125.8A CN109802897B (zh) | 2017-11-17 | 2017-11-17 | 一种数据传输方法及通信设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109802897A CN109802897A (zh) | 2019-05-24 |
CN109802897B true CN109802897B (zh) | 2020-12-01 |
Family
ID=66539317
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711153125.8A Active CN109802897B (zh) | 2017-11-17 | 2017-11-17 | 一种数据传输方法及通信设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11297011B2 (zh) |
CN (1) | CN109802897B (zh) |
WO (1) | WO2019095942A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6982250B2 (ja) * | 2018-07-31 | 2021-12-17 | 日本電信電話株式会社 | パケット転送装置、方法、及びプログラム |
US12224942B2 (en) * | 2020-03-05 | 2025-02-11 | Nippon Telegraph And Telephone Corporation | Network management systems, edge devices, network management devices, and programs |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101594302A (zh) * | 2009-07-01 | 2009-12-02 | 华为技术有限公司 | 数据出队的方法及装置 |
CN102971997A (zh) * | 2010-01-18 | 2013-03-13 | 马维尔国际有限公司 | 包括数据分段和数据描述分段的分组缓冲器 |
US8429315B1 (en) * | 2011-06-24 | 2013-04-23 | Applied Micro Circuits Corporation | Stashing system and method for the prevention of cache thrashing |
CN103581055A (zh) * | 2012-08-08 | 2014-02-12 | 华为技术有限公司 | 报文的保序方法、流量调度芯片及分布式存储系统 |
CN103647726A (zh) * | 2013-12-11 | 2014-03-19 | 华为技术有限公司 | 一种报文调度方法及装置 |
CN106537858A (zh) * | 2014-08-07 | 2017-03-22 | 华为技术有限公司 | 一种队列管理的方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101222444B (zh) * | 2008-02-04 | 2011-11-09 | 华为技术有限公司 | 缓存数据处理方法、装置及系统 |
CN104426797B (zh) * | 2013-08-27 | 2018-03-13 | 华为技术有限公司 | 一种基于队列的通信方法及装置 |
EP3295628B1 (en) * | 2015-05-13 | 2020-11-11 | Cisco Technology, Inc. | Dynamic protection of shared memory used by output queues in a network device |
CN106356088A (zh) * | 2015-07-15 | 2017-01-25 | 深圳市中兴微电子技术有限公司 | 一种数据处理方法及其装置 |
CN108462652B (zh) * | 2017-07-31 | 2019-11-12 | 新华三技术有限公司 | 一种报文处理方法、装置和网络设备 |
-
2017
- 2017-11-17 CN CN201711153125.8A patent/CN109802897B/zh active Active
-
2018
- 2018-10-23 WO PCT/CN2018/111426 patent/WO2019095942A1/zh active Application Filing
-
2020
- 2020-05-14 US US16/874,191 patent/US11297011B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101594302A (zh) * | 2009-07-01 | 2009-12-02 | 华为技术有限公司 | 数据出队的方法及装置 |
CN102971997A (zh) * | 2010-01-18 | 2013-03-13 | 马维尔国际有限公司 | 包括数据分段和数据描述分段的分组缓冲器 |
US8429315B1 (en) * | 2011-06-24 | 2013-04-23 | Applied Micro Circuits Corporation | Stashing system and method for the prevention of cache thrashing |
CN103581055A (zh) * | 2012-08-08 | 2014-02-12 | 华为技术有限公司 | 报文的保序方法、流量调度芯片及分布式存储系统 |
CN103647726A (zh) * | 2013-12-11 | 2014-03-19 | 华为技术有限公司 | 一种报文调度方法及装置 |
CN106537858A (zh) * | 2014-08-07 | 2017-03-22 | 华为技术有限公司 | 一种队列管理的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US20200274831A1 (en) | 2020-08-27 |
WO2019095942A1 (zh) | 2019-05-23 |
US11297011B2 (en) | 2022-04-05 |
CN109802897A (zh) | 2019-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6938766B2 (ja) | パケット制御方法およびネットワーク装置 | |
US9800513B2 (en) | Mapped FIFO buffering | |
US20220303217A1 (en) | Data Forwarding Method, Data Buffering Method, Apparatus, and Related Device | |
US12101260B1 (en) | Multi-destination traffic handling optimizations in a network device | |
CN113711551A (zh) | 促进网络接口控制器(nic)中的动态命令管理的系统和方法 | |
EP2466824B1 (en) | Service scheduling method and device | |
CN104885420B (zh) | 用于管理多个数据分组的方法、系统和介质 | |
CN103647726B (zh) | 一种报文调度方法及装置 | |
US11700209B2 (en) | Multi-path packet descriptor delivery scheme | |
US10419370B2 (en) | Hierarchical packet buffer system | |
CN103731368B (zh) | 一种处理报文的方法和装置 | |
US8306045B2 (en) | Packet forwarding apparatus and method for discarding packets | |
US9769092B2 (en) | Packet buffer comprising a data section and a data description section | |
EP2526478B1 (en) | A packet buffer comprising a data section an a data description section | |
CN109802897B (zh) | 一种数据传输方法及通信设备 | |
CN103428099A (zh) | 一种通用多核网络处理器流量控制的方法 | |
WO2020168563A1 (zh) | 一种存储器的管理方法及装置 | |
US10764198B2 (en) | Method to limit packet fetching with uncertain packet sizes to control line rate | |
CN103442091B (zh) | 一种数据传输方法及装置 | |
US20140211649A1 (en) | Reducing latency of at least one stream that is associated with at least one bandwidth reservation | |
WO2012149742A1 (zh) | 信号保序方法和装置 | |
US8976667B1 (en) | Method and system for programmable delay before transmission pausing | |
US9154569B1 (en) | Method and system for buffer management | |
CN105099932B (zh) | 基于直通转发技术的调度方法及装置 | |
JP5772132B2 (ja) | データ転送装置、データ転送方法および情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |