CN102006241B - 一种多个应用共享一个缓冲区的报文接收方法 - Google Patents
一种多个应用共享一个缓冲区的报文接收方法 Download PDFInfo
- Publication number
- CN102006241B CN102006241B CN2010105977594A CN201010597759A CN102006241B CN 102006241 B CN102006241 B CN 102006241B CN 2010105977594 A CN2010105977594 A CN 2010105977594A CN 201010597759 A CN201010597759 A CN 201010597759A CN 102006241 B CN102006241 B CN 102006241B
- Authority
- CN
- China
- Prior art keywords
- message
- application
- pointer
- software
- read
- 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
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种多个应用共享一个缓冲区的报文接收方法。硬件网卡的PCI控制器向主机注册PCI空间,驱动软件申请一个报文缓冲区,对缓冲区设置一个写指针和多个读指针寄存器,每个应用单独使用一个,硬件接收报文后移动写指针,接口库映射报文缓冲区和PCI空间寄存器,应用软件调用接口库时确定自己的读指针,之后通过移动自己的读指针接收报文。本发明使多个应用可以利用一个共享缓冲区从网络接收报文,从而避免多应用收包时的报文拷贝或二次分发开销。
Description
技术领域
本发明涉及网络数据处理领域,具体涉及一种多个应用共享一个缓冲区的报文接收方法。
背景技术
在网络数据分析系统中,往往在一个硬件平台上运行多个应用,也就是说对设备接收到的同一个网络报文中的数据,需要多个应用软件进行接收和处理。
目前常用的一种方案是采取数据拷贝的方法,把每一个网络报文数据复制两份,分别交给两个应用,每个应用处理自己的数据拷贝;另一种方案是采用二次分发的方法,每个应用建立自己的报文指针队列,设备每收到一个报文,就把报文的指针分发到每个应用的接收队列中。
但是在高速网络上,采取数据拷贝的方法会带来大量的cpu数据拷贝和内存访问开销,采用二次分发的方法,需要每个应用建立自己的报文指针队列,需要使用同步机制进行复杂的队列管理。两种方案都会使系统的整体性能降低。
发明内容
本发明的目的是提供一种多个应用共享一个缓冲区的报文接收方法,避免多应用接收报文的内存拷贝和二次分发。
一种多个应用共享一个缓冲区的报文接收方法,方法如下:
A、硬件网卡的PCI控制器向主机注册PCI空间,定义接收报文相关的寄存器地址;PCI空间寄存器储存以下数据:报文缓冲区地址、长度、软件从缓冲区读报文的读指针、硬件向缓冲区写报文的写指针,其中读指针有多个,每个应用有自己的读指针;
B、驱动软件申请连续的物理内存,作为接收报文的缓冲区,并把缓冲区的物理地址和长度写入PCI空间的对应寄存器,并设置硬件的写指针和所有应用软件的读指针为初始值0;
C、硬件网卡每次从网络接收到一个报文后,把报文传输到软件的报文缓冲区中,并根据报文长度,修改PCI空间的写指针;
D、接口库中的API接口被一个应用调用时,首先把内核空间的缓冲区和硬件的PCI空间映射到该应用的用户空间,然后根据该应用是第几个应用,把PCI空间的第几个软件读指针寄存器作为该应用的读指针寄存器使用;
E、应用软件循环收包,每次收包都要查看接口库中映射出的PCI空间寄存器,判断硬件写指针是否等于软件的读指针,如果不相等,则说明读指针和写指针之间是新的报文,则读取出来,并移动读指针;如果读指针追上了写指针,则说明缓冲区内报文已经全部读出,则等待一个时间片后,进行下一次轮询。
本发明使多个应用可以利用一个共享缓冲区从网络接收报文,从而避免多应用收包时的报文拷贝或二次分发开销。
附图说明
图1是本发明工作原理图
具体实施方式
本发明是一个软硬件结合的系统,包括硬件网卡、驱动软件、接口库软件。
驱动软件负责分配接收报文使用的缓冲区,需要在内核中申请一整片物理地址连续的内存,作为接收报文的缓冲区。
硬件网卡负责从网络接收报文,并把报文传输到主机内存的报文缓冲区中,通过写PCI空间的寄存器,通知软件有新报文到达。PCI空间寄存器储存以下数据:报文缓冲区地址、长度、软件从缓冲区读报文的读指针、硬件向缓冲区写报文的写指针,其中读指针有多个,每个应用有自己的读指针。
接口库软件在每个应用调用API接口时,把报文缓冲区和PCI空间映射到该应用的用户空间,每个应用去轮询PCI空间中该应用的缓冲区读写指针信息,查看是否有新的报文到达。
该发明接收报文的方法如下:
(1)硬件网卡的PCI控制器向主机注册PCI空间,其中定义接收报文相关的寄存器地址,包括报文缓冲区地址、长度、软件从缓冲区读报文的读指针、硬件向缓冲区写报文的写指针,根据预设的最大应用软件个数,配置多个读指针寄存器。
(2)驱动软件申请报文缓冲区。
驱动软件申请一片物理地址连续的内存,作为接收报文的缓冲区,把缓冲区的物理地址和长度写入PCI空间的对应寄存器,并设置硬件的写指针和所有应用软件的读指针为初始值0。
(3)硬件接收报文。
硬件每次从网络接收到一个报文后,把报文传输到软件的报文缓冲区中,并根据报文长度,修改PCI空间的写指针。
(4)接口库映射报文缓冲区和PCI空间寄存器。
接口库中的API接口被一个应用调用时,首先把内核空间的缓冲区和硬件的PCI空间映射到该应用的用户空间,然后根据该应用是第几个应用,把PCI空间的第几个软件读指针寄存器作为该应用的读指针寄存器使用。
(5)应用软件接收报文。
应用软件循环收包,每次收包都要查看接口库中映射出的PCI空间寄存器,判断硬件写指针是否等于软件的读指针,如果不相等,则说明读指针和写指针之间是新的报文,则读取出来,并移动读指针;如果读指针追上了写指针,则说明缓冲区内报文已经全部读出,则等待一个时间片后,进行下一次轮询。
Claims (1)
1.一种多个应用共享一个缓冲区的报文接收方法,其特征在于:方法如下:
A、硬件网卡的PCI控制器向主机注册PCI空间,定义接收报文相关的寄存器地址;PCI空间寄存器储存以下数据:报文缓冲区地址、长度、软件从缓冲区读报文的读指针、硬件向缓冲区写报文的写指针,其中读指针有多个,每个应用有自己的读指针;
B、驱动软件申请连续的物理内存,作为接收报文的缓冲区,并把缓冲区的物理地址和长度写入PCI空间的对应寄存器,并设置硬件的写指针和所有应用软件的读指针为初始值0;
C、硬件网卡每次从网络接收到一个报文后,把报文传输到软件的报文缓冲区中,并根据报文长度,修改PCI空间的写指针;
D、接口库中的API接口被一个应用调用时,首先把内核空间的缓冲区和硬件的PCI空间映射到该应用的用户空间,然后根据该应用是第几个应用,把PCI空间的第几个软件读指针寄存器作为该应用的读指针寄存器使用;
E、应用软件循环收包,每次收包都要查看接口库中映射出的PCI空间寄存器,判断硬件写指针是否等于软件的读指针,如果不相等,则说明读指针和写指针之间是新的报文,则读取出来,并移动读指针;如果读指针追上了写指针,则说明缓冲区内报文已经全部读出,则等待一个时间片后,进行下一次轮询。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105977594A CN102006241B (zh) | 2010-12-17 | 2010-12-17 | 一种多个应用共享一个缓冲区的报文接收方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105977594A CN102006241B (zh) | 2010-12-17 | 2010-12-17 | 一种多个应用共享一个缓冲区的报文接收方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102006241A CN102006241A (zh) | 2011-04-06 |
CN102006241B true CN102006241B (zh) | 2013-11-27 |
Family
ID=43813327
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105977594A Active CN102006241B (zh) | 2010-12-17 | 2010-12-17 | 一种多个应用共享一个缓冲区的报文接收方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102006241B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102420749A (zh) * | 2011-11-28 | 2012-04-18 | 曙光信息产业(北京)有限公司 | 一种网卡发包功能的实现装置和方法 |
CN102520911B (zh) * | 2011-12-19 | 2015-04-29 | 曙光信息产业(北京)有限公司 | 一种优化收包设备上的软件操作pci空间寄存器效率的系统和方法 |
CN102541773A (zh) * | 2011-12-31 | 2012-07-04 | 曙光信息产业股份有限公司 | 数据访问的实现方法和装置 |
CN102750245B (zh) * | 2012-05-29 | 2015-11-18 | 中国人民解放军国防科学技术大学 | 报文接收方法、报文接收模块、装置及系统 |
CN103744621A (zh) * | 2013-12-31 | 2014-04-23 | 深圳英飞拓科技股份有限公司 | 缓冲区循环读写的方法及装置 |
CN104978278B (zh) * | 2014-04-14 | 2020-05-29 | 创新先进技术有限公司 | 数据处理方法和装置 |
CN104468417B (zh) * | 2014-12-16 | 2018-05-01 | 上海斐讯数据通信技术有限公司 | 一种堆叠交换机报文传输方法、系统及堆叠交换机 |
US10176126B1 (en) * | 2015-06-29 | 2019-01-08 | Cadence Design Systems, Inc. | Methods, systems, and computer program product for a PCI implementation handling multiple packets |
CN107145399B (zh) * | 2017-04-22 | 2021-03-02 | 华为技术有限公司 | 一种共享内存管理方法及共享内存管理设备 |
US11863469B2 (en) | 2020-05-06 | 2024-01-02 | International Business Machines Corporation | Utilizing coherently attached interfaces in a network stack framework |
CN111638966A (zh) * | 2020-05-28 | 2020-09-08 | 维沃移动通信有限公司 | 资源获取方法、装置及电子设备 |
CN117196929B (zh) * | 2023-09-25 | 2024-03-08 | 沐曦集成电路(上海)有限公司 | 基于定长数据包的软硬件交互系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1925465A (zh) * | 2006-09-22 | 2007-03-07 | 中国科学院计算技术研究所 | 基于共享内存实现的数据包捕获方法 |
EP1975790A2 (en) * | 2007-03-30 | 2008-10-01 | Intel Corporation (INTEL) | Instant on video |
CN101477472A (zh) * | 2009-01-08 | 2009-07-08 | 上海交通大学 | 动态二进制翻译器中热路径的多核多线程构建方法 |
CN101540720A (zh) * | 2008-06-06 | 2009-09-23 | 曙光信息产业(北京)有限公司 | 一种支持多类型网卡链路聚合的零拷贝方法 |
-
2010
- 2010-12-17 CN CN2010105977594A patent/CN102006241B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1925465A (zh) * | 2006-09-22 | 2007-03-07 | 中国科学院计算技术研究所 | 基于共享内存实现的数据包捕获方法 |
EP1975790A2 (en) * | 2007-03-30 | 2008-10-01 | Intel Corporation (INTEL) | Instant on video |
CN101540720A (zh) * | 2008-06-06 | 2009-09-23 | 曙光信息产业(北京)有限公司 | 一种支持多类型网卡链路聚合的零拷贝方法 |
CN101477472A (zh) * | 2009-01-08 | 2009-07-08 | 上海交通大学 | 动态二进制翻译器中热路径的多核多线程构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102006241A (zh) | 2011-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102006241B (zh) | 一种多个应用共享一个缓冲区的报文接收方法 | |
CN105993009B (zh) | 通过非透明桥向PCIe集群中的计算资源传送MSI-X中断的方法和装置 | |
CN100592271C (zh) | 使用集成dma引擎进行高性能易失性磁盘驱动器存储器访问的装置和方法 | |
CN101159765B (zh) | 网络接口方法、装置和系统 | |
JP4809890B2 (ja) | メモリマイクロタイリングリクエストの並べ替え | |
KR20150091663A (ko) | 멀티 채널 메모리를 포함하는 시스템 및 그 동작 방법 | |
US10831693B1 (en) | Multicast master | |
CN105335309B (zh) | 一种数据传输方法及计算机 | |
US11397697B2 (en) | Core-to-core communication | |
US8954644B2 (en) | Apparatus and method for controlling memory | |
US11138106B1 (en) | Target port with distributed transactions | |
US8902915B2 (en) | Dataport and methods thereof | |
JP2015522878A (ja) | 異種プロセッサを使用するアプリケーションに低レイテンシを提供するためのシステムおよび方法 | |
US20150370706A1 (en) | Method and apparatus for cache memory data processing | |
CN103810139A (zh) | 一种多处理器的数据交换方法和装置 | |
CN102055671B (zh) | 一种多应用发包的优先级管理方法 | |
CN102098215B (zh) | 一种多应用收包的优先级管理方法 | |
CN105190577A (zh) | 合并存储器访问请求 | |
CN104123173A (zh) | 一种实现虚拟机间通信的方法及装置 | |
WO2017210015A1 (en) | Improving throughput in openfabrics environments | |
US20160239334A1 (en) | Techniques for portable computing device virtualization | |
US20100153678A1 (en) | Memory management apparatus and method | |
US9311225B2 (en) | DMA channels | |
US10284501B2 (en) | Technologies for multi-core wireless network data transmission | |
US10382575B2 (en) | Program execution system, method of executing program, and computer-readable storage medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20221212 Address after: 430040 NO.666, Wuhuan Avenue, linkonggang economic and Technological Development Zone, Wuhan City, Hubei Province (10) Patentee after: Dawning Network Technology Co.,Ltd. Address before: 300384 Xiqing District, Tianjin Huayuan Industrial Zone (outside the ring) 15 1-3, hahihuayu street. Patentee before: DAWNING INFORMATION INDUSTRY Co.,Ltd. |