CN109617832A - 报文缓存方法及装置 - Google Patents
报文缓存方法及装置 Download PDFInfo
- Publication number
- CN109617832A CN109617832A CN201910101471.4A CN201910101471A CN109617832A CN 109617832 A CN109617832 A CN 109617832A CN 201910101471 A CN201910101471 A CN 201910101471A CN 109617832 A CN109617832 A CN 109617832A
- Authority
- CN
- China
- Prior art keywords
- mbuf
- core
- port
- occupies
- total number
- 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
Links
Classifications
-
- 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/9063—Intermediate storage in different physical parts of a node or terminal
- H04L49/9068—Intermediate storage in different physical parts of a node or terminal in the network interface card
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例涉及计算机技术领域,提供一种报文缓存方法及装置,所述方法包括:从计算机设备的存储器中申请多个Mbuf;将多个Mbuf中的一部分作为多核处理器的每个核对应的本地缓存,并将多个Mbuf中的另一部分创建为内存池;在网卡收发报文时,从每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在每个核对应的本地缓存无空闲Mbuf时,再从内存池中获取空闲Mbuf以缓存报文。与现有技术相比,本发明实施例在申请多个Mbuf时将每个核对应的本地缓存考虑在内,并且在收发报文时优先使用每个核对应的本地缓存中的Mbuf缓存报文,这样可以保证在缓存大量报文的同时,驱动仍然能正常收发包。
Description
技术领域
本发明实施例涉及计算机技术领域,具体而言,涉及一种报文缓存方法及装置。
背景技术
数据面开发套件(Data Plan Develop Kit,DPDK)技术是Intel公司开发的基于数据面的报文处理框架,DPDK可以支持数据的快速转发,是X86平台报文快速数据包处理的函数库和驱动集。
为了高效访问数据,DPDK将内存封装在Mbuf(Memory buffer,存储器缓存)结构体内,即通过Mbuf来封装存放收到的报文。为了避免频繁收发包申请Mbuf内存带来的性能开销,通常将Mbuf存放在存储器的内存池中,内存池是由N个Mbuf组成的环形阵列,正常情况下,网卡的每个端口收发包时都可以从内存池中获取Mbuf。但是,网络中收到的报文包括待转发报文和送本机的报文,送本机的报文需要交给协议栈处理,在收到待转发报文和送本机的报文时都需要从内存池中获取Mbuf来承载报文,报文发出去后再将Mbuf还给内存池,如果内存池中的Mbuf缓存大量送本机的报文,会导致内存池中无空闲Mbuf,此时驱动无法再收包。
发明内容
本发明实施例的目的在于提供一种报文缓存方法及装置,用以在缓存大量报文时保证驱动正常收包。
为了实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供了一种报文缓存方法,应用于计算机设备,所述计算机设备包括网卡、多核处理器和存储器,所述方法包括:从所述计算机设备的存储器中申请多个Mbuf;将所述多个Mbuf中的一部分作为所述多核处理器的每个核对应的本地缓存,并将所述多个Mbuf中的另一部分创建为内存池;在网卡收发报文时,从所述每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在所述每个核对应的本地缓存无空闲Mbuf时,再从所述内存池中获取空闲Mbuf以缓存报文。
第二方面,本发明实施例还提供了一种报文缓存装置,应用于计算机设备,所述计算机设备包括网卡、多核处理器和存储器,所述装置包括申请模块、执行模块及报文缓存模块。其中,申请模块用于从所述计算机设备的存储器中申请多个Mbuf;执行模块用于将所述多个Mbuf中的一部分作为所述多核处理器的每个核对应的本地缓存,并将所述多个Mbuf中的另一部分创建为内存池;报文缓存模块用于在网卡收发报文时,从所述每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在所述每个核对应的本地缓存无空闲Mbuf时,再从所述内存池中获取空闲Mbuf以缓存报文。
相对现有技术,本发明实施例提供的一种报文缓存方法及装置,从计算机设备的存储器中申请多个Mbuf,并将该多个Mbuf中的一部分作为计算机设备的本地缓存、将该多个Mbuf中的另一部分创建为内存池,在网卡收发报文时,优先从本地缓存中获取空闲Mbuf以缓存报文,并在本地缓存无空闲Mbuf时,再从内存池中获取空闲Mbuf以缓存报文。与现有技术相比,本发明实施例在申请多个Mbuf时将每个核对应的本地缓存考虑在内,并且在收发报文时优先使用每个核对应的本地缓存中的Mbuf缓存报文,这样即使每个核对应的本地缓存中缓存了大量送本机的报文,也能保证内存池中存在空闲Mbuf,如此,在收到报文时仍然可以从内存池中获取空闲Mbuf来缓存报文,也就是说,可以保证在缓存大量送本机的报文的同时,驱动仍然能正常收发包。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供的计算机设备的方框示意图。
图2示出了本发明实施例提供的报文缓存方法流程图。
图3为图2示出的步骤S101的子步骤流程图。
图4示出了本发明实施例提供的报文缓存装置的方框示意图。
图标:100-计算机设备;101-多核处理器;102-存储器;103-总线;104-网卡;200-报文缓存装置;201-申请模块;202-执行模块;203-报文缓存模块。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参照图1,图1示出了本发明实施例提供的计算机设备100的方框示意图。计算机设备100包括多核处理器101、存储器102、总线103和网卡104,多核处理器101、存储器102和网卡104通过总线103互相通信。
其中,多核处理器101用于执行存储器102中存储的可执行模块,例如计算机程序。本发明实施例所指的多核处理器101可以是多核CPU(Central Processing Unit,中央处理器),例如,四核CPU等,多核处理器101中的每个核可以是CPU核。
存储器102,主要用于存储计算机设备100中的各种程序和数据。存储器102可以是一个存储装置,也可以是多个存储元件的统称,存储器102可以包括随机存储器(randomaccess memory,RAM),也可以包括非易失性存储器(non-volatile memory),例如磁盘存储器,闪存(Flash)等。
总线103可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。该总线103可以分为地址总线、数据总线、控制总线等。为便于表示,图1中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
网卡104,为网络接口卡(Network Interface Card,NIC)的简称,为主要工作在链路层的网络组件,是局域网中连接计算机和传输介质的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。
存储器102用于存储程序,所述多核处理器101在接收到执行指令后,执行所述程序以实现发明实施例揭示的报文缓存方法。
本发明实施例提供的报文缓存方法可以应用于上述的计算机设备100,计算机设备100可以是服务器、个人计算机、网络设备等,其操作系统可以是Windows操作系统、Linux操作系统等。
为了适应数据高速转发的需要,在计算机设备100的操作系统中配置DPDK,DPDK用于快速数据包处理的函数库和驱动集合,是一种可以极大提高数据处理性能和吞吐量、以及数据平台应用程序的工作效率的软件开发套件。DPDK通过Mbuf来封装存放收到的报文,为了避免频繁收发包申请Mbuf内存带来的性能开销,通常将Mbuf存放在内存池中,具体来说,DPDK初始化时,创建一个包含多个Mbuf的内存池,计算机设备100的网卡104收发报文时,从内存池中获取Mbuf以缓存报文。
但是,网络中收到的报文包括待转发报文和送本机的报文。DPDK在收到送本机的报文时需要交给协议栈处理,而DPDK在收到送本机的报文时也是从内存池中获取Mbuf进行缓存的,在协议栈处理过程中,缓存这部分报文的Mbuf不会被释放。因此,如果DPDK收到大量送本机的报文,会从内存池中获取大量Mbuf进行缓存,导致内存池中无空闲Mbuf,这样网卡104在收发报文时会由于无法获取到空闲Mbuf而导致报文被丢弃。为了解决这一问题,本发明实施例在申请多个Mbuf时将每个核对应的本地缓存考虑在内,并且在收发报文时优先使用每个核对应的本地缓存中的Mbuf缓存报文,这样即使每个核对应的本地缓存中的Mbuf缓存了大量送本机的报文,也能保证内存池中存在空闲Mbuf,如此,在收到报文时仍然可以从内存池中获取空闲Mbuf来缓存报文,从而保证在缓存大量报文的同时,驱动仍然能正常收发包,下面进行详细描述。
第一实施例
请参照图2,图2示出了本发明实施例提供的报文缓存方法流程图。该报文缓存方法应用于上述的计算机设备100,该报文缓存方法包括以下步骤:
步骤S101,从计算机设备的存储器中申请多个Mbuf。
在相关技术中,在DPDK基于多核架构的情况下,即,计算机设备100包括多核处理器101,多核处理器101的多个核访问同一个内存池时,每个核进行数据读写都要进行比较并交换(Compare and Swap,CAS)操作来保证数据未被其他核修改,这样就导致报文转发效率极低。
为了解决这一问题,本发明实施例将一部分Mbuf作为多核处理器101的每个核对应的本地缓存,这样多核处理器101的每个核可以优先从其对应的本地缓存中获取Mbuf,从而减少多核处理器101中多个核竞争内存池带来的开销。也就是说,本发明实施例在DPDK初始化申请多个Mbuf时,将多核处理器101的每个核对应的本地缓存考虑在内,来提高报文转发效率。
需要说明的是,本实施例中的本地缓存是指存储器102中的缓存,本地缓存是为了与内存池进行区别。
在DPDK中,如果多核处理器101的控制核和转发核需要同时访问网卡104,则利用网卡多队列技术,在进行队列分配时,设置每个转发核在网卡104的每个端口上都负责一个接收队列,避免控制核和转发核对同一队列进行并发操作。具体来说,由于每个核在网卡104的每个端口上都有可能发包,则设置每个核在每个端口都对应一个发送队列,即,网卡104每个端口的总的发送队列数目等于启动计算机设备100时占用控制核和转发核的数目;同时,由于多核处理器101的控制核仅负责发送队列,则设置每个转发核在每个端口对应一个接收队列,即,网卡104每个端口的总的接收队列数目等于启动计算机设备100时占用转发核的数目。
例如,计算机设备100启动时,网卡104包括两个端口port0和port1,并占用四个核core0、core1、core2和core3,其中,core0为控制核,core1、core2和core3为转发核,则可以设置计算机设备100中两个端口、四个核、接收队列RxQ及发送队列TxQ之间的对应关系如下表所示:
其中,0、1、2、3表示队列标识,例如TxQ:0表示发送队列0,RxQ:0表示接收队列0,RxQ:NA表示不负责接收队列。
基于以上队列分配方式,为了提高内存分配性能,在DPDK初始化申请多个Mbuf时,将多核处理器101中每个核对应的本地缓存考虑在内,因此,待申请Mbuf数目需要考虑网卡104的端口接收队列占用Mbuf总数目、网卡104的端口发送队列占用Mbuf总数目、多核处理器101的每个核对应的本地缓存占用Mbuf总数目及预设的Mbuf数目,也就是说,待申请Mbuf数目等于网卡104的端口接收队列占用Mbuf总数目、网卡104的端口发送队列占用Mbuf总数目、每个核对应的本地缓存占用Mbuf总数目及预设的Mbuf数目的总和。
其中,网卡104的端口接收队列占用Mbuf总数目等于网卡104的端口数目、接收队列长度、以及每个端口的总的接收队列数目的乘积,由于每个转发核在每个端口都对应一个接收队列,故每个端口的总的接收队列数目等于多核处理器101的转发核数目,网卡104的端口接收队列可以是网卡104的所有端口的接收队列的集合,例如,网卡104包括两个端口port0和port1,端口port0包括0#接收队列和1#接收队列,端口port1包括2#接收队列和3#接收队列,则网卡104的端口接收队列包括0#接收队列、1#接收队列、2#接收队列和3#接收队列。
网卡104的端口发送队列占用Mbuf总数目等于网卡104的端口数目、发送队列长度、以及每个端口的总的发送队列数目的乘积,由于每个控制核和每个转发核在每个端口均对应一个发送队列,故每个端口的总的发送队列数目为所述多核处理器101的转发核与控制核的总数目,网卡104的端口发送队列可以是网卡104的所有端口的发送队列的集合,例如,网卡104包括两个端口port0和port1,端口port0包括0#发送队列和1#发送队列,端口port1包括2#发送队列和3#发送队列,则网卡104的端口发送队列包括0#发送队列、1#发送队列、2#发送队列和3#发送队列。
多核处理器101的每个核对应的本地缓存占用Mbuf总数目包括多核处理器101中每个核对应的预设占用数目的总和,也就是,每个核对应的本地缓存占用Mbuf总数目包括多核处理器101中控制核和转发核的总数目与每个核对应的预设占用数目的乘积,预设占用数目是多核处理器101中单个核占用的Mbuf数目。可选地,预设占用数目可以为DPDK支持的多核处理器101中单个核最大可占用的Mbuf个数。在一种可选的实施方式中,多核处理器101中每个控制核对应的预设占用数目可以是512个,每个转发核对应的预设占用数目也可以是512个。预设的Mbuf数目可以是根据协议栈可以缓存的由DPDK驱动收上来的报文数目的最大值确定的,以在申请Mbuf时,为协议栈缓存的报文预留出可申请的Mbuf,在一种示例中,预设的Mbuf数目可以是16K。
请参照图3,步骤S101还可以包括以下子步骤:
子步骤S1011,计算网卡的端口接收队列占用Mbuf总数目。
在本发明实施例中,多核处理器101的控制核仅负责发送队列,故网卡104每个端口的总的接收队列数目等于启动计算机设备100时占用转发核的数目,则网卡104的端口接收队列占用Mbuf总数目的计算过程可以包括:
获取接收队列长度、网卡104的端口数目、以及多核处理器101的转发核数目;
确定每个端口的总的接收队列数目为多核处理器101的转发核数目,其中,每个转发核在每个端口都对应一个接收队列;
依据端口数目、接收队列长度、以及每个端口的总的接收队列数目的乘积,计算端口接收队列占用Mbuf总数目,即,端口接收队列占用Mbuf总数目等于p*(M-1)*L1,其中,p表示网卡104的端口数目,M表示多核处理器101的转发核与控制核的总数目,(M-1)表示多核处理器101的转发核数目即每个端口的总的接收队列数目,L1表示接收队列长度。
子步骤S1012,计算网卡的端口发送队列占用Mbuf总数目。
在本发明实施例中,网卡104每个端口的发送队列数目等于启动计算机设备100时占用转发核和控制核的数目,则网卡104的端口发送队列占用Mbuf总数目计算过程可以包括:
获取发送队列长度、网卡104的端口数目、以及多核处理器101的控制核数目和转发核数目;
确定每个端口的总的发送队列数目为多核处理器101的转发核与控制核的总数目,其中,每个控制核和每个转发核在每个端口均对应一个发送队列;
依据端口数目、发送队列长度、以及每个端口的总的发送队列数目的乘积,计算端口发送队列占用Mbuf总数目,即,端口发送队列占用Mbuf总数目等于p*M*L2,其中,p表示网卡104的端口数目,M表示多核处理器101的转发核与控制核的总数目即每个端口的总的发送队列数目,L2表示发送队列长度。
子步骤S1013,确定多核处理器的每个核对应的本地缓存占用Mbuf总数目。
在本发明实施例中,为了减少多核处理器101中控制核和转发核竞争内存池带来的开销,可以让多核处理器101的每个核均占用一部分Mbuf,则确定多核处理器101的每个核对应的本地缓存占用Mbuf总数目的过程可以包括:
获取多核处理器101的控制核数目和转发核数目;
依据多核处理器101中控制核和转发核的总数目与预设占用数目的乘积,计算多核处理器101的每个核对应的本地缓存占用Mbuf总数目,预设占用数目是多核处理器101中单个核占用的Mbuf数目;
其中,考虑到缓存报文的情况,多核处理器101中单个核对应的预设占用数目均可以是512个,即,多核处理器101的每个核对应的本地缓存占用Mbuf总数目等于M*512,其中,M表示多核处理器101的转发核与控制核的总数目即每个端口的总的发送队列数目。
子步骤S1014,将端口接收队列占用Mbuf总数目、端口发送队列占用Mbuf总数目、每个核对应的本地缓存占用Mbuf总数目及预设的Mbuf数目之和作为待申请Mbuf数目。
在本发明实施例中,预设的Mbuf数目可以是16K,则待申请Mbuf数目的计算过程可以用公式N=p*(M-1)*L1+p*M*L2+M*512+16K表示,其中,N表示待申请Mbuf数目。
子步骤S1015,依据待申请Mbuf数目,从计算机设备的大页内存中申请多个Mbuf。
在本发明实施例中,计算出待申请Mbuf数目之后,则按照待申请Mbuf数目,从计算机设备100的大页内存中申请多个Mbuf,一般的常规页大小为4K字节,使用大页时页大小设置为2M或1G字节。
步骤S102,将多个Mbuf中的一部分作为多核处理器的每个核对应的本地缓存,并将多个Mbuf中的另一部分创建为内存池。
在本发明实施例中,按照待申请Mbuf数目,从计算机设备100的大页内存中申请多个Mbuf之后,分出一定数目的Mbuf作为多核处理器101的每个核对应的本地缓存,具体来说,首先,依次将预设占用数目的Mbuf作为多核处理器101中每个核对应的本地缓存,也就是说,CPU中每个核对应的本地缓存均包括预设占用数目的Mbuf,预设占用数目可以是512个;然后,将多个Mbuf中除多核处理器101的每个核对应的本地缓存之外的其它Mbuf创建为内存池,即,将(N-M*512)个Mbuf创建为内存池。
步骤S103,在网卡收发报文时,从每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在每个核对应的本地缓存无空闲Mbuf时,再从内存池中获取空闲Mbuf以缓存报文。
在本发明实施例中,空闲Mbuf是指未缓存报文的Mbuf,DPDK中普遍采用纯轮询模式进行报文收发,与报文收发有关的中断在网卡104端口初始化时会关闭。在网卡104收发报文时,多核处理器101的每个核优先从其对应的本地缓存中申请Mbuf来缓存报文,如果其对应的本地缓存中无空闲Mbuf,再从内存池中申请空闲Mbuf来缓存报文。同样的,报文收发完成需要释放Mbuf时,优先将Mbuf释放到每个核对应的本地缓存中,如果每个核对应的本地缓存中Mbuf均达到预设占用数目,再将Mbuf释放到内存池中。
与现有技术相比,本发明实施例具有以下有益效果:
首先,现有技术中,DPDK中接收队列的实现需要在计算机设备100启动时,用户手动配置网卡104端口、接收队列和多核处理器101中每个核的对应关系,本发明实施例通过设置,即,网卡104每个端口的总的接收队列数目等于启动计算机设备100时占用转发核的数目,无需用户手动配置,使得计算机设备100的启动更为方便。另外,每个转发核在每个端口对应一个接收队列的方式,可以避免控制核和转发核对同一队列进行并发操作,从而系统整体吞吐能力得到较大提升。
其次,将从计算机设备100的存储器102中申请的多个Mbuf中的一部分Mbuf作为多核处理器101的每个核对应的本地缓存,这样多核处理器101的每个核可以优先从其对应的本地缓存中获取Mbuf,即使每个核对应的本地缓存中缓存了大量送本机的报文,也能保证内存池中存在空闲Mbuf,如此,在收到报文时仍然可以从内存池中获取空闲Mbuf来缓存报文,从而保证在缓存大量报文的同时,驱动仍然能正常收发包。
最后,为多核处理器101中每个核对应的本地缓存分配预设占用数目(例如,512个)的Mbuf,这样即使协议栈缓存了大量报文,也能保证系统仍然可以具有较高的吞吐能力。
第二实施例
请参照图4,图4示出了本发明实施例提供的报文缓存装置200的方框示意图。报文缓存装置200包括申请模块201、执行模块202及报文缓存模块203。
申请模块201,用于从计算机设备的存储器中申请多个Mbuf。
在本发明实施例中,申请模块201具体用于计算网卡的端口接收队列占用Mbuf总数目;计算网卡的端口发送队列占用Mbuf总数目;确定多核处理器的每个核对应的本地缓存占用Mbuf总数目;将端口接收队列占用Mbuf总数目、端口发送队列占用Mbuf总数目、每个核对应的本地缓存占用Mbuf总数目及预设的Mbuf数目之和作为待申请Mbuf数目;依据待申请Mbuf数目,从计算机设备的大页内存中申请多个Mbuf。
在本发明实施例中,申请模块201执行计算网卡的端口接收队列占用Mbuf总数目的方式,包括:获取接收队列长度、网卡的端口数目、以及多核处理器的转发核数目;确定每个端口的总的接收队列数目为转发核数目,其中,每个转发核在每个端口都对应一个接收队列;依据端口数目、接收队列长度、以及每个端口的总的接收队列数目的乘积,确定出端口接收队列占用Mbuf总数目。
在本发明实施例中,申请模块201执行计算网卡的端口发送队列占用Mbuf总数目的方式,包括:获取发送队列长度、网卡的端口数目、以及多核处理器的控制核数目和转发核数目;确定每个端口的总的发送队列数目为多核处理器的转发核与控制核的总数目,其中,每个控制核和每个转发核在每个端口均对应一个发送队列;依据端口数目、发送队列长度、以及每个端口的总的发送队列数目的乘积,计算所述发送队列占用Mbuf总数目。
在本发明实施例中,申请模块201执行确定多核处理器的每个核对应的本地缓存占用Mbuf总数目的方式,包括:获取多核处理器的控制核数目和转发核数目;依据多核处理器中控制核和转发核的总数目与预设占用数目的乘积,计算多核处理器的每个核对应的本地缓存占用Mbuf总数目,其中,预设占用数目是多核处理器中单个核占用的Mbuf数目。
执行模块202,用于将多个Mbuf中的一部分作为多核处理器的每个核对应的本地缓存,并将多个Mbuf中的另一部分创建为内存池。
报文缓存模块203,用于在网卡收发报文时,从每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在每个核对应的本地缓存无空闲Mbuf时,再从内存池中获取空闲Mbuf以缓存报文。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被多核处理器101执行时实现本发明实施例揭示的报文缓存方法。
综上所述,本发明实施例提供的一种报文缓存方法及装置,应用于计算机设备,计算机设备包括网卡、多核处理器和存储器,所述方法包括:从计算机设备的存储器中申请多个Mbuf;将多个Mbuf中的一部分作为多核处理器的每个核对应的本地缓存,并将多个Mbuf中的另一部分创建为内存池;在网卡收发报文时,从每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在每个核对应的本地缓存无空闲Mbuf时,再从内存池中获取空闲Mbuf以缓存报文。与现有技术相比,本发明实施例在申请多个Mbuf时将每个核对应的本地缓存考虑在内,并且在收发报文时优先使用每个核对应的本地缓存中的Mbuf缓存报文,这样即使每个核对应的本地缓存中缓存了大量送本机的报文,也能保证内存池中存在空闲Mbuf,如此,在收到报文时仍然可以从内存池中获取空闲Mbuf来缓存报文,也就是说,可以保证在缓存大量报文的同时,驱动仍然能正常收发包。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
Claims (10)
1.一种报文缓存方法,其特征在于,应用于计算机设备,所述计算机设备包括网卡、多核处理器和存储器,所述方法包括:
从所述计算机设备的存储器中申请多个Mbuf;
将所述多个Mbuf中的一部分作为所述多核处理器的每个核对应的本地缓存,并将所述多个Mbuf中的另一部分创建为内存池;
在网卡收发报文时,从所述每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在所述每个核对应的本地缓存无空闲Mbuf时,再从所述内存池中获取空闲Mbuf以缓存报文。
2.如权利要求1所述的方法,其特征在于,所述从所述计算机设备的存储器中申请多个Mbuf的步骤,包括:
计算所述网卡的端口接收队列占用Mbuf总数目;
计算所述网卡的端口发送队列占用Mbuf总数目;
确定所述多核处理器的每个核对应的本地缓存占用Mbuf总数目;
将所述端口接收队列占用Mbuf总数目、所述端口发送队列占用Mbuf总数目、所述每个核对应的本地缓存占用Mbuf总数目及预设的Mbuf数目之和作为待申请Mbuf数目;
依据所述待申请Mbuf数目,从所述计算机设备的大页内存中申请多个Mbuf。
3.如权利要求2所述的方法,其特征在于,所述计算所述网卡的端口接收队列占用Mbuf总数目的步骤,包括:
获取接收队列长度、所述网卡的端口数目、以及所述多核处理器的转发核数目;
确定每个端口的总的接收队列数目为所述转发核数目,其中,每个转发核在每个端口都对应一个接收队列;
依据所述端口数目、接收队列长度、以及每个端口的总的接收队列数目的乘积,计算所述端口接收队列占用Mbuf总数目。
4.如权利要求2所述的方法,其特征在于,所述计算所述网卡的端口发送队列占用Mbuf总数目的步骤,包括:
获取发送队列长度、所述网卡的端口数目、以及所述多核处理器的控制核数目和转发核数目;
确定每个端口的总的发送队列数目为所述多核处理器的转发核与控制核的总数目,其中,每个控制核和每个转发核在每个端口均对应一个发送队列;
依据所述端口数目、发送队列长度、以及每个端口的总的发送队列数目的乘积,计算所述端口发送队列占用Mbuf总数目。
5.如权利要求2所述的方法,其特征在于,所述确定所述多核处理器的每个核对应的本地缓存占用Mbuf总数目的步骤,包括:
获取所述多核处理器的控制核数目和转发核数目;
依据所述多核处理器中控制核和转发核的总数目与预设占用数目的乘积,计算所述多核处理器的每个核对应的本地缓存占用Mbuf总数目,其中,所述预设占用数目是所述多核处理器中单个核占用的Mbuf数目。
6.一种报文缓存装置,其特征在于,应用于计算机设备,所述计算机设备包括网卡、多核处理器和存储器,所述装置包括:
申请模块,用于从所述计算机设备的存储器中申请多个Mbuf;
执行模块,用于将所述多个Mbuf中的一部分作为所述多核处理器的每个核对应的本地缓存,并将所述多个Mbuf中的另一部分创建为内存池;
报文缓存模块,用于在网卡收发报文时,从所述每个核对应的本地缓存中获取空闲Mbuf以缓存报文,并在所述每个核对应的本地缓存无空闲Mbuf时,再从所述内存池中获取空闲Mbuf以缓存报文。
7.如权利要求6所述的装置,其特征在于,所述申请模块具体用于:
计算所述网卡的端口接收队列占用Mbuf总数目;
计算所述网卡的端口发送队列占用Mbuf总数目;
确定所述多核处理器的每个核对应的本地缓存占用Mbuf总数目;
将所述端口接收队列占用Mbuf总数目、所述端口发送队列占用Mbuf总数目、所述每个核对应的本地缓存占用Mbuf总数目及预设的Mbuf数目之和作为待申请Mbuf数目;
依据所述待申请Mbuf数目,从所述计算机设备的大页内存中申请多个Mbuf。
8.如权利要求7所述的装置,其特征在于,所述申请模块执行所述计算所述网卡的端口接收队列占用Mbuf总数目的方式,包括:
获取接收队列长度、所述网卡的端口数目、以及所述多核处理器的转发核数目;
确定每个端口的总的接收队列数目为所述转发核数目,其中,每个转发核在每个端口都对应一个接收队列;
依据所述端口数目、接收队列长度、以及每个端口的总的接收队列数目的乘积,确定出所述端口接收队列占用Mbuf总数目。
9.如权利要求7所述的装置,其特征在于,所述申请模块执行所述计算所述网卡的端口发送队列占用Mbuf总数目的方式,包括:
获取发送队列长度、所述网卡的端口数目、以及所述多核处理器的控制核数目和转发核数目;
确定每个端口的总的发送队列数目为所述多核处理器的转发核与控制核的总数目,其中,每个控制核和每个转发核在每个端口均对应一个发送队列;
依据所述端口数目、发送队列长度、以及每个端口的总的发送队列数目的乘积,计算所述端口发送队列占用Mbuf总数目。
10.如权利要求7所述的装置,其特征在于,所述申请模块执行所述确定所述多核处理器的每个核对应的本地缓存占用Mbuf总数目的方式,包括:
获取所述多核处理器的控制核数目和转发核数目;
依据所述多核处理器中控制核和转发核的总数目与预设占用数目的乘积,计算所述多核处理器的每个核对应的本地缓存占用Mbuf总数目,其中,所述预设占用数目是所述多核处理器中单个核占用的Mbuf数目。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910101471.4A CN109617832B (zh) | 2019-01-31 | 2019-01-31 | 报文缓存方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910101471.4A CN109617832B (zh) | 2019-01-31 | 2019-01-31 | 报文缓存方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109617832A true CN109617832A (zh) | 2019-04-12 |
CN109617832B CN109617832B (zh) | 2022-07-08 |
Family
ID=66021786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910101471.4A Active CN109617832B (zh) | 2019-01-31 | 2019-01-31 | 报文缓存方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109617832B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110719234A (zh) * | 2019-10-17 | 2020-01-21 | 南京中孚信息技术有限公司 | 一种基于dpdk的数据包处理方法及装置 |
CN113672398A (zh) * | 2021-10-25 | 2021-11-19 | 北京金睛云华科技有限公司 | 全流量回溯分析系统的内存优化方法和设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080244231A1 (en) * | 2007-03-30 | 2008-10-02 | Aaron Kunze | Method and apparatus for speculative prefetching in a multi-processor/multi-core message-passing machine |
US20100146218A1 (en) * | 2008-12-09 | 2010-06-10 | Brian Keith Langendorf | System And Method For Maintaining Cache Coherency Across A Serial Interface Bus |
CN103338157A (zh) * | 2013-07-01 | 2013-10-02 | 杭州华三通信技术有限公司 | 一种多核系统核间数据报文缓存方法及设备 |
CN105337896A (zh) * | 2014-07-25 | 2016-02-17 | 华为技术有限公司 | 报文处理方法和装置 |
CN105677580A (zh) * | 2015-12-30 | 2016-06-15 | 杭州华为数字技术有限公司 | 访问缓存的方法和装置 |
CN108132889A (zh) * | 2017-12-20 | 2018-06-08 | 东软集团股份有限公司 | 内存管理方法、装置、计算机可读存储介质及电子设备 |
CN108768898A (zh) * | 2018-04-03 | 2018-11-06 | 郑州云海信息技术有限公司 | 一种片上网络传输报文的方法及其装置 |
-
2019
- 2019-01-31 CN CN201910101471.4A patent/CN109617832B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080244231A1 (en) * | 2007-03-30 | 2008-10-02 | Aaron Kunze | Method and apparatus for speculative prefetching in a multi-processor/multi-core message-passing machine |
US20100146218A1 (en) * | 2008-12-09 | 2010-06-10 | Brian Keith Langendorf | System And Method For Maintaining Cache Coherency Across A Serial Interface Bus |
CN103338157A (zh) * | 2013-07-01 | 2013-10-02 | 杭州华三通信技术有限公司 | 一种多核系统核间数据报文缓存方法及设备 |
CN105337896A (zh) * | 2014-07-25 | 2016-02-17 | 华为技术有限公司 | 报文处理方法和装置 |
CN105677580A (zh) * | 2015-12-30 | 2016-06-15 | 杭州华为数字技术有限公司 | 访问缓存的方法和装置 |
CN108132889A (zh) * | 2017-12-20 | 2018-06-08 | 东软集团股份有限公司 | 内存管理方法、装置、计算机可读存储介质及电子设备 |
CN108768898A (zh) * | 2018-04-03 | 2018-11-06 | 郑州云海信息技术有限公司 | 一种片上网络传输报文的方法及其装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110719234A (zh) * | 2019-10-17 | 2020-01-21 | 南京中孚信息技术有限公司 | 一种基于dpdk的数据包处理方法及装置 |
CN113672398A (zh) * | 2021-10-25 | 2021-11-19 | 北京金睛云华科技有限公司 | 全流量回溯分析系统的内存优化方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109617832B (zh) | 2022-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101621469B (zh) | 数据报文存取控制装置和方法 | |
CN103366801B (zh) | 存储器装置及其操作方法 | |
CN105653202B (zh) | 一种用于逻辑存储管理的多级方案 | |
CN104516773B (zh) | 用于物理机的数据分配方法和数据分配装置 | |
EP1770498A3 (en) | Logical volume transfer method and storage network system | |
CN106104485A (zh) | 针对多进程应用的动态资源管理 | |
CN104011689B (zh) | 非易失性存储器损耗管理 | |
CN107391397A (zh) | 支持近存储器和远存储器访问的存储器通道 | |
CN105408875B (zh) | 在存储器接口上的分布式过程执行和文件系统 | |
CN107766270A (zh) | 用于PCIe设备的数据读取管理方法及装置 | |
CN107533440B (zh) | 标识磁盘驱动器和处理数据访问请求 | |
CN109617832A (zh) | 报文缓存方法及装置 | |
CN108540982A (zh) | 用于虚拟基站的通信方法和设备 | |
CN104115230B (zh) | 基于高效pcms刷新机制的计算装置、方法和系统 | |
US9547553B1 (en) | Data resiliency in a shared memory pool | |
CN109800183A (zh) | 用于多端口存储类存储器接口的方法及设备 | |
JP2014532237A (ja) | ストレージにアクセスするためのコマンドキュー長を効率的に増やす方法及び装置 | |
CN109101185A (zh) | 固态存储设备及其写命令和读命令处理方法 | |
JP2006178923A5 (zh) | ||
US20090313430A1 (en) | Positron Emission Tomography Event Stream Buffering | |
CN109074134A (zh) | 用于电子设备的360度铰链组装件 | |
CN106662895A (zh) | 计算机设备和计算机设备数据读写的方法 | |
CN104699647B (zh) | 用于操作双芯片组网络接口控制器的方法和系统 | |
WO2016058560A1 (zh) | 一种基于服务端与外部缓存系统的外接式计算设备加速方法与实现该方法的设备 | |
CN103885900B (zh) | 数据访问处理方法、PCIe设备和用户设备 |
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 |