发明内容
基于此,有必要针对上述技术问题,提供一种能够在校验数据包checksum错误时提供打断重组功能并且提高数据包合并效率的传输系统的数据包处理方法、装置、电子设备及存储介质。
第一方面,提供一种传输系统的数据包处理方法,应用于数据包处理装置,所述传输系统包括网络数据传输发起方、数据包处理装置、接收侧缓存、发送侧缓存和处理器,所述接收侧缓存包括接收侧工作缓存和接收侧空闲缓存,所述发送侧缓存包括发送侧工作缓存和发送侧空闲缓存,所述方法包括:
响应于确定所述接收侧工作缓存的读指针和所述接收侧工作缓存的写指针不同,从所述接收侧工作缓存中获取所述网络数据传输发起方发送的外部描述符;
根据所述外部描述符记载的物理地址获取数据包并根据所述外部描述符生成所述数据包对应的内部描述符,其中所述数据包包括数据包头和有效数据;
根据所述内部描述符对所述数据包进行核心处理,其中所述核心处理包括数据包头预取处理、数据包头解析处理、过滤标记处理、负载均衡计算处理和原始序列排序处理;
根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包,其中所述序列查找表包含数据传输序列,所述后处理包括过滤处理、接收队列重定位处理、序列打断重组处理和序列清除处理;
根据接收队列向所述处理器输出所述目标数据包,其中所述目标数据包包括合并传输数据包和非合并传输数据包。
在其中一个实施例中,所述根据所述内部描述符对所述数据包进行核心处理包括:
根据所述内部描述符获取所述数据包头,其中所述数据包头包括数据链路层对应的以太网数据包头、网络协议层对应的网络协议数据包头和传输层对应的传输控制协议数据包头;
对所述数据包头进行字段解析并生成所述数据包头对应的解析信息,其中所述解析信息包括五元组数据;
根据过滤逻辑确定所述数据包是否需要过滤,其中所述过滤逻辑包括地址过滤逻辑、协议过滤逻辑、端口过滤逻辑和运算符过滤逻辑;
若是,则生成所述数据包对应的过滤标记并根据所述过滤标记更新所述内部描述符;
若否,则根据所述五元组数据与哈希算法计算出所述数据包的哈希值并根据所述解析信息和所述哈希值更新所述内部描述符;
根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号,并根据所述原始序列标记和所述原始序列号对所述数据包执行原始排序操作,其中所述序列判定逻辑包括数据链路层判定逻辑、网络协议层判定逻辑和传输层判定逻辑,所述原始序列标记包括序列起始标记、序列有效标记、序列结束标记和序列并行标记。
在其中一个实施例中,所述根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号并根据所述原始序列标记和所述原始序列号对所述数据包执行所述原始排序操作包括:
根据所述内部描述符确定所述数据包对应的原始序列号并确定所述数据传输序列对应的传输序列号中是否存在和所述原始序列号一致的工作序列号;
若是,则确定所述数据包属于所述工作序列号对应的工作传输序列并确定所述原始序列标记对应的标记值,其中所述标记值包括第一标记值或第二标记值,所述第一标记值表示对所述原始序列标记的肯定,所述第二标记值表示对所述原始序列标记的否定;
将所述数据包写入所述工作传输序列;
若否,则根据所述数据包生成最新的工作传输序列并确定所述原始序列标记对应的标记值;
将所述数据包写入所述最新的工作传输序列。
在其中一个实施例中,所述确定所述数据包属于所述工作序列号对应的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述序列起始标记的标记值为第二标记值并确定所述数据包的数据包类型是否为合并类型;
若否,则确定所述序列有效标记的标记值为第二标记值;
若是,则根据所述序列判定逻辑对所述内部描述符进行判定并确定所述序列有效标记的标记值为第一标记值;
查询所述数据传输序列对应的传输方式,其中传输方式包括串行传输和并行传输;
响应于所述传输方式为并行传输,确定所述序列并行标记的标记值为第一标记值;
响应于所述传输方式为串行传输,确定所述序列并行标记的标记值为第二标记值;
确定所述内部描述符中是否存在被置位的描述符;
若是,则确定所述序列结束标记的标记值为第一标记值;
若否,则确定所述序列结束标记的标记值为第二标记值。
在其中一个实施例中,所述根据所述数据包生成最新的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述数据传输序列对应的序列数是否达到所述序列查找表规定的序列数量阈值;
若是,则根据最久最近未使用规则确定所述数据传输序列中的丢弃序列并删除所述丢弃序列;
根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值;
若否,则根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值。
在其中一个实施例中,所述根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述序列起始标记的标记值为第一标记值并确定所述数据包的数据包类型是否为合并类型;
若否,则确定所述序列有效标记的标记值为第二标记值;
若是,则根据所述序列判定逻辑对所述内部描述符进行判定并确定所述序列有效标记的标记值为第一标记值;
查询所述数据传输序列对应的传输方式,其中传输方式包括串行传输和并行传输;
响应于所述传输方式为并行传输,确定所述序列并行标记的标记值为第一标记值;
响应于所述传输方式为串行传输,确定所述序列并行标记的标记值为第二标记值;
确定所述内部描述符中是否存在被置位的描述符;
若是,则确定所述序列结束标记的标记值为第一标记值;
若否,则确定所述序列结束标记的标记值为第二标记值。
在其中一个实施例中,所述根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号并根据所述原始序列标记和所述原始序列号对所述数据包执行原始排序操作之后包括:
确定所述数据传输序列的时间窗是否被触发;
若是,则确定所述时间窗被触发的数据传输序列为数据清除序列并生成数据清除序列对应的序列清除标记;
根据所述序列清除标记更新所述数据清除序列的内部描述符。
在其中一个实施例中,所述根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包包括:
响应于确定所述内部描述符中存在所述过滤标记,对所述数据包进行所述过滤处理并确定进行过滤处理的数据包为所述非合并传输数据包;
响应于确定所述内部描述符中存在序列清除标记,清除数据清除序列;
响应于确定所述序列有效标记的标记值为第二标记值,确定所述数据包为所述非合并传输数据包;
响应于确定所述内部描述符中不存在所述过滤标记和所述序列清除标记且所述序列有效标记的标记值为第一标记值,根据所述负载均衡计算处理的处理结果对所述数据传输序列进行所述接收队列重定位处理;
根据所述原始序列排序处理的处理结果对所述数据传输序列中的错误序列进行所述序列打断重组处理;
根据所述数据传输序列和所述数据包生成目标数据包。
在其中一个实施例中,所述根据所述负载均衡计算处理的处理结果对所述数据传输序列进行所述接收队列重定位处理包括:
确定所述处理器对应的处理方式;
响应于确定所述处理方式为多核处理,根据所述负载均衡计算处理的处理结果中的哈希值和用户配置的重定位表确定所述处理器对应的接收队列;
响应于确定所述处理方式为单核处理,根据所述数据传输序列对应的数据类型确定所述接收队列。
在其中一个实施例中,所述根据所述原始序列排序处理的处理结果对所述数据传输序列中的错误序列进行所述序列打断重组处理包括:
根据先进先出规则读取所述数据包头并根据所述数据包头的头长度确定所述有效数据对应的偏移量;
根据所述内部描述符中的数据包地址和所述偏移量获取所述数据包的有效数据并根据所述有效数据计算所述数据包对应的校验和;
确定所述校验和是否错误;
若是,则确定所述校验和错误的数据包为错误数据包并确定所述错误数据包为所述非合并传输数据包;
对所述错误数据包对应的错误序列进行序列打断重组处理并将所述错误数据包对应的序列有效标记修改为第二标记值。
在其中一个实施例中,所述根据所述数据传输序列和所述数据包生成目标数据包包括:
确定所述数据传输序列中的合并数据包的数据包数量并确定所述数据包数量是否达到用户设置的第一包数量阈值;
若是,则确定所述数据包数量达到所述第一包数量阈值的数据传输序列为目标序列;
对所述目标序列进行序列打断重组处理并确定所述目标序列中的合并数据包为所述合并传输数据包;
若否,则根据所述数据包的原始序列标记和所述数据传输序列生成所述目标数据包。
在其中一个实施例中,所述根据所述数据包的原始序列标记和所述数据传输序列生成所述目标数据包包括:
确定所述序列起始标记的标记值是否为第一标记值;
若否,则根据所述序列结束标记和所述数据传输序列中的合并数据包生成所述合并传输数据包;
若是,则确定所述数据包对应的工作传输序列的写入量是否为1;
若是,则对所述工作传输序列进行所述打断重组处理并确定所述数据包为所述非合并传输数据包。
在其中一个实施例中,所述根据所述序列结束标记和所述数据传输序列中的合并数据包生成所述合并传输数据包包括:
确定所述序列结束标记对应的标记值是否为第一标记值;
若是,则根据所述数据包和所述合并数据包生成所述合并传输数据包;
若否,则根据所述数据包和所述合并数据包生成最新的合并数据包。
在其中一个实施例中,所述方法还包括:
确定所述目标数据包的数量是否达到所述处理器设置的第二包数量阈值;
若是,则根据所述目标数据包对应的内部描述符生成中断信息并向所述处理器发送所述中断信息。
另一方面,还提供一种传输系统中的数据包处理装置,所述传输系统包括网络数据传输发起方、数据包处理装置、接收侧缓存、发送侧缓存和处理器,所述接收侧缓存包括接收侧工作缓存和接收侧空闲缓存,所述发送侧缓存包括发送侧工作缓存和发送侧空闲缓存,所述装置包括:
获取模块,响应于确定所述接收侧工作缓存的读指针和所述接收侧工作缓存的写指针不同,用于从所述接收侧工作缓存中获取所述网络数据传输发起方发送的外部描述符;
生成模块,用于根据所述外部描述符记载的物理地址获取数据包并根据所述外部描述符生成所述数据包对应的内部描述符,其中所述数据包包括数据包头和有效数据;
核心处理模块,用于根据所述内部描述符对所述数据包进行核心处理,其中所述核心处理包括数据包头预取处理、数据包头解析处理、过滤标记处理、负载均衡计算处理和原始序列排序处理;
后处理模块,用于根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包,其中所述序列查找表包含数据传输序列,所述后处理包括过滤处理、接收队列重定位处理、序列打断重组处理和序列清除处理;
输出模块,用于根据接收队列向所述处理器输出所述目标数据包,其中所述目标数据包包括合并传输数据包和非合并传输数据包。
上述网络传输系统的数据包处理方法,响应于确定所述接收侧工作缓存的读指针和所述接收侧工作缓存的写指针不同,从所述接收侧工作缓存中获取所述网络数据传输发起方发送的外部描述符;根据所述外部描述符记载的物理地址获取数据包并根据所述外部描述符生成所述数据包对应的内部描述符,其中所述数据包包括数据包头和有效数据;根据所述内部描述符对所述数据包进行核心处理,其中所述核心处理包括数据包头预取处理、数据包头解析处理、过滤标记处理、负载均衡计算处理和原始序列排序处理;根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包,其中所述序列查找表包含数据传输序列,所述后处理包括过滤处理、接收队列重定位处理、序列打断重组处理和序列清除处理;根据接收队列向所述处理器输出所述目标数据包,其中所述目标数据包包括合并传输数据包和非合并传输数据包。在考虑GRO合并规则的前提下,支持数据包过滤,端CPU负载均衡,GRO序列打断与刷新重组能力,兼顾GRO效率及吞吐率并提供针对发送异常的容错处理。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,本发明提供一种网络数据传输系统,该系统包括网络数据传输发起方(initiator)、数据包处理装置、接收侧缓存(RX Ring buffer)、发送侧缓存(TX Ring buffer)和端CPU(处理器),接收侧缓存包括接收侧工作缓存(RX completering)和接收侧空闲缓存(RX free ring),发送侧缓存包括发送侧工作缓存(TX completering)和发送侧空闲缓存(TX free ring)。如图2所示,其中网络数据传输发起方 、接收侧缓存和数据包处理装置交互时,网络数据传输发起方主要用于包括:[1]发送数据前,比较接收侧空闲缓存的 读写指针(Rptr,Wptr),如果该队列不空,则从接收侧空闲缓存中申请一个空缓存(图2中的1:读取buffer描述符)后Rptr增加1,表明空buffer获取成功(buffer大小一般考虑数据链路层的限制,比如以太网数据包一般是1500字节,IP数据包最长可能是65535字节)。[2]将所需要发送的数据包传输至该buffer描述符所指向的物理存储的位置。[3]将该buffer的描述符写入RX complete ring ,并更新Wptr增加1。其中数据包处理装置、发送侧缓存和端CPU交互时,数据包处理装置针对不能合入GRO序列的数据包主要用于包括:[1]从TX free ring上申请一个空buffer(图2中的5:读取buffer描述符)Rptr增加1,表明空buffer获取成功(buffer 大小目前方案中在初始化按等大小空间分配,每个4096字节 );[2]将所需要发送的数据包传输至该buffer描述符所指向的物理存储的位置;[3]将该buffer的描述符写入TX complete ring ,并更新Wptr增加1 (图2中的6),表明新增1个TX数据包待端CPU处理。数据包处理装置针对能合入GRO序列的数据包主要用于包括:整体流程与不能合入GRO序列的数据包流程类似,但在申请空buffer上略有不同。对于GRO序列的第一个数据包申请新的buffer,后续同属于当前GRO序列符合合并的数据包在当前buffer未使用完时不会申请新的buffer,只有当前buffer使用完毕后但GRO数据包未输出完成时才申请新的数据buffer在写入TX complete ring也略有不同,由于GRO序列会占用多个数据buffer(目前方案中硬件允许单一GRO序列最多占用16个4KB buffer) ,因此GRO序列的描述符更新是1个或多个描述符更新至TX complete ring中,对应Wptr会一次性增加1或者所使用的buffer数。另外端CPU主要用于包括:采用中断或者查询的方式获取需要处理的TX complete ring buffer描述符数量,之后DMA读取相应buffer描述符,依照buffer描述所指向的物理存储位置处理相应的数据包,之后修改TX complete ring 读指针Rptr,根据处理的数量增加rptr(增加1或多)图2中的8),每次处理完一个buffer的数据,即可将该buffer所对应的描述符写入TX free ring , 修改TX free ring Wptr 增加1,保证 TX buffer循环利用。
如图3所示,为RX complete 多ring控制逻辑,由多个独立的RX complete ring控制逻辑,远端/近端访问仲裁及多ring分发逻辑和DMA构成,其中远端访问仲裁逻辑: 将多complete ring的描述符读取请求仲裁,轮转服务多ring通过DMA取回待处理的来自initiator的buffer描述符。近端访问仲裁:处理多complete ring 的描述符转换逻辑仲裁请求,轮转服务多ring,通过内部传输将数据buffer描述符流转至描述符转换逻辑多ring分发逻辑:与远端访问仲裁逻辑协同,将外部取回的数据buffer描述符流转给发起请求的complete ring。单一的RX complete ring:核心功能是读取数据buffer 描述符及修改指针(整体流程已在系统工作流程介绍),该逻辑基于时间片(设定的周期数)触发或近端urgent请求触发描述符读取。可由软件选择基于快速时钟(500Mhz)或慢速时钟(32Khz)的时间片触发,时间片选择逻辑也可以基于内外处理速率统计(一定时间内的远端描述符存储fifo读写速度比),引入时间片触发的好处是既可以处理内外速率匹配的问题,也可以通过配置不同的时间片大小或者快/慢速时间片选择,简单控制ring之间的优先级,比如各ring都选择快速时间片模式,定义low latency ring的时间片为40个时钟周期,普通ring的时间片为200时钟周期。这样低延迟的ring在同等时间内触发5次描述符读取,普通ring只触发1次描述符读取。另引入硬件近端urgent请求,该功能可以选择禁用。其目的是应对内部处理能力足够高,外部描述符读取因时间片未到达设定周期数而未触发的场景。
如图4所示 ,为RX free多ring 控制逻辑,由多个独立的RX free ring控制逻辑,RX free buffer多ring dispatch逻辑,远端访问仲裁/多ring选择逻辑及DMA构成,其中: RX free buffer 多ring dispatch逻辑依照ring id 将回收的buffer描述符写入对应ring的近端描述符存储fifo 远端仲裁逻辑及多ring选择逻辑,将多个free ring的描述符写回请求仲裁,轮转服务多ring,多ring选择逻辑与远端仲裁逻辑协同选择获得仲裁权free ring的输出 RX free ring控制逻辑核心功能buffer回收(free buffer描述符写回)及指针控制,该逻辑与RX complete ring控制类似。基于时间片和硬件近端urgent请求调用DMA将回收的描述符写回free ring,更新相应free ring的写指针,以便后续initiator循环使用。 TX方向,ring控制与RX类似,区别为自适应GRO硬件申请TX free buffer,利用该buffer填充处理后的数据并将该buffer描述符写入TX complete ring, 端CPU从TXcomplete ring 读取对应的buffer描述符处理GRO后的数据,之后将该buffer描述符重新写回TX free ring,保证TX buffer循环使用。
在一个实施例中,如图5所示,本发明提供一种传输系统的数据包处理方法,应用于数据包处理装置,所述传输系统包括网络数据传输发起方、数据包处理装置、接收侧缓存、发送侧缓存和处理器,所述接收侧缓存包括接收侧工作缓存和接收侧空闲缓存,所述发送侧缓存包括发送侧工作缓存和发送侧空闲缓存,所述方法包括:
S501、响应于确定所述接收侧工作缓存的读指针和所述接收侧工作缓存的写指针不同,从所述接收侧工作缓存中获取所述网络数据传输发起方发送的外部描述符;
S502、根据所述外部描述符记载的物理地址获取数据包并根据所述外部描述符生成所述数据包对应的内部描述符,其中所述数据包包括数据包头和有效数据;
S503、根据所述内部描述符对所述数据包进行核心处理,其中所述核心处理包括数据包头预取处理、数据包头解析处理、过滤标记处理、负载均衡计算处理和原始序列排序处理;
S504、根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包,其中所述序列查找表包含数据传输序列,所述后处理包括过滤处理、接收队列重定位处理、序列打断重组处理和序列清除处理;
S505、根据接收队列向所述处理器输出所述目标数据包,其中所述目标数据包包括合并传输数据包和非合并传输数据包。
具体的,如图6所示,用于“异构”网络环境互联标准框架OSI(Open SystemInterconnection Reference Model)应运而生,OSI定义了网络互联的七层模型(如图6)所示,数据从发送方根据各层定义层层打包(DATA分层根据协议增加图6相应Header:AH,PH,SH,TH,NH及DH)进入物理层发送,数据接收方根据各层定义层层拆包将物理层数据恢复到应用层用户数据。GRO作为面向连接及网络加速的网络智能连接设备的主要功能,是通过将接收到的多个TCP/UDP数据聚合在一个SKB结构形成一个大的数据包,然后传递给协议栈处理,这样可以减少上层协议栈处理SKB的开销,合并了多个SKB的超级SKB能够一次性通过协议栈,从而降低CPU负载。以处理多个以太网的1.5KB(1500字节)数据包为例,多个网络数据包受限于网络状态可能连续到来,也可能间隔到来。假设未开启GRO功能,那么在没有其他业务需要处理时,CPU进入休眠状态,但数据包到来后CPU被唤醒,但因为数据包较小,CPU处理完一个数据包后再次进入休眠。这样处理多个数据包CPU被频繁唤醒或频繁响应中断,CPU负载增加。另外像网路传输常使用的checksum,需要按bit计算,使用运行在端CPU上的软件完成效率不如专用硬件加速器效率高。当开启GRO功能后,其抽象流程如图7所示,独立的数据包(源目的相同,数据包属性相同如都是IPV4数据包等)经GRO后合并成一个数据包其用户数据部分包含用户数据1,用户数据2及用户数据3。GRO后的帧头携带GRO特性信息,如GRO有效,整个数据包长等。数据包在经过数据链路层如图8所示,如果GRO功能启用,则判断是否满足合并规则(源目的相同,网络数据包类型相同等),将多个数据包合并成一个数据包后交协议栈处理。以图9为例,5个数据包假设满足合并规则从属于同一GRO序列(如图9中GRO_FLOW= 0)且payload checksum计算正确,最终可合并成一个GRO数据包(Frame GRO)交运行在端CPU的协议栈处理。GRO序列标记含义GRO_VLD=1表征GRO序列有效,GRO_NEW=1且GRO_VLD=1表征该packet为GRO序列的第一个数据包,GRO_END表明该数据包为当前GRO序列的最后一个数据包。如图10所示,Frame2尽管基于header判断属于相应的GRO序列,且GRO序列已标记,但在读取payload计算checksum发现checksum错误,因此无法最终合入当前GRO序列,而后续的Frame3和Frame4尽管基于header检查属于该GRO序列,且payload checksum计算无误,但因为并没有GRO_NEW标记,因此Frame3和Frame4只能作为独立数据包提交协议栈处理。如图10所示,协议栈会处理4个数据包(包括Frame0/1合并的GRO数据包,Frame2所代表的payload checksum计算错误的异常数据包,以及因为Frame3/4本该合入GRO序列但因为Frame2 checksum错误而无法合入,只能以独立数据包进入协议栈。
如图11所示,基于兼容性的考虑,外部initiator描述符的多样性与硬件内部处理的归一性。将外部多种initiator描述符转为自适应GRO硬件统一处理的内部描述符(类似将外部多种总线协议转换为内部定义的统一协议)。以图12为例,为归一化处理,描述符转换逻辑会将不同initiator定义的描述符映射到内部描述符的固定字段,内部描述符由5个word组成共160比特。包含基础部分及用户比特两部分。基础信息包含:[1]64比特buffer地址;[2]代表initiator的SRC_id[3:0](比如WiFi作为initiator 编码为0000,Modem作为initiator编码为0001);[3]buffer大小,如果作为complete buffer 需要标记buffer内数据包长度;[4]initiator使用的ring id用户比特48位包含:[1]分析数据包Header(LEV3逻辑)直接获得并更新至内部描述符预定字段的相关信息,如图12中IP版本,硬件判断产生的关键信息,如LEV3逻辑判断生成的GRO序列{GRO_VLD,GRO_NEW,GRO_END,GRO_ CONTEXT _FLOW[3:0]},LEV4 RSS逻辑产生的负载均衡后的dst ring_ id [3:0](接收队列id)以及用户定义的需要携带至协议栈的相关信息。如图13所示,根据内部描述符表示的数据包位置获取数据包Header;之后进行 Header解析,将解析相关信息更新至内部描述符传;然后根据配置的过滤规则产生数据包过滤标记并更新至内部描述符;最后依据源目的数据包类型等产生GRO序列标记(GRO_VLD, GRO_NEW,GRO_END,GRO_CONTEXT_ FLOW [3:0])并更新至内部描述符。根据上述的内部描述符,执行下列操作:[1]获取原始数据包位置,payload 偏移位置后获取数据包payload;[2]header和payload在进入内部buffer时计算checksum;[3]自适应的硬件GRO序列打断与重组刷新逻辑处理依据GRO序列打断与重组的原则包括时间窗,GRO合并的原始数据包数量阈值判定及checksum计算结果,打断原始GRO序列并重组新的GRO序列及相应标记。数据包输出逻辑包括:[1]根据LEV4传递的内部描述符中是否是lowlatency ring(当前硬件默认ring_id为0作为低延迟队列) 或normal data ring ,ring_id 与LEV6 TX free ring 交互,申请TX相应free ring 的空buffer;[2]获得TX空buffer后,将来自LEV5的数据包填入,完成最终GRO序列数据包物理内存合并;[3]数据包传输完成后,将该buffer的描述符填入LEV6 TX complete ring中。如图14所示,输出逻辑包括:[1]GRO序列数据包输出至物理存储,完成GRO数据包输出及存储空间上的拼接,组成最终GRO数据包,并刷新header中的数据包长度为最终的GRO数据包长度;[2]TX free buffer申请;[3]GRO 完成后将所占用的1个或多个buffer的描述符依据接收ring id写入 TX completering buffer中。如图15所示,依据与端CPU的约定按数据包数或时间阈值产生对应的中断给端CPU处理。
在其中一个实施例中,所述根据所述内部描述符对所述数据包进行核心处理包括:
根据所述内部描述符获取所述数据包头,其中所述数据包头包括数据链路层对应的以太网数据包头、网络协议层对应的网络协议数据包头和传输层对应的传输控制协议数据包头;
对所述数据包头进行字段解析并生成所述数据包头对应的解析信息,其中所述解析信息包括五元组数据;
根据过滤逻辑确定所述数据包是否需要过滤,其中所述过滤逻辑包括地址过滤逻辑、协议过滤逻辑、端口过滤逻辑和运算符过滤逻辑;
若是,则生成所述数据包对应的过滤标记并根据所述过滤标记更新所述内部描述符;
若否,则根据所述五元组数据与哈希算法计算出所述数据包的哈希值并根据所述解析信息和所述哈希值更新所述内部描述符;
根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号并根据所述原始序列标记和所述原始序列号对所述数据包执行原始排序操作,其中所述序列判定逻辑包括数据链路层判定逻辑、网络协议层判定逻辑和传输层判定逻辑,所述原始序列标记包括序列起始标记、序列有效标记、序列结束标记和序列并行标记。
具体的,如图16所示,根据内部描述符所指向的buffer位置,因为各类数据类型header长度不一致,DMA取数据包header长度为软件配置最大长度,取回后再作header解析,确定header所占真实长度,计算数据包payload所在的偏移位置。以IP 数据包为例,IPheader一般20字节最大可扩展到60字节,但header长度字段只有经过header解析才能准确确定,因此L1数据包预取逻辑DMA预取的数据包长度是软件配置的字节数保证针对任何数据包类型都能将数据包header完成取回。比如以上述IP数据包为例,软件配置的预取长度为80字节这样即使IP header扩展到60字节在没有进行header解析前预取逻辑也能保证将header完整取回。对当前header解析,如分析当前数据包是否属于TCP数据包,是否是IPV4/IPV6类数据包等,将对应信息更新至内部描述符对应字段作为控制字段指示后续处理;对预取回的header(包括数据链路层的以太网header,IP层的IP header以及传输层的TCPheader等)逐字段解析,如根据取回的header 比特[3:0]确定当前IP版本。如图17所示,根据配置的数据包过滤规则过滤当前数据包,如不支持某一地址段发送的数据包或者某种类型的数据包,如果符合过滤规则,产生丢弃标识符并更新在内部描述符的相应控制字段。目前使用的过滤规则由软件配置,支持IP地址过滤,协议过滤,端口过滤及比较运算符;可配置同时有效或部分有效,影响最终描述符中的filter字段决定改数据包是否被过滤掉。依据GRO合并规则(源目的端相同,数据包类型相同等)产生对应的GRO序列指示(GRO_ VLD,GRO_NEW,GRO_END 和GRO_CONTEST_FLOW[3:0])并更新至内部描述符相应控制字段。
在其中一个实施例中,所述根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号并根据所述原始序列标记和所述原始序列号对所述数据包执行所述原始排序操作包括:
根据所述内部描述符确定所述数据包对应的原始序列号并确定所述数据传输序列对应的传输序列号中是否存在和所述原始序列号一致的工作序列号;
若是,则确定所述数据包属于所述工作序列号对应的工作传输序列并确定所述原始序列标记对应的标记值,其中所述标记值包括第一标记值或第二标记值,所述第一标记值表示对所述原始序列标记的肯定,所述第二标记值表示对所述原始序列标记的否定;
将所述数据包写入所述工作传输序列;
若否,则根据所述数据包生成最新的工作传输序列并确定所述原始序列标记对应的标记值;
将所述数据包写入所述最新的工作传输序列。
具体的,如图18所示,需要基于当前数据包是否从属于一个GRO_ CONTEST_FLOW需要将当前数据包的内部描述符的相应字段(图18中的①②③)经过数据链路层GRO判定逻辑,网络层(IP)GRO判定逻辑以及传输层GRO判定逻辑与GRO context flow0~15并行比较,如果比较结果与其中一个GRO context flow相应字段相等,则确定GRO_VLD有效并且从属于该GRO context flow,硬件支持对于配置的数据包类型不做GRO处理即使GRO功能使能,比如硬件默认对ACK类型的数据包以及已经做过分片的数据包不产生GRO_VLD,即GRO_ VLD=0。
在其中一个实施例中,所述确定所述数据包属于所述工作序列号对应的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述序列起始标记的标记值为第二标记值并确定所述数据包的数据包类型是否为合并类型;
若否,则确定所述序列有效标记的标记值为第二标记值;
若是,则根据所述序列判定逻辑对所述内部描述符进行判定并确定所述序列有效标记的标记值为第一标记值;
查询所述数据传输序列对应的传输方式,其中传输方式包括串行传输和并行传输;
响应于所述传输方式为并行传输,确定所述序列并行标记的标记值为第一标记值;
响应于所述传输方式为串行传输,确定所述序列并行标记的标记值为第二标记值;
确定所述内部描述符中是否存在被置位的描述符;
若是,则确定所述序列结束标记的标记值为第一标记值;
若否,则确定所述序列结束标记的标记值为第二标记值。
具体的,如果确定数据包属于工作序列号对应的工作传输序列,则表明该数据包并不是GRO序列的第一个数据包,即GRO_VLD=1,GRO_NEW=0。GRO_CONTEST_FLOW[3:0]=1,则代表目前支持并行GRO序列处理,若否,则硬件只支持一个GRO_FLOW那么假设连续的两个数据包从属于不同的GRO序列,限于硬件不支持多GRO flow,只能将前一个GRO序列输出,再处理当前GRO。关于GRO_END的产生:目前支持的条件是当内部描述符的TCP.urg/psh/rst/syn/cwr/fin相应字段被置位则代表发生了网络拥塞等状态需要尽快将数据包提交协议栈,因此此时需要置GRO_END=1提示当前GRO序列尽快输出。
在其中一个实施例中,所述根据所述数据包生成最新的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述数据传输序列对应的序列数是否达到所述序列查找表规定的序列数量阈值;
若是,则根据最久最近未使用规则确定所述数据传输序列中的丢弃序列并删除所述丢弃序列;
根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值;
若否,则根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值。
具体的,目前支持的条件是如果与现存的GRO Context flow比较未匹配,且GRO_context_flow还未被完全占用,则视为是新的GRO序列,如果当前GRO_context _flow完全被占用,则需要按最近最久未使用的原则结束对应GRO_context_flow并用新的替换,比如新到来的数据包相应字段与GRO_ Context_flow对应字段比较均未匹配,而GRO_context_flow7最近最久未使用(未发生过匹配),则插入GRO_VLD=1 , GRO_END=1,GRO_context _flow=0x0111的dummy描述符,示意后续输出逻辑输出GRO_ context_ flow7的对应GRO序列,用新的数据包相应字段替换GRO_context_flow查找表项GRO_context_flow7的相应字段,同时标记当前内部描述符GRO_NEW=1 GRO_VLD=1。
在其中一个实施例中,所述根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述序列起始标记的标记值为第一标记值并确定所述数据包的数据包类型是否为合并类型;
若否,则确定所述序列有效标记的标记值为第二标记值;
若是,则根据所述序列判定逻辑对所述内部描述符进行判定并确定所述序列有效标记的标记值为第一标记值;
查询所述数据传输序列对应的传输方式,其中传输方式包括串行传输和并行传输;
响应于所述传输方式为并行传输,确定所述序列并行标记的标记值为第一标记值;
响应于所述传输方式为串行传输,确定所述序列并行标记的标记值为第二标记值;
确定所述内部描述符中是否存在被置位的描述符;
若是,则确定所述序列结束标记的标记值为第一标记值;
若否,则确定所述序列结束标记的标记值为第二标记值。
具体的,如上所述,标记当前内部描述符GRO_NEW=1 GRO_VLD=1;GRO_CONTEST_FLOW[3:0]=1,则代表目前支持并行GRO序列处理,若否,则GRO_CONTEST_FLOW[3:0]=0,代表硬件只支持一个GRO_FLOW那么假设连续的两个数据包从属于不同的GRO序列,限于硬件不支持多GRO flow,只能将前一个GRO序列输出,再处理当前GRO。关于GRO_END的产生:目前支持的条件是当内部描述符的TCP.urg/psh/rst/syn/cwr/fin相应字段被置位则代表发生了网络拥塞等状态需要尽快将数据包提交协议栈,因此此时需要置GRO_END=1提示当前GRO序列尽快输出。
在其中一个实施例中,所述根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号并根据所述原始序列标记和所述原始序列号对所述数据包执行原始排序操作之后包括:
确定所述数据传输序列的时间窗是否被触发;
若是,则确定所述时间窗被触发的数据传输序列为数据清除序列并生成所述数据清除序列对应的序列清除标记;
根据所述序列清除标记更新所述数据清除序列的内部描述符。
具体的,引入GRO context flow时间窗目的是避免发送方故障造成的长时间无后续数据包传输,造成当前GRO序列无法结束,比如GRO context flow0时间窗计数到达,但后续数据包未到达(如图19所示),则插入GRO_VLD=1 ,RSSGRO_END=1,GRO_context_flow=0x0111的dummy描述符,示意后续输出逻辑输出GRO_context_flow0的对应GRO序列,之后对对应的GRO_context_flow进行序列清除,之后作为未使用的GRO context flow供后续使用。
在其中一个实施例中,所述根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包包括:
响应于确定所述内部描述符中存在所述过滤标记,对所述数据包进行所述过滤处理并确定进行过滤处理的数据包为所述非合并传输数据包;
响应于确定所述内部描述符中存在序列清除标记,清除数据清除序列;
响应于确定所述序列有效标记的标记值为第二标记值,确定所述数据包为所述非合并传输数据包;
响应于确定所述内部描述符中不存在所述过滤标记和所述序列清除标记且所述序列有效标记的标记值为第一标记值,根据所述负载均衡计算处理的处理结果对所述数据传输序列进行所述接收队列重定位处理;
根据所述原始序列排序处理的处理结果对所述数据传输序列中的错误序列进行所述序列打断重组处理;
根据所述数据传输序列和所述数据包生成目标数据包。
具体的,如图20所示,如上所述,如果内部描述符插入了GRO_VLD=1 , GRO_END=1GRO_context_flow=0x0111的dummy描述符(序列清除标记),之后将对应的GRO_context_flow现场清除并作为未使用的GRO context flow供后续使用。如上所述,如果内部描述符中插入了过滤标记,则说明该数据包直接输出,无需等待合并。如果内部描述符中没有过滤标记和序列清除标记,且GRO_ VLD=1,则确定输出到端CPU的接收队列并确定是否对数据传输队列进行重组打断处理。
在其中一个实施例中,所述根据所述负载均衡计算处理的处理结果对所述数据传输序列进行所述接收队列重定位处理包括:
确定所述处理器对应的处理方式;
响应于确定所述处理方式为多核处理,根据所述负载均衡计算处理的处理结果中的哈希值和用户配置的重定位表确定所述处理器对应的接收队列;
响应于确定所述处理方式为单核处理,根据所述数据传输序列对应的数据类型确定所述接收队列。
具体的,如图21所示,如上所述,对于正常数据包,正常读取数据包header(header数据由图21中①流转至图21中②),依照内部描述符表征的数据包地址及前级逻辑传递的payload偏移(在前级header解析逻辑中已获得header准确长度,因此可知payload相对于数据包存储地址的偏移量)发起payload读取请求(图21中③),将payload读回后经payload fifo(图21中④)流转至后级逻辑负载均衡逻辑在端CPU是多核情况下可使能,保证提交任务在多CPU将均衡,而不是集中提交给某一个CPU。如图22所示,其输入来自前级逻辑计算的toplitz hash值,依照hash值的低8位和软件配置的重定位表确定最终的接收队列(dst_ring_id),如果不使能负载均衡(RSS_EN=0)则选择固定配置的接收队列,同时硬件支持对特定数据包类型(可配置,目前默认为ack类型数据包)提交固定接收队列(目前为ring0)。
在其中一个实施例中,所述根据所述原始序列排序处理的处理结果对所述数据传输序列中的错误序列进行所述序列打断重组处理包括:
根据先进先出规则读取所述数据包头并根据所述数据包头的头长度确定所述有效数据对应的偏移量;
根据所述内部描述符中的数据包地址和所述偏移量获取所述数据包的有效数据并根据所述有效数据计算所述数据包对应的校验和;
确定所述校验和是否错误;
若是,则确定所述校验和错误的数据包为错误数据包并确定所述错误数据包为所述非合并传输数据包;
对所述错误数据包对应的错误序列进行序列打断重组处理并将所述错误数据包对应的序列有效标记修改为第二标记值。
具体的,如图23所示,依照内部描述符表征的数据包地址及前级逻辑传递的payload偏移(在前级header解析逻辑中已获得header准确长度),可以得知payload相对于数据包存储地址的偏移量。关于checksum计算逻辑,为保证硬件效率设计ping/pongheader和payload存储,可以在写入时计算checksum,这样在读出数据时已经能判断checksum正确与否更新至内部描述符,在当前数据包header及payload读取完成后,与RXring buffer管理协同,申请将该buffer对应的描述符写回ring id对应的free bufferring(空闲环形缓存区)以保证buffer循环利用。如图24所示,为数据传输序列的后处理逻辑,其中包括内部描述符解析、checksum结果反馈、数据包读取、数据包数量统计反馈等步骤。如图25所示,如果确定checksum出错,则将checksum出错的数据包从GRO序列中剔除,并标记为错误数据包单独输出,重组刷新后续的GRO数据包形成新的GRO序列。上述具体操作包括:(1)插入打断当前GRO_Context _flow的dummy 描述符相应字段{dummy_desc=1,GRO_VLD =1,GRO_ END =1,GRO_FLOW=当前GRO_CONTEST_FLOW};(2)清除GRO_CONTEXT _FLOW查找表该CONTEXT的相关表项内容{GRO_FLOW _EXIST=0, GRO_ NEW=0,GRO_END=0};(3)更新当前描述符GRO_VLD=0,作为普通数据包输出。
在其中一个实施例中,所述根据所述数据传输序列和所述数据包生成目标数据包包括:
确定所述数据传输序列中的合并数据包的数据包数量并确定所述数据包数量是否达到用户设置的第一包数量阈值;
若是,则确定所述数据包数量达到所述第一包数量阈值的数据传输序列为目标序列;
对所述目标序列进行序列打断重组处理并确定所述目标序列中的合并数据包为所述合并传输数据包;
若否,则根据所述数据包的原始序列标记和所述数据传输序列生成所述目标数据包。
具体的,如上所述,对于GRO_Flow当前合并数据包数量达到设定的第一包数量阈值,则会打断当前GRO序列,从阈值+1处重组形成新的GRO序列,比如阈值为5,则将前5个数据包合并而成的合并数据包确定为合并传输数据包并向端CPU输出,第六个数据包为新的数据传输序列的第一个数据包,此时将其内部描述符中的GRO_NEW修改为1;若否,则继续等待要合并的数据包满足第一包数量阈值。具体操作包括:(1)插入打断当前GRO_Context _flow的dummy 描述符相应字段{dummy_desc=1,GRO_VLD =1,GRO_ END =1,GRO_FLOW=当前GRO_CONTEST_FLOW};(2)更新当前描述符GRO_VLD=1 GRO_NEW=1;(3)设置GRO_CONTEXT_FLOW查找表该CONTEXT的相关表项内容{GRO_FLOW_EXIST=1,GRO_NEW=1,GRO_END=0}。
在其中一个实施例中,所述根据所述数据包的原始序列标记和所述数据传输序列生成所述目标数据包包括:
确定所述序列起始标记的标记值是否为第一标记值;
若否,则根据所述序列结束标记和所述数据传输序列中的合并数据包生成所述合并传输数据包;
若是,则确定所述数据包对应的工作传输序列的写入量是否为1;
若是,则对所述工作传输序列进行所述打断重组处理并确定所述数据包为所述非合并传输数据包。
具体的,确定GRO_NEW是否为1,若是,说明该数据包是该数据传输序列中的第一个数据包;之后确定GRO_CONTEXT_FLOW中相应CONTEXT的GRO_FLOW_EXIST是否为1;若是,则说明该序列只能存在一个非合并传输数据包,此时直接输出该数据包,具体操作包括:(1)插入打断当前GRO_Context_flow的dummy 描述符相应字段{dummy_desc=1,GRO_VLD=1,GRO_END=1,GRO_FLOW=当前GRO_CONTEST_FLOW},(2)当前描述符保持不变,置CONTEXT的相关表项内容{GRO_FLOW_EXIST=1, GRO_ NEW=1,GRO_END=0};若否,则等待后续写入该序列中的数据包,然后进行合并操作,具体操作包括:置GRO_CONTEXT_FLOW查找表相该CONT EXT的关表项内容{GRO_FLOW_EXIST=1,GRO_NEW=1,GRO_END=0}。
在其中一个实施例中,所述根据所述序列结束标记和所述数据传输序列中的合并数据包生成所述合并传输数据包包括:
确定所述序列结束标记对应的标记值是否为第一标记值;
若是,则根据所述数据包和所述合并数据包生成所述合并传输数据包;
若否,则根据所述数据包和所述合并数据包生成最新的合并数据包。
具体的,如上所述,若GRO_NEW=0,说明该数据包不是该序列中的第一个数据包。此时再确定GRO_END是否为1,若是,说明该序列中所有的数据包都要合并成一个合并输出数据包并输出到端CPU,之后重新形成新的GRO序列,具体操作包括:清除GRO_CONTEXT_FLOW查找表相关表项内容{GRO_FLOW_EXIST=0,GRO_NEW=0,GRO_END=0};若否,则该序列中所有的数据包都合并成一个合并数据包但不输出到端CPU,等待后续写入的其他数据包来合并。
在其中一个实施例中,所述方法还包括:
确定所述目标数据包的数量是否达到所述处理器设置的第二包数量阈值;
若是,则根据所述目标数据包对应的内部描述符生成中断信息并向所述处理器发送所述中断信息。
具体的,端CPU可通过查询TX complete ring的读写指针,读写指针不同代表有需要处理的数据包;数据包处理装置也可以依照端CPU配置的任务完成数目产生中断信息给端CPU,此时数据包处理装置停止工作,端CPU获取需要处理的合并传输数据包或者非合并传输数据包。
本申请的方案有如下有益效果:
1)在考虑GRO合并规则的前提下,支持数据包过滤,端CPU负载均衡,GRO序列打断与刷新重组能力,兼顾GRO效率及吞吐率并提供针对发送异常的容错处理;
2)通过其可扩展的描述符转换逻辑可灵活兼容多种initiator,可有效应用于数据中心及智能互联设备。
应该理解的是,虽然图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次执行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,还提供一种传输系统中的数据包处理装置,所述传输系统包括网络数据传输发起方、数据包处理装置、接收侧缓存、发送侧缓存和处理器,所述接收侧缓存包括接收侧工作缓存和接收侧空闲缓存,所述发送侧缓存包括发送侧工作缓存和发送侧空闲缓存,所述装置包括:
获取模块2601,响应于确定所述接收侧工作缓存的读指针和所述接收侧工作缓存的写指针不同,用于从所述接收侧工作缓存中获取所述网络数据传输发起方发送的外部描述符;
生成模块2602,用于根据所述外部描述符记载的物理地址获取数据包并根据所述外部描述符生成所述数据包对应的内部描述符,其中所述数据包包括数据包头和有效数据;
核心处理模块2603,用于根据所述内部描述符对所述数据包进行核心处理,其中所述核心处理包括数据包头预取处理、数据包头解析处理、过滤标记处理、负载均衡计算处理和原始序列排序处理;
后处理模块2604,用于根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包,其中所述序列查找表包含数据传输序列,所述后处理包括过滤处理、接收队列重定位处理、序列打断重组处理和序列清除处理;
输出模块2605,用于根据接收队列向所述处理器输出所述目标数据包,其中所述目标数据包包括合并传输数据包和非合并传输数据包。
在其中一个实施例中,所述核心处理模块根据所述内部描述符对所述数据包进行核心处理包括:
根据所述内部描述符获取所述数据包头,其中所述数据包头包括数据链路层对应的以太网数据包头、网络协议层对应的网络协议数据包头和传输层对应的传输控制协议数据包头;
对所述数据包头进行字段解析并生成所述数据包头对应的解析信息,其中所述解析信息包括五元组数据;
根据过滤逻辑确定所述数据包是否需要过滤,其中所述过滤逻辑包括地址过滤逻辑、协议过滤逻辑、端口过滤逻辑和运算符过滤逻辑;
若是,则生成所述数据包对应的过滤标记并根据所述过滤标记更新所述内部描述符;
若否,则根据所述五元组数据与哈希算法计算出所述数据包的哈希值并根据所述解析信息和所述哈希值更新所述内部描述符;
根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号,并根据所述原始序列标记和所述原始序列号对所述数据包执行原始排序操作,其中所述序列判定逻辑包括数据链路层判定逻辑、网络协议层判定逻辑和传输层判定逻辑,所述原始序列标记包括序列起始标记、序列有效标记、序列结束标记和序列并行标记。
在其中一个实施例中,所述核心处理模块根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号并根据所述原始序列标记和所述原始序列号对所述数据包执行所述原始排序操作包括:
根据所述内部描述符确定所述数据包对应的原始序列号并确定所述数据传输序列对应的传输序列号中是否存在和所述原始序列号一致的工作序列号;
若是,则确定所述数据包属于所述工作序列号对应的工作传输序列并确定所述原始序列标记对应的标记值,其中所述标记值包括第一标记值或第二标记值,所述第一标记值表示对所述原始序列标记的肯定,所述第二标记值表示对所述原始序列标记的否定;
将所述数据包写入所述工作传输序列;
若否,则根据所述数据包生成最新的工作传输序列并确定所述原始序列标记对应的标记值;
将所述数据包写入所述最新的工作传输序列。
在其中一个实施例中,所述核心处理模块确定所述数据包属于所述工作序列号对应的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述序列起始标记的标记值为第二标记值并确定所述数据包的数据包类型是否为合并类型;
若否,则确定所述序列有效标记的标记值为第二标记值;
若是,则根据所述序列判定逻辑对所述内部描述符进行判定并确定所述序列有效标记的标记值为第一标记值;
查询所述数据传输序列对应的传输方式,其中传输方式包括串行传输和并行传输;
响应于所述传输方式为并行传输,确定所述序列并行标记的标记值为第一标记值;
响应于所述传输方式为串行传输,确定所述序列并行标记的标记值为第二标记值;
确定所述内部描述符中是否存在被置位的描述符;
若是,则确定所述序列结束标记的标记值为第一标记值;
若否,则确定所述序列结束标记的标记值为第二标记值。
在其中一个实施例中,所述核心处理模块根据所述数据包生成最新的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述数据传输序列对应的序列数是否达到所述序列查找表规定的序列数量阈值;
若是,则根据最久最近未使用规则确定所述数据传输序列中的丢弃序列并删除所述丢弃序列;
根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值;
若否,则根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值。
在其中一个实施例中,所述核心处理模块根据所述内部描述符生成最新的工作传输序列并确定所述原始序列标记对应的标记值包括:
确定所述序列起始标记的标记值为第一标记值并确定所述数据包的数据包类型是否为合并类型;
若否,则确定所述序列有效标记的标记值为第二标记值;
若是,则根据所述序列判定逻辑对所述内部描述符进行判定并确定所述序列有效标记的标记值为第一标记值;
查询所述数据传输序列对应的传输方式,其中传输方式包括串行传输和并行传输;
响应于所述传输方式为并行传输,确定所述序列并行标记的标记值为第一标记值;
响应于所述传输方式为串行传输,确定所述序列并行标记的标记值为第二标记值;
确定所述内部描述符中是否存在被置位的描述符;
若是,则确定所述序列结束标记的标记值为第一标记值;
若否,则确定所述序列结束标记的标记值为第二标记值。
在其中一个实施例中,所述核心处理模块根据所述内部描述符、序列判定逻辑和所述序列查找表生成所述数据包对应的原始序列标记和原始序列号并根据所述原始序列标记和所述原始序列号对所述数据包执行原始排序操作之后包括:
确定所述数据传输序列的时间窗是否被触发;
若是,则确定所述时间窗被触发的数据传输序列为数据清除序列并生成数据清除序列对应的序列清除标记;
根据所述序列清除标记更新所述数据清除序列的内部描述符。
在其中一个实施例中,所述后处理模块根据所述核心处理对应的核心处理结果对序列查找表中的数据传输序列进行后处理并根据所述序列查找表和所述数据包生成目标数据包包括:
响应于确定所述内部描述符中存在所述过滤标记,对所述数据包进行所述过滤处理并确定进行过滤处理的数据包为所述非合并传输数据包;
响应于确定所述内部描述符中存在序列清除标记,清除数据清除序列;
响应于确定所述序列有效标记的标记值为第二标记值,确定所述数据包为所述非合并传输数据包;
响应于确定所述内部描述符中不存在所述过滤标记和所述序列清除标记且所述序列有效标记的标记值为第一标记值,根据所述负载均衡计算处理的处理结果对所述数据传输序列进行所述接收队列重定位处理;
根据所述原始序列排序处理的处理结果对所述数据传输序列中的错误序列进行所述序列打断重组处理;
根据所述数据传输序列和所述数据包生成目标数据包。
在其中一个实施例中,所述后处理模块根据所述负载均衡计算处理的处理结果对所述数据传输序列进行所述接收队列重定位处理包括:
确定所述处理器对应的处理方式;
响应于确定所述处理方式为多核处理,根据所述负载均衡计算处理的处理结果中的哈希值和用户配置的重定位表确定所述处理器对应的接收队列;
响应于确定所述处理方式为单核处理,根据所述数据传输序列对应的数据类型确定所述接收队列。
在其中一个实施例中,所述后处理模块根据所述原始序列排序处理的处理结果对所述数据传输序列中的错误序列进行所述序列打断重组处理包括:
根据先进先出规则读取所述数据包头并根据所述数据包头的头长度确定所述有效数据对应的偏移量;
根据所述内部描述符中的数据包地址和所述偏移量获取所述数据包的有效数据并根据所述有效数据计算所述数据包对应的校验和;
确定所述校验和是否错误;
若是,则确定所述校验和错误的数据包为错误数据包并确定所述错误数据包为所述非合并传输数据包;
对所述错误数据包对应的错误序列进行序列打断重组处理并将所述错误数据包对应的序列有效标记修改为第二标记值。
在其中一个实施例中,所述后处理模块根据所述数据传输序列和所述数据包生成目标数据包包括:
确定所述数据传输序列中的合并数据包的数据包数量并确定所述数据包数量是否达到用户设置的第一包数量阈值;
若是,则确定所述数据包数量达到所述第一包数量阈值的数据传输序列为目标序列;
对所述目标序列进行序列打断重组处理并确定所述目标序列中的合并数据包为所述合并传输数据包;
若否,则根据所述数据包的原始序列标记和所述数据传输序列生成所述目标数据包。
在其中一个实施例中,所述后处理模块根据所述数据包的原始序列标记和所述数据传输序列生成所述目标数据包包括:
确定所述序列起始标记的标记值是否为第一标记值;
若否,则根据所述序列结束标记和所述数据传输序列中的合并数据包生成所述合并传输数据包;
若是,则确定所述数据包对应的工作传输序列的写入量是否为1;
若是,则对所述工作传输序列进行所述打断重组处理并确定所述数据包为所述非合并传输数据包。
在其中一个实施例中,所述后处理模块根据所述序列结束标记和所述数据传输序列中的合并数据包生成所述合并传输数据包包括:
确定所述序列结束标记对应的标记值是否为第一标记值;
若是,则根据所述数据包和所述合并数据包生成所述合并传输数据包;
若否,则根据所述数据包和所述合并数据包生成最新的合并数据包。
在其中一个实施例中,所述装置还包括:
中断模块,还用于包括:确定所述目标数据包的数量是否达到所述处理器设置的第二包数量阈值;
若是,则根据所述目标数据包对应的内部描述符生成中断信息并向所述处理器发送所述中断信息。
关于网络数据传输系统中的数据块处理装置的具体限定可以参见上文中对于网络数据传输系统的数据块处理方法的限定,在此不再赘述。上述网络数据传输系统中的数据块处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图27所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现告警信息处理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图27中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。