CN114003366A - 一种网卡收包处理方法及装置 - Google Patents

一种网卡收包处理方法及装置 Download PDF

Info

Publication number
CN114003366A
CN114003366A CN202111322490.3A CN202111322490A CN114003366A CN 114003366 A CN114003366 A CN 114003366A CN 202111322490 A CN202111322490 A CN 202111322490A CN 114003366 A CN114003366 A CN 114003366A
Authority
CN
China
Prior art keywords
memory block
information
prefetch
network card
queue
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.)
Granted
Application number
CN202111322490.3A
Other languages
English (en)
Other versions
CN114003366B (zh
Inventor
房东
廖恬瑜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jingdong Technology Information Technology Co Ltd
Original Assignee
Jingdong Technology Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jingdong Technology Information Technology Co Ltd filed Critical Jingdong Technology Information Technology Co Ltd
Priority to CN202111322490.3A priority Critical patent/CN114003366B/zh
Publication of CN114003366A publication Critical patent/CN114003366A/zh
Priority to PCT/CN2022/124839 priority patent/WO2023082921A1/zh
Application granted granted Critical
Publication of CN114003366B publication Critical patent/CN114003366B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本公开提供一种网卡收包处理方法及装置。其中,该方法包括:解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;基于所述预取控制信息确定相应的预取内存块调度信息;基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求获取相应的内存块信息。本公开提供的网卡收包处理方法,通过接收报文数据对应的预取控制信息生成相应的预取内存块调度信息,并基于所述预取内存块调度信息能够实现多接收队列间的收包调度,提高了网卡的预取内存块调度效率,从而提升了整个网卡的接收报文数据的性能。

Description

一种网卡收包处理方法及装置
技术领域
本公开涉及网络通信技术领域,具体涉及一种网卡收包处理方法及装置。另外,还涉及一种电子设备及处理器可读存储介质。
背景技术
网卡是被设计用于实现计算机在网络上进行通讯的计算机硬件,其与计算机软件间通常定义一套收发报文的驱动程序来实现报文数据的发送和接收。一般而言,网卡驱动会在计算机内存中为每个收发队列分配相应的内存块来存放收发的报文数据。对于接收方来说,驱动程序在计算机主机内存中分配完内存块后会通过写寄存器的方式下发通知命令给网卡。由于网卡和计算机主机通信时路径很长延时很大,所以网卡通常会将主机中分配好的内存块信息提前预取到网卡的网卡内存池中,等网卡接到报文数据时直接从网卡内存池中获取当前需要使用的内存块信息,然后根据内存块信息将报文数据写到计算机的内存块中。然而,随着计算机技术的发展,现有的高性能网卡通常支持多队列收包,每个队列都有自己的预取内存块信息和收包流程,多队列间的调度往往成为整个网卡接收报文的性能瓶颈,但是目前基于传统轮询调度算法实现的收包调度方式效率较低。因此,如何高效的实现多队列间收包调度成为亟待解决的难题。
发明内容
为此,本公开提供一种网卡收包处理方法及装置,以解决现有技术中存在的基于传统轮询调度算法实现的收包调度方案局限性较高,导致网卡收包处理效率和稳定性较差的缺陷。
本公开提供一种网卡收包处理方法,包括:
解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;
基于所述预取控制信息确定相应的预取内存块调度信息;
基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息;
基于所述内存块信息将所述报文数据存放到存储区域的内存中。
进一步的,基于所述预取控制信息确定相应的预取内存块调度信息,具体包括:
获取所述预取控制信息中包含的所述接收队列预取内存块的读指针信息和写指针信息;
根据所述读指针信息、所述写指针信息以及预取等待标志位,确定当前接收所述报文数据动作是否触发所述接收队列的预取申请动作,若是,则生成相应的预取内存块调度信息。
进一步的,基于所述内存块信息将所述报文数据存放到存储区域的内存中,具体包括:基于所述读指针信息和所述写指针信息判断指定存储区域中是否存在待使用的内存块,若是,则根据所述读指针信息、所述写指针信息以及相应的队列编号,确定网卡内存池中内存块信息的存放位置,并读取所述存放位置中的内存块信息;
基于所述内存块信息将所述报文数据写入到所述存储区域中指定的内存块中。
进一步的,基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求获取相应的内存块信息,具体包括:基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,并触发所述接收队列中的子队列对应的预取申请动作,以生成预取请求获取相应的内存块信息;所述接收队列包含至少一个所述子队列;其中,所述预取请求包括根据预设的单次预取内存块信息的数量阈值获取相应数量的内存块信息。
进一步的,所述预取控制信息包括:用于表示预取到的内存块数量的写指针值、用于表示接收报文数据已使用的内存块数量的读指针值、用于表示接收队列当前预取状态的预取等待标志位以及用于表示驱动已分配完成内存块的通知指令标志位。
本公开还提供一种网卡收包处理装置,包括:
预取控制信息获取单元,用于解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;
收包处理单元,基于所述预取控制信息确定相应的预取内存块调度信息;
内存块预取管理单元,用于基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求获取相应的内存块信息;
报文数据存放单元,用于基于所述内存块信息将所述报文数据写入到所述存储区域中指定的内存块中。
进一步的,收包处理单元,具体包括:
第一收包处理单元,用于获取所述预取控制信息中包含的所述接收队列预取内存块的读指针信息和写指针信息;
第三收包处理单元,用于根据所述读指针信息、所述写指针信息以及预取等待标志位,确定当前接收所述报文数据动作是否触发所述接收队列的预取申请动作,若是,则生成相应的预取内存块调度信息。
进一步的,所述的网卡收包处理装置,还包括:
第二收包处理单元,用于基于所述读指针信息和所述写指针信息判断指定存储区域中是否存在待使用的内存块,若是,则根据所述读指针信息、所述写指针信息以及相应的队列编号,确定网卡内存池中内存块信息的存放位置,并读取所述存放位置中的内存块信息。
进一步的,内存块预取管理单元,具体用于:
基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,并触发所述接收队列中的子队列对应的预取申请动作,以生成预取请求获取相应的内存块信息;所述接收队列包含至少一个所述子队列;其中,所述预取请求包括根据预设的单次预取内存块信息的数量阈值获取相应数量的内存块信息。
进一步的,所述预取控制信息包括:用于表示预取到的内存块数量的写指针值、用于表示接收报文数据已使用的内存块数量的读指针值、用于表示接收队列当前预取状态的预取等待标志位以及用于表示驱动已分配完成内存块的通知指令标志位。
本公开还提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述程序时实现如上述任意一项所述网卡收包处理方法的步骤。
本公开还提供一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上述任意一项所述网卡收包处理方法的步骤。
本公开提供的网卡收包处理方法,通过接收报文数据对应的预取控制信息生成相应的预取内存块调度信息,并基于所述预取内存块调度信息能够实现多接收队列间的预取buf调度,提高了网卡的预取buf调度效率,从而提升了整个网卡的接收报文数据的性能。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他的附图。
图1是本公开实施例提供的网卡收包处理方法的流程示意图;
图2是本公开实施例提供的网卡收包处理方法的完整流程示意图;
图3是本公开实施例提供的网卡收包处过程示意图;
图4是本公开实施例提供的网网卡预取desc_buf的表项结构示意图;
图5是本公开实施例提供的网卡收包处理装置的结构示意图;
图6是本公开实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获取的所有其他实施例,都属于本公开保护的范围。
下面基于本公开所述的网卡收包处理方法,对其实施例进行详细描述。如图1所示,其为本公开实施例提供的网卡收包处理方法的流程示意图,具体实现过程包括以下步骤:
步骤101:解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息。
在本公开实施例中,需要预先通过哈希模块(即pkt_hash模块)解析收到的报文数据,并通过哈希算法计算出报文数据所要送到的接收队列。然后将接收的原始报文数据送到报文数据通道(称为Rx_pkt_data),将解析计算后得出的报文控制信息送到控制通道上(即图2中第一/二/三收包处理单元)。通过预设的第一收包处理单元(称为Rx_act1)根据所述计算出的队列查询预取内存块控制信息表,确定所述报文数据对应的预取控制信息。所述pkt_hash模块用于进行报文数据解析及hash计算。
其中,每个接收队列都对应有相应的预取控制信息,该预取控制信息存储在预设的预取内存块控制信息表(称为Rx_buf_ctl_tbl)中。所述预取控制信息包括但不限于:用于表示预取到的内存块数量的写指针值(即:write pointer,称为wptr)、用于表示接收报文数据已使用的内存块数量的读指针值(即read pointer,称为rptr)、用于表示接收队列当前预取状态的预取等待标志位(称为pending)以及用于表示驱动已分配完成内存块的通知指令标志位(称为ntf)。每个接收队列可存放32个或64个内存块(称为desc_buf)的信息(即desc_buf信息)。需要说明的是,在本发明实施例中,每个接收队列存放内存块信息的数量可根据实际需要进行设置,在此不做具体限定。其中,每个内存块信息包括但不限于内存块地址信息(称为desc_buf_addr),内存块大小(称为desc_buf_len),内存块在队列中的编号(称为desc_buf_idx)。所述接收队列预取回来的内存块信息都存储在网卡本地的内存池中。该网卡内存池也就是网卡本地缓存池(又称为buf池,即Rx_buf TBL),该buf池存放在网卡本地的随机存取存储器(Random Access Memory,RAM)。
在本公开实施例中,由于网卡和指定存储区域(比如图3中的服务器)通过PCIE(peripheral component interconnect express)接口通信时路径很长延时很大,所以网卡需要将指定存储区域中分配好的内存块信息提前预取到网卡内存池,形成用于提前存储内存块信息的接收队列。当网卡接到报文数据时直接从本地的网卡内存池中获取当前需要使用的内存块信息即可,然后根据内存块信息就可将报文数据通过PCIE接口写到指定存储区域对应的内存块中,以提高收包的性能。
其中,网卡预取内存块信息到网卡内存池过程包括:通过指定存储区域中预设的驱动程序在指定存储区域内存中分配完内存块后,网卡获取驱动程序下发的通知指令,该通知指令用于表示网卡可以进行收包操作了。在具体实施过程中,当网卡中内存块预取管理单元(称为Rx_buf_mng)收到通知指令后通过队列编号(称为qid)查询预取内存块控制信息表。若查询后计算出该队列的空闲内存块数量大于或等于16(wptr-rptr>=16),并且pending标志位为0则发起一次预取内存块信息请求,然后将相应接收队列对应的预取控制信息中通知指令标志位(即ntf标志位)和预取等待标志位(称为pending标志位)都设置为1,并回写到相应的预取内存块控制信息表中;否则,只将该接收队列的ntf标志位设置为1,并回写预取内存块控制信息表。当内存块预取管理单元收到第三收包处理单元(称为Rx_act3)发来的预取buf请求后,通过队列编号查询预取内存块控制信息表。若得出该接收队列的空闲内存块数量大于或等于16(wptr-rptr>=16),且ntf标志位为1,pending标志位为0时则发起一次预取buf请求,即预取通知命令请求,然后将ntf标志位和pending标志位都设置为1,并回写预取内存块控制信息表;否则,回到空闲状态不作任何处理。
步骤102:基于所述预取控制信息确定相应预取内存块调度信息。
如图2所示,在具体实施过程中,网卡通过预设的第一收包处理单元获取所述预取控制信息中包含的所述接收队列预取内存块的读指针信息和写指针信息;通过预设的第三收包处理单元能够根据所述预取控制信息中对应接收队列的读指针信息、写指针信息以及预取等待标志位,确定当前接收所述报文数据动作是否触发所述接收队列的预取申请动作,若是,则生成相应的预取内存块调度信息。其中,所述读指针信息包含读指针值,即rptr值;所述写指针信息包含写指针值,即wptr值。所述预取内存块调度信息是指根据收包动作所产生的预取buf的调度信息,可包括所述接收队列哪些子队列处于正常工作状态下以及预取等待标志位的值等。
除此之外,网卡在获取所述读指针信息和写指针信息之后,通过预设的第三收包处理单元(称为Rx_act3)还可基于所述读指针信息和所述写指针信息判断指定存储区域中是否存在待使用的内存块,若是,则根据所述读指针信息、所述写指针信息以及相应的队列编号,确定网卡内存池中内存块信息的存放位置,并读取所述存放位置中的内存块信息;并根据所述内存块信息将所述报文数据写到指定存储区域对应的内存块。若不存在待使用的内存块,则将接收到的所述报文数据丢弃。
举例而言,在具体实施过程中,当有报文数据从网卡的接口进来时,处理流程如下:首先通过pkt_hash模块将解析接收到的报文数据,并通过哈希计算出该报文所要送到的接收队列上的编号qid。通过Rx_act11根据qid到预取内存块控制信息表查询,获取相应接收队列对应的wptr值和rptr值并发送给Rx_act2。通过Rx_act2根据wptr值和rptr值计算出是否有可用的desc_buf。如果有的话则根据qid、wptr值和rptr值计算出desc_buf在buf池中的存放位置,并读取相应的desc_buf信息。将desc_buf信息发送给Rx_act3,并更新rptr值为rptr+1,其表示消耗了1个desc_buf,并回写到预取内存块控制信息表Rx_buf_ctl_tbl中。如果没有可用的desc_buf,则通知Rx_act3没有可用desc_buf。通过Rx_act3发现有可用desc_buf时,则根据读取回来的desc_buf信息,将收到的报文数据写到指定存储区域上对应的内存块中;如果没有可用desc_buf,则丢弃本次收到的报文数据。Rx_act3根据当前接收队列的wptr值、rptr值和flag_pending的值来计算出本次收包是否触发新的预取desc_buf请求的操作,如果触发预取desc_buf请求操作,则将预取内存块调度信息(预取调度信息)送给内存块预取管理单元,由内存块预取管理单元进行预取操作;如果不需要预取desc_buf,则不作任何预取处理。这样每次在收包调度的同时就会判断是否需要进行新预取desc_buf,确保接收队列的预取desc_buf请求操作都是有效申请。
当网卡预取buf回来之后,具体处理如下:当预取desc_buf回来时,预先根据qid查询预取内存块控制信息表。若预取回来的是空数据(即flag_av_empty为1),则表明指定存储区域中该内存块队列没有可用的desc_buf,因此将qid所对应接收队列的预取控制信息中ntf标志位清为0,并回写到预取内存块控制信息表中。若预取desc_buf回来的是有效数据且是非本次预取16个desc_buf的最后1个时,则根据qid的值和wptr的值计算出该desc_buf需要放到buf池中的位置。将desc_buf信息写到buf池(Rx_buf Tbl)对应存放位置中,并更新wptr值为wptr+1,其表明网卡多了1个可用的desc_buf,并回写到预取内存块控制信息表rx_buf_ctl_tbl中。若预取desc_buf回来的是有效buf据且是本次预取的最后1个时,则将该desc_buf写到buf池,即将相应的desc_buf存储到buf池的接收队列中。在实际实施过程中,还需要计算出buf池中空闲位置是否大于等于16,若大于等于16的则继续进行新的一次预取操作,并更新wptr为值wptr+1和pending值为1(即pending标志位为1),并回写到预取内存块控制信息表中;若小于16时不够进行一次预取时,则直接更新wptr值为wptr+1和pending值为0(即pending标志位为0),并回写到预取内存块控制信息表中。需要说明的是,每一个desc_buf在网卡的buf池的接收队列中都有相应的desc_buf信息。desc_buf信息包括但不限于内存块地址信息,内存块大小,内存块在队列中的编号。
步骤103:基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息。
在本公开实施例中,网卡基于内存块预取管理单元(称为Rx_buf_mng),根据收包动作产生的预取内存块调度信息触发对应接收队列的预取申请动作,以生成预取请求获取相应的内存块信息。所述接收队列包含至少一个所述子队列。其中,所述预取请求包括根据预设的单次预取内存块信息的数量阈值获取相应数量的内存块信息。
为了提高单次预取效率,可增加网卡中每个接收队列最多缓存desc_buf个数到64个,并通过设置单次预取desc_buf的最低数量阈值为16个内存块的desc_buf信息,即单次预取内存块信息的数量阈值获取16个内存块的desc_buf信息。需要说明的是,所述每个接收队列最多缓存desc_buf的个数以及单次预取desc_buf的最低数量阈值包括但不限于上述实例中的数值,具体可根据实际需要进行设置,在此不做具体限定。在具体实施过程中,如图4所示,网卡内可有512个子队列(即q0-q511个子队列),每个接收队列有相应的预取控制信息。预取回来的desc_buf信息403放在网卡本地的buf池402(Rx_bufTBL)中,每个接收队列的控制信息放在预取内存块控制信息表401(Rx_buf_ctl_tbl)中。其中,Rx_buf_ctl_tb1和Rx_buf TBL包含字段的值的含义如下:Ntf:1表示驱动分配好desc_buf,0表示驱动未分配desc_buf;Pending:1表示队列处于等待预取desc_buf回来状态,0表示该队列未进行预取操作;Wptr:预取desc_buf回来个数;Rptr:接收报文消耗desc_buf个数;Buf_addr:内存块在计算机主机中的起始地址;Buf_len:内存块长度;Buf_idx:内存块在队列中的编号。
需要说明的是,本公开实施例是基于收包时所携带的预取控制信息来确定当前收包动作是否进行预取buf申请动作。也就是,确定预取内存块调度信息后,基于收包动作触发预取buf的调度处理,其相对于采用round-robing轮询的调度方式,调度效率更高。传统的round-robing轮询调度算法即q0队列调度完了调度q1队列,q1队列调度完了调度q2队列,以此循环,因此采用round-robing调度方式会出现空调度的情况,例如只有q0队列工作,但是需要调度完q1-q511队列后才会再次调度到q0队列,调度效率低下。本公开实施例,采用基于收包动作触发预取内存块信息请求的调度操作能够解决传统的round-robing轮询调度中出现的空调度问题,从而保证每次接收队列间的调度都是有效调度。
本公开实施例优化后的架构如图2所示,其中除了驱动部分外,其余部分均为在网卡的FPGA中用逻辑实现。内存块预取管理单元,即Rx_buf_mng模块或预取desc_buf的管理模块,用来执行预取内存块信息请求的调度操作,将预取回来的内存块信息写到网卡的buf池,处理每个接收队列的预取控制信息等。Rx_act1,Rx_act2,Rx_act3分别为接收报文数据的第一收包处理单元(即报文控制信息处理单元)、第二收包处理单元、第三收包处理单元。也就是,将收包处理过程分为3个单元进行处理,便于进行流水操作,提高系统的收包性能。通过第一收包处理单元在收到报文数据后查询相应接收队列的预取控制信息,获取wptr的值和rptr的值,通过计算来判断是否有可用的desc_buf给该报文数据使用。如果有可用desc_buf,则通过第二收包处理单元从buf池中获取相应的desc_buf信息并传递给第三收包处理单元。通过第三收包处理单元根据获取到的desc_buf信息,将报文数据写到指定存储区域中对应的内存块上,并发送中断信号给指定存储区域,通知指定存储区域收包完成。进一步的,通过第三收包处理单元根据传过来的wptr的值和rptr的值计算得出相应接收队列的buf池中的空闲位置个数,从而确定是否可以进行一次新的预取desc_buf操作,如果可以预取则将预取信息(即预取内存块调度信息)发送给内存块预取管理单元,通过内存块预取管理单元触发预取申请操作。如果buf池中的空闲位置不够一次预取,则本次收包不发送预取信息给内存块预取管理单元。
步骤103:基于所述内存块信息将所述报文数据存放到存储区域的内存中。
具体的,可通过第三收包处理单元基于所述内存块信息将接收到的报文数据存放到存储区域的内存中。
本公开实施例所述的网卡收包处理方法,通过接收报文数据对应的预取控制信息生成相应的预取内存块调度信息,并基于所述预取内存块调度信息能够实现多接收队列间的预取buf调度,提高了网卡的预取buf调度效率,从而提升了整个网卡的接收报文数据的性能。
与上述提供的一种网卡收包处理方法相对应,本公开还提供一种网卡收包处理装置。由于该装置的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的网卡收包处理装置的实施例仅是示意性的。请参考图5所示,其为本公开实施例提供的一种网卡收包处理装置的结构示意图。
本公开所述的网卡收包处理装置,具体包括如下部分:
预取控制信息获取单元501,用于解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;
收包处理单元502,基于所述预取控制信息确定相应的预取内存块调度信息;
内存块预取管理单元503,用于基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息。
报文数据存放单元504,用于基于所述内存块信息将所述报文数据存放到存储区域的内存中。
进一步的,收包处理单元,具体包括:
第一收包处理单元,用于获取所述预取控制信息中包含的所述接收队列预取内存块的读指针信息和写指针信息;
第三收包处理单元,用于根据所述读指针信息、所述写指针信息以及预取等待标志位,确定当前接收所述报文数据动作是否触发所述接收队列的预取申请动作,若是,则生成相应的预取内存块调度信息。
进一步的,所述的网卡收包处理装置,还包括:第二收包处理单元,用于在获取所述读指针信息和所述写指针信息之后,基于所述读指针信息和所述写指针信息判断指定存储区域中是否存在待使用的内存块,若是,则根据所述读指针信息、所述写指针信息以及相应的队列编号,确定网卡内存池中内存块信息的存放位置,并读取所述存放位置中的内存块信息;所述第三收包处理单元,还用于基于所述内存块信息将所述报文数据写入到所述指定存储区域中对应的内存块。
进一步的,在所述的网卡收包处理装置中,所述第二收包处理单元,还用于在根据所述内存块信息将所述报文数据写到指定存储区域对应的内存块之后,更新所述读指针信息中的读指针值,得到用于表示当前预取内存块数量对应的目标读指针值;所述目标读指针值大于所述读指针值;其中,所述内存块信息与所述指定存储区域中的内存块一一对应。
进一步的,内存块预取管理单元,具体用于:基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,并触发所述接收队列中的子队列对应的预取申请动作,以生成预取请求获取相应的内存块信息;所述接收队列包含至少一个所述子队列;
其中,所述预取请求包括根据预设的单次预取内存块信息的数量阈值获取相应数量的内存块信息。
进一步的,所述预取控制信息包括:用于表示预取到的内存块数量的写指针值、用于表示接收报文数据已使用的内存块数量的读指针值、用于表示接收队列当前预取状态的预取等待标志位以及用于表示驱动已分配完成内存块的通知指令标志位。
在具体实施过程中,需要预先通过pkt_hash模块解析收到的报文数据,并通过哈希算法计算出报文数据所要送到的接收队列。然后将接收的原始报文数据送到报文数据通道(称为Rx_pkt_data),将解析计算后得出的报文控制信息送到控制通道上(即图2中第一/二/三收包处理单元)。当预设的第一收包处理单元收到报文数据后,查询相应接收队列的预取控制信息,并获取所述预取控制信息中所述接收队列的读指针的值和写指针的值,基于所述读指针的值和所述写指针的值,判断指定存储区域中是否存在相应的内存块;若是,则基于第二收包处理单元从buf池中获取相应的内存块信息,并将所述内存块信息发送到第三收包处理单元;通过所述第三收包处理单元基于所述内存块信息将报文数据写入到指定存储区域中对应的内存块上,并发送用于表示收包完成的中断信息给指定存储区域。
本公开实施例所述的网卡收包处理装置,通过接收报文数据对应的预取控制信息生成相应的预取内存块调度信息,并基于所述预取内存块调度信息能够实现多接收队列间的预取buf调度,提高了网卡的预取buf调度效率,从而提升了整个网卡的接收报文数据的性能。
与上述提供的网卡收包处理方法相对应,本公开还提供一种电子设备。由于该电子设备的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的电子设备仅是示意性的。如图6所示,其为本公开实施例公开的一种电子设备的实体结构示意图。该电子设备可以包括:处理器(processor)601、存储器(memory)602和通信总线603,其中,处理器601,存储器602通过通信总线603完成相互间的通信,通过通信接口604与外部进行通信。处理器601可以调用存储器602中的逻辑指令,以执行网卡收包处理方法,该方法包括:解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;基于所述预取控制信息确定相应的预取内存块调度信息;基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息;基于所述内存块信息将所述报文数据存放到存储区域的内存中。
此外,上述的存储器602中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,计算机,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:存储芯片、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本公开实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在处理器可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的网卡收包处理方法。该方法包括:解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;基于所述预取控制信息确定相应的预取内存块调度信息;基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息;基于所述内存块信息将所述报文数据存放到存储区域的内存中。
又一方面,本公开实施例还提供一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的网卡收包处理方法。该方法包括:解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;基于所述预取控制信息确定相应的预取内存块调度信息;基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息;基于所述内存块信息将所述报文数据存放到存储区域的内存中。
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NANDFLASH)、固态硬盘(SSD))等。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,计算机,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的精神和范围。

