CN105591979A - 报文的处理系统和方法 - Google Patents
报文的处理系统和方法 Download PDFInfo
- Publication number
- CN105591979A CN105591979A CN201510937319.1A CN201510937319A CN105591979A CN 105591979 A CN105591979 A CN 105591979A CN 201510937319 A CN201510937319 A CN 201510937319A CN 105591979 A CN105591979 A CN 105591979A
- Authority
- CN
- China
- Prior art keywords
- message
- packet
- storage unit
- queue
- physical address
- 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.)
- Pending
Links
Classifications
-
- 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/62—Queue scheduling characterised by scheduling criteria
- H04L47/622—Queue service order
-
- 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/62—Queue scheduling characterised by scheduling criteria
- H04L47/6245—Modifications to standard FIFO or LIFO
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种报文的处理系统和方法,该系统包括:报文缓存区,用于存放接收报文和发送报文;收包队列,用于存放接收报文的物理地址;发包队列,用于存放发送报文的物理地址和报文长度。本发明通过使用统一的报文缓存区来存储接收报文和发送报文,并使收包队列、发包队列分别仅存储接收报文和发送报文的地址,从而实现报文接收、报文发送、报文转发全程零数据拷贝,并能够有效地降低CPU的处理时间、提高处理效率。
Description
技术领域
本发明涉及报文处理领域,具体来说,涉及一种报文的处理系统和方法。
背景技术
操作系统的标准网卡驱动是基于数据拷贝操作的,即报文数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行拷贝。但是,数据拷贝操作导致极大的CPU开销,限制了处理性能,因此,提出了零拷贝(zero-copy)技术以避免不必要CPU数据拷贝操作。但是,传统零拷贝机制虽然能在一定程度上实现零拷贝报文接收和发送,却无法实现零拷贝报文的转发。其中,报文接收为网卡将收到的报文交给CPU处理;报文发送为CPU将报文交给网卡,网卡将报文发送到网络中;报文转发为将接收到的报文经过修改或不修改再发送出去。因此,对于传统的零拷贝机制来说,当需要对报文进行转发时,必须将接收报文从接收缓存区拷贝到发送缓存区。显然,这样的报文拷贝操作将消耗大量CPU时间,严重影响系统处理性能。
针对相关技术中的上述问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的上述问题,本发明提出一种报文的处理系统和方法,能够实现报文接收、报文发送、报文转发全程零数据拷贝,并有效地降低CPU的处理时间、提高处理效率,有效改善报文处理的性能。
本发明的技术方案是这样实现的:
根据本发明的一个方面,提供了一种报文的处理系统。
该处理系统包括:
报文缓存区,用于存放接收报文和发送报文;
收包队列,用于存放接收报文的物理地址;
发包队列,用于存放发送报文的物理地址和报文长度。
其中,报文缓存区、收包队列、发包队列均为地址连续的内存区域。
此外,报文缓存区包括多个固定长度的报文存储单元,用于存放接收报文和发送报文。
其中,一个报文存储单元用于存放一个接收报文或一个发送报文。
另外,接收报文的物理地址为存放该接收报文的报文存储单元的物理地址;发送报文的物理地址为存放该发送报文的报文存储单元的物理地址。
根据本发明的另一方面,提供了一种用于上述任意一项处理系统的处理方法。
该处理方法包括:
从报文缓存区申请第一报文存储单元以存放接收报文的报文内容;
将该第一报文存储单元的物理地址写入收包队列;
根据收包队列中存放的物理地址在报文缓存区的对应第一报文存储单元中读取接收报文。
此外,该处理方法进一步包括:
从报文缓存区申请第二报文存储单元,并将发送报文的报文内容写入至第二报文存储单元;
将该第二报文存储单元的物理地址和该发送报文的报文长度写入发包队列;
在发送完成发送报文后,释放第二报文存储单元的存储空间。
另外,该处理方法进一步包括:
在需要对接收报文转发的情况下,根据应用需求对读取的接收报文进行修改或不修改处理;
将该第一报文存储单元的物理地址和经过该修改或不修改处理后的该接收报文的报文长度写入发包队列;
在经过该修改后不修改处理后的该接收报文转发完成后,释放第一报文存储单元的存储空间。
此外,该处理方法进一步包括:
在不需要对接收报文转发的情况下,在读取接收报文后,释放第一报文存储单元的存储空间。
本发明通过使用统一的报文缓存区来存储接收报文和发送报文,并使收包队列、发包队列分别仅存储接收报文和发送报文的地址,从而实现报文接收、报文发送、报文转发全程零数据拷贝,并能够有效地降低CPU的处理时间、提高处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的报文的处理系统的示意图;
图2是根据本发明实施例的报文的处理方法的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
根据本发明的实施例,提供了一种报文的处理系统。
如图1所示,根据本发明实施例的处理系统包括:
报文缓存区,用于存放接收报文和发送报文;
收包队列,用于存放接收报文的物理地址;
发包队列,用于存放发送报文的物理地址和报文长度。
其中,在一个实施例中,接收报文的物理地址为存放该接收报文的报文存储单元的物理地址;发送报文的物理地址为存放该发送报文的报文存储单元的物理地址。
此外,从图1可以看出,处理系统在运行过程中还包括CPU、网卡。
其中,在一个实施例中,报文缓存区为一块地址连续的内存区域,分割为大量的固定长度的报文存储单元,每个报文存储单元可以存放一个网络报文(发送报文或接收报文),并且,每个报文存储单元的长度相同。
此外,在一个实施例中,收包队列为一块地址连续的内存区域,用来存放接收报文的地址,报文地址指向报文缓存区的报文存储单元。
另外,在一个实施例中,发包队列为一块地址连续的内存区域,用来存放发送报文的地址和报文长度,报文地址指向报文缓存区的报文存储单元。
此外,根据本发明实施例的处理系统还包括:头指针和尾指针,用于管理收包队列和发包队列。
其中,在一个实施例中,头指针和尾指针为网卡寄存器。
在具体实例中,CPU控制头指针,网卡控制尾指针。
在一个实施例中,头指针和尾指针之间的队列内容为CPU放入队列中等待网卡处理的内容。
在一个实施例中,在处理系统启动之前,需要进行系统初始化,具体包括:网卡驱动申请地址连续的内存空间作为报文缓存区、收包队列、发包队列;将收包队列、发包队列的起始物理地址和深度写入网卡相应寄存器;以及,由于操作系统包括内核态和用户态,在用户态CPU只能访问自身的虚拟地址空间所以,需要用户态程序使用mmap(一个文件或者其它对象映射进内存)将报文缓存区、收包队列、发包队列、网卡寄存器映射到虚拟地址空间,这样CPU才可以访问上述报文缓存区、收包队列、发包队列和网卡寄存器。
根据本发明的实施例,还提供了一种用于上述处理系统的报文的处理方法。
如图2所示,根据本发明实施例的处理方法包括:
步骤S201,从报文缓存区申请第一报文存储单元以存放接收报文的报文内容;
步骤S203,将该第一报文存储单元的物理地址写入收包队列;
步骤S205,根据收包队列中存放的物理地址在报文缓存区的对应第一报文存储单元中读取接收报文。
此外,在一个实施例中,根据本发明实施例的处理方法进一步包括:
从报文缓存区申请第二报文存储单元,并将发送报文的报文内容写入至第二报文存储单元;
将该第二报文存储单元的物理地址和该发送报文的报文长度写入发包队列;
在发送完成发送报文后,释放第二报文存储单元的存储空间。
另外,在一个实施例中,根据本发明实施例的处理方法进一步包括:
在需要对接收报文转发的情况下,根据应用需求对读取的接收报文进行修改或不修改处理;
将该第一报文存储单元的物理地址和经过该修改或不修改处理后的该接收报文的报文长度写入发包队列;
在经过该修改后不修改处理后的该接收报文转发完成后,释放第一报文存储单元的存储空间。
此外,在一个实施例中,根据本发明实施例的处理方法进一步包括:
在不需要对接收报文转发的情况下,在读取接收报文后,释放第一报文存储单元的存储空间。
为了更好的理解本发明的上述处理方法,下面结合图1来对本发明的报文接收、报文发送,以及报文转发的三个流程进行详细阐述。
一、报文接收流程的处理方法包括:
首先,用户态程序从报文缓存区申请报文存储单元;
然后,用户态程序将报文存储单元的物理地址写入收包队列,并修改网卡收包队列头指针,其中,假设存储了两个报文存储单元的物理地址在报文1地址和报文2地址,那么头指针指向收包队列中报文2地址;
接着,网卡使用直接内存访问(DMA)读取收包队列的内容,并缓存;
那么,在数据包(即,即将接收的报文)到达后,网卡根据收包队列内存储的物理地址依次将数据包中的报文内容DMA写到报文缓存区的对应物理内存(即对应的报文存储单元)中,并修改收包队列尾指针至收包队列的报文2地址;
然后,用户态程序根据收包队列中的物理地址到对应的报文存储单元读取接收的报文(即上述数据包);
最后,用户态程序完成处理后将报文缓存区中存储上述数据包的报文存储单元释放。
二、报文发送流程的处理方法包括:
首先,用户态程序从报文缓存区申请报文存储单元;
然后,用户态程序在报文缓存区的报文存储单元中写入要发送的报文内容;
接着,用户态程序将写入上述报文内容的报文存储单元的物理地址和写入的上述报文的报文长度写入发包队列,并修改网卡发包队列头指针;
然后,网卡使用DMA读取发包队列中的内容(即需要发送的报文所对应的报文存储单元的物理地址和报文的长度),并缓存;
接着,网卡根据发包队列内的地址和报文长度,依次将报文内容DMA读到网卡进行发送,并修改发包队列尾指针;
最后,用户态程序在网卡发送完成后将报文存储单元释放。
三、报文转发流程的处理方法包括:
首先,用户态程序从报文缓存区申请报文存储单元;
然后,用户态程序将报文存储单元的物理地址写入收包队列,并修改网卡收包队列头指针;
接着,网卡使用DMA读取收包队列的内容,并缓存;
那么,在数据包(即,即将接收的报文)到达后,网卡根据收包队列内存储的物理地址依次将数据包中的报文内容DMA写到报文缓存区的对应物理内存(即对应的报文存储单元)中,并修改收包队列尾指针;
然后,用户态程序根据收包队列中的物理地址到对应的报文存储单元读取接收的报文(即上述数据包);
接着,用户态程序根据应用需求对报文缓存区中的上述接收报文进行修改,或不修改;
接着,用户态程序将修改或未修改的上述接收报文的报文内容所对应的报文存储单元的物理地址和报文长度写入发包队列,并修改网卡发包队列头指针;
然后,网卡使用DMA读取发包队列中的内容(即修改或未修改的上述接收报文所对应的报文存储单元的物理地址和报文的长度),并缓存;
接着,网卡根据发包队列内的地址和报文长度,依次将报文内容DMA读到网卡进行发送,并修改发包队列尾指针;
最后,用户态程序在网卡发送完成后将报文存储单元释放。
此外,值得注意的是,虽然在上述实施例汇总,仅描述了单个队列的处理流程,但是本发明的上述技术方案可以扩展到多个队列的处理。
综上所述,借助于本发明的上述技术方案,通过使用统一的报文缓存区存储报文,而不是将报文的接收和发送分离,并使用收包队列、发包队列完成CPU和网卡之间的交互,且只是收发包队列存储报文地址,而非报文内容,从而实现报文接收、报文发送、报文转发全程零数据拷贝,能够有效地降低CPU的处理时间、提高处理效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种报文的处理系统,其特征在于,包括:
报文缓存区,用于存放接收报文和发送报文;
收包队列,用于存放所述接收报文的物理地址;
发包队列,用于存放所述发送报文的物理地址和报文长度。
2.根据权利要求1所述的处理系统,其特征在于,所述报文缓存区、所述收包队列、所述发包队列均为地址连续的内存区域。
3.根据权利要求1所述的处理系统,其特征在于,所述报文缓存区包括多个固定长度的报文存储单元,用于存放所述接收报文和所述发送报文。
4.根据权利要求3所述的处理系统,其特征在于,一个报文存储单元用于存放一个所述接收报文或一个所述发送报文。
5.根据权利要求3所述的处理系统,其特征在于,所述接收报文的物理地址为存放该接收报文的报文存储单元的物理地址;所述发送报文的物理地址为存放该发送报文的报文存储单元的物理地址。
6.一种用于如权利要求1~5任意一项所述的处理系统的处理方法,其特征在于,包括:
从所述报文缓存区申请第一报文存储单元以存放所述接收报文的报文内容;
将该第一报文存储单元的物理地址写入所述收包队列;
根据所述收包队列中存放的物理地址在所述报文缓存区的对应第一报文存储单元中读取所述接收报文。
7.根据权利要求6所述的处理方法,其特征在于,进一步包括:
从报文缓存区申请第二报文存储单元,并将所述发送报文的报文内容写入至所述第二报文存储单元;
将该第二报文存储单元的物理地址和该发送报文的报文长度写入发包队列;
在发送完成所述发送报文后,释放所述第二报文存储单元的存储空间。
8.根据权利要求6所述的处理方法,其特征在于,进一步包括:
在需要对所述接收报文转发的情况下,根据应用需求对读取的所述接收报文进行修改或不修改处理;
将该第一报文存储单元的物理地址和经过该修改或不修改处理后的该接收报文的报文长度写入所述发包队列;
在经过该修改后不修改处理后的该接收报文转发完成后,释放所述第一报文存储单元的存储空间。
9.根据权利要求6所述的处理方法,其特征在于,进一步包括:
在不需要对所述接收报文转发的情况下,在读取所述接收报文后,释放所述第一报文存储单元的存储空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510937319.1A CN105591979A (zh) | 2015-12-15 | 2015-12-15 | 报文的处理系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510937319.1A CN105591979A (zh) | 2015-12-15 | 2015-12-15 | 报文的处理系统和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105591979A true CN105591979A (zh) | 2016-05-18 |
Family
ID=55931207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510937319.1A Pending CN105591979A (zh) | 2015-12-15 | 2015-12-15 | 报文的处理系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105591979A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783250A (zh) * | 2018-12-18 | 2019-05-21 | 中兴通讯股份有限公司 | 一种报文转发方法及网络设备 |
CN113014308A (zh) * | 2021-02-23 | 2021-06-22 | 湖南斯北图科技有限公司 | 一种卫星通信大容量通道并行的物联网数据接收方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101212451A (zh) * | 2006-12-30 | 2008-07-02 | 北京天融信网络安全技术有限公司 | 防火墙芯片数据包缓存管理方法 |
CN101707564A (zh) * | 2009-12-04 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置 |
CN102377682A (zh) * | 2011-12-12 | 2012-03-14 | 西安电子科技大学 | 基于定长单元存储变长分组的队列管理方法及设备 |
-
2015
- 2015-12-15 CN CN201510937319.1A patent/CN105591979A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101212451A (zh) * | 2006-12-30 | 2008-07-02 | 北京天融信网络安全技术有限公司 | 防火墙芯片数据包缓存管理方法 |
CN101707564A (zh) * | 2009-12-04 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置 |
CN102377682A (zh) * | 2011-12-12 | 2012-03-14 | 西安电子科技大学 | 基于定长单元存储变长分组的队列管理方法及设备 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109783250A (zh) * | 2018-12-18 | 2019-05-21 | 中兴通讯股份有限公司 | 一种报文转发方法及网络设备 |
CN109783250B (zh) * | 2018-12-18 | 2021-04-09 | 中兴通讯股份有限公司 | 一种报文转发方法及网络设备 |
CN113014308A (zh) * | 2021-02-23 | 2021-06-22 | 湖南斯北图科技有限公司 | 一种卫星通信大容量通道并行的物联网数据接收方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20160132541A1 (en) | Efficient implementations for mapreduce systems | |
CN101707565B (zh) | 零拷贝网络报文发送、接收方法和装置 | |
CN105095116A (zh) | 缓存替换的方法、缓存控制器和处理器 | |
CN103150278B (zh) | 基于pio和dma混合的网络接口卡描述符提交方法 | |
US20190272099A1 (en) | Data Operating Method, Device, and System | |
CN102291298B (zh) | 一种高效的面向长消息的计算机网络通信方法 | |
CN105765545B (zh) | PCIe I/O设备共享方法及设备与互联系统 | |
EP3077914B1 (en) | System and method for managing and supporting virtual host bus adaptor (vhba) over infiniband (ib) and for supporting efficient buffer usage with a single external memory interface | |
WO2015180513A1 (zh) | 一种数据传输方法及计算机 | |
CN105393228A (zh) | 读写闪存中数据的方法、装置及用户设备 | |
US9274860B2 (en) | Multi-processor device and inter-process communication method thereof | |
CN109117386A (zh) | 一种网络远程读写二级存储的系统及方法 | |
CN102314400A (zh) | 一种分散聚合式dma方法及装置 | |
CN102567278A (zh) | 一种片上多核数据传输方法和装置 | |
CN112214240A (zh) | 主机输出输入命令的执行装置及方法及计算机可读取存储介质 | |
CN105260332A (zh) | 一种对cpld数据包进行有序存储的方法及系统 | |
CN105591979A (zh) | 报文的处理系统和方法 | |
CN106254270A (zh) | 一种队列管理方法及装置 | |
CN101848150B (zh) | 维护多播计数器的计数值的方法及装置 | |
US9288163B2 (en) | Low-latency packet receive method for networking devices | |
US9971549B2 (en) | Method of operating a memory device | |
US20070005868A1 (en) | Method, apparatus and system for posted write buffer for memory with unidirectional full duplex interface | |
CN104991745A (zh) | 一种存储系统数据写入方法和系统 | |
US20220011966A1 (en) | Reduced network load with combined put or get and receiver-managed offset | |
US20140013066A1 (en) | Memory sub-system and computing system including the same |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160518 |