Claims (10)

1.一种网卡收包处理方法,其特征在于,包括:
解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;
基于所述预取控制信息确定相应的预取内存块调度信息;
基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息;
基于所述内存块信息将所述报文数据存放到存储区域的内存中。
2.根据权利要求1所述的网卡收包处理方法,其特征在于,基于所述预取控制信息确定相应的预取内存块调度信息,具体包括:
获取所述预取控制信息中包含的所述接收队列预取内存块的读指针信息和写指针信息;
根据所述读指针信息、所述写指针信息以及预取等待标志位,确定当前接收所述报文数据动作是否触发所述接收队列的预取申请动作,若是,则生成相应的预取内存块调度信息。
3.根据权利要求2所述的网卡收包处理方法,其特征在于,在获取所述读指针信息和所述写指针信息之后,还包括:
基于所述读指针信息和所述写指针信息判断指定存储区域中是否存在待使用的内存块,若是,则根据所述读指针信息、所述写指针信息以及相应的队列编号,确定网卡内存池中内存块信息的存放位置,并读取所述存放位置中的内存块信息。
4.根据权利要求1所述的网卡收包处理方法,其特征在于,基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息,具体包括:
基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,并触发所述接收队列中的子队列对应的预取申请动作,以生成预取请求来获取相应的内存块信息;所述接收队列包含至少一个所述子队列;
其中,所述预取请求包括根据预设的单次预取内存块信息的数量阈值获取相应数量的内存块信息。
5.根据权利要求1-4任意一项所述的网卡收包处理方法,其特征在于,所述预取控制信息包括:用于表示预取到的内存块数量的写指针值、用于表示接收报文数据已使用的内存块数量的读指针值、用于表示接收队列当前预取状态的预取等待标志位以及用于表示驱动已分配完成内存块的通知指令标志位。
6.一种网卡收包处理装置,其特征在于,包括:
预取控制信息获取单元,用于解析接收的报文数据,确定所述报文数据对应接收队列的预取控制信息;
收包处理单元,基于所述预取控制信息确定相应的预取内存块调度信息;
内存块预取管理单元,用于基于所述预取内存块调度信息对网卡中的接收队列进行内存块预取调度操作,以生成预取请求来获取相应的内存块信息;
报文数据存放单元,用于基于所述内存块信息将所述报文数据存放到存储区域的内存中。
7.根据权利要求6所述的网卡收包处理装置,其特征在于,所述收包处理单元,具体包括:
第一收包处理单元,用于获取所述预取控制信息中包含的所述接收队列预取内存块的读指针信息和写指针信息;
第三收包处理单元,用于根据所述读指针信息、所述写指针信息以及预取等待标志位,确定当前接收所述报文数据动作是否触发所述接收队列的预取申请动作,若是,则生成相应的预取内存块调度信息。
8.根据权利要求7所述的网卡收包处理装置,其特征在于,还包括:第二收包处理单元,用于基于所述读指针信息和所述写指针信息判断指定存储区域中是否存在待使用的内存块,若是,则根据所述读指针信息、所述写指针信息以及相应的队列编号,确定网卡内存池中内存块信息的存放位置,并读取所述存放位置中的内存块信息。
9.一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5任意一项所述网卡收包处理方法的步骤。
10.一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至5任意一项所述网卡收包处理方法的步骤。
CN202111322490.3A 2021-11-09 2021-11-09 一种网卡收包处理方法及装置 Active CN114003366B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111322490.3A CN114003366B (zh) 2021-11-09 2021-11-09 一种网卡收包处理方法及装置
PCT/CN2022/124839 WO2023082921A1 (zh) 2021-11-09 2022-10-12 一种网卡收包处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111322490.3A CN114003366B (zh) 2021-11-09 2021-11-09 一种网卡收包处理方法及装置

Publications (2)

Publication Number Publication Date
CN114003366A true CN114003366A (zh) 2022-02-01
CN114003366B CN114003366B (zh) 2024-04-16

Family

ID=79928386

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111322490.3A Active CN114003366B (zh) 2021-11-09 2021-11-09 一种网卡收包处理方法及装置

Country Status (2)

Country Link
CN (1) CN114003366B (zh)
WO (1) WO2023082921A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023082921A1 (zh) * 2021-11-09 2023-05-19 京东科技信息技术有限公司 一种网卡收包处理方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0284100A2 (en) * 1987-03-27 1988-09-28 Nec Corporation Information processor having instruction prefetch function
CN105027091A (zh) * 2013-03-13 2015-11-04 英派尔科技开发有限公司 内存分配加速器
CN109783250A (zh) * 2018-12-18 2019-05-21 中兴通讯股份有限公司 一种报文转发方法及网络设备
US20200004586A1 (en) * 2018-06-29 2020-01-02 Advanced Micro Devices, Inc. Cooperative workgroup scheduling and context prefetching
CN111404986A (zh) * 2019-12-11 2020-07-10 杭州海康威视系统技术有限公司 数据传输处理方法、设备和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114003366B (zh) * 2021-11-09 2024-04-16 京东科技信息技术有限公司 一种网卡收包处理方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0284100A2 (en) * 1987-03-27 1988-09-28 Nec Corporation Information processor having instruction prefetch function
CN105027091A (zh) * 2013-03-13 2015-11-04 英派尔科技开发有限公司 内存分配加速器
US20200004586A1 (en) * 2018-06-29 2020-01-02 Advanced Micro Devices, Inc. Cooperative workgroup scheduling and context prefetching
CN109783250A (zh) * 2018-12-18 2019-05-21 中兴通讯股份有限公司 一种报文转发方法及网络设备
CN111404986A (zh) * 2019-12-11 2020-07-10 杭州海康威视系统技术有限公司 数据传输处理方法、设备和存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023082921A1 (zh) * 2021-11-09 2023-05-19 京东科技信息技术有限公司 一种网卡收包处理方法及装置

Also Published As

Publication number Publication date
WO2023082921A1 (zh) 2023-05-19
CN114003366B (zh) 2024-04-16

Similar Documents

Publication Publication Date Title
US11467769B2 (en) Managed fetching and execution of commands from submission queues
US9563367B2 (en) Latency command processing for solid state drive interface protocol
US20180300257A1 (en) Using an access increment number to control a duration during which tracks remain in cache
US6792496B2 (en) Prefetching data for peripheral component interconnect devices
US5895488A (en) Cache flushing methods and apparatus
US8510518B2 (en) Bandwidth adaptive memory compression
US10657087B2 (en) Method of out of order processing of scatter gather lists
EP2219114B1 (en) Method and apparatus for allocating storage addresses
US11010094B2 (en) Task management method and host for electronic storage device
US11960396B2 (en) Method and computer program product for performing data writes into a flash memory
KR20200057311A (ko) 통신되는 데이터의 양을 동작의 중단 빈도에 따라 스로틀링하는 스토리지 장치
CN112416250A (zh) 基于NVMe的固态硬盘的命令处理方法及相关设备
CN114003366B (zh) 一种网卡收包处理方法及装置
US11048631B2 (en) Maintaining cache hit ratios for insertion points into a cache list to optimize memory allocation to a cache
EP1970815A1 (en) Data transfering apparatus and information processing system
US6820140B2 (en) Method, system, and program for returning data to read requests received over a bus
US20050144379A1 (en) Ordering disk cache requests
CN108228104B (zh) 数据传输方法及固态硬盘控制器
CN112015527B (zh) 管理从提交队列获取和执行命令
US10789001B1 (en) Posted operation data control
CN111858256B (zh) 命令队列监控电路、数据交换方法及其设备
KR20220033976A (ko) 저장 디바이스들에 대한 강화된 선판독 능력
CN110580227B (zh) 自适应nvm命令生成方法与装置
CN115794750B (zh) 异步i/o系统文件打开/关闭的控制方法、装置及设备
US11983412B2 (en) Memory system controlling nonvolatile memory

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