CN102006241A - 一种多个应用共享一个缓冲区的报文接收方法 - Google Patents
一种多个应用共享一个缓冲区的报文接收方法 Download PDFInfo
- Publication number
- CN102006241A CN102006241A CN2010105977594A CN201010597759A CN102006241A CN 102006241 A CN102006241 A CN 102006241A CN 2010105977594 A CN2010105977594 A CN 2010105977594A CN 201010597759 A CN201010597759 A CN 201010597759A CN 102006241 A CN102006241 A CN 102006241A
- Authority
- CN
- China
- Prior art keywords
- message
- application
- pointer
- software
- hardware
- 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
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 true CN102006241A (zh) | 2011-04-06 |
CN102006241B 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) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102420749A (zh) * | 2011-11-28 | 2012-04-18 | 曙光信息产业(北京)有限公司 | 一种网卡发包功能的实现装置和方法 |
CN102520911A (zh) * | 2011-12-19 | 2012-06-27 | 曙光信息产业(北京)有限公司 | 一种优化收包设备上的软件操作pci空间寄存器效率的***和方法 |
CN102541773A (zh) * | 2011-12-31 | 2012-07-04 | 曙光信息产业股份有限公司 | 数据访问的实现方法和装置 |
CN102750245A (zh) * | 2012-05-29 | 2012-10-24 | 中国人民解放军国防科学技术大学 | 报文接收方法、报文接收模块、装置及*** |
CN103744621A (zh) * | 2013-12-31 | 2014-04-23 | 深圳英飞拓科技股份有限公司 | 缓冲区循环读写的方法及装置 |
CN104468417A (zh) * | 2014-12-16 | 2015-03-25 | 上海斐讯数据通信技术有限公司 | 一种堆叠交换机报文传输方法、***及堆叠交换机 |
CN104978278A (zh) * | 2014-04-14 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置 |
CN107145399A (zh) * | 2017-04-22 | 2017-09-08 | 华为技术有限公司 | 一种共享内存管理方法及共享内存管理设备 |
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 |
CN111638966A (zh) * | 2020-05-28 | 2020-09-08 | 维沃移动通信有限公司 | 资源获取方法、装置及电子设备 |
WO2021224739A1 (en) * | 2020-05-06 | 2021-11-11 | International Business Machines Corporation | Utilizing coherently attached interfaces in a network stack framework |
CN117196929A (zh) * | 2023-09-25 | 2023-12-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 | 上海交通大学 | 动态二进制翻译器中热路径的多核多线程构建方法 |
Cited By (19)
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空间寄存器效率的***和方法 |
CN102520911A (zh) * | 2011-12-19 | 2012-06-27 | 曙光信息产业(北京)有限公司 | 一种优化收包设备上的软件操作pci空间寄存器效率的***和方法 |
CN102541773A (zh) * | 2011-12-31 | 2012-07-04 | 曙光信息产业股份有限公司 | 数据访问的实现方法和装置 |
CN102750245A (zh) * | 2012-05-29 | 2012-10-24 | 中国人民解放军国防科学技术大学 | 报文接收方法、报文接收模块、装置及*** |
CN102750245B (zh) * | 2012-05-29 | 2015-11-18 | 中国人民解放军国防科学技术大学 | 报文接收方法、报文接收模块、装置及*** |
CN103744621A (zh) * | 2013-12-31 | 2014-04-23 | 深圳英飞拓科技股份有限公司 | 缓冲区循环读写的方法及装置 |
CN104978278A (zh) * | 2014-04-14 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置 |
CN104468417A (zh) * | 2014-12-16 | 2015-03-25 | 上海斐讯数据通信技术有限公司 | 一种堆叠交换机报文传输方法、***及堆叠交换机 |
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 |
CN107145399A (zh) * | 2017-04-22 | 2017-09-08 | 华为技术有限公司 | 一种共享内存管理方法及共享内存管理设备 |
CN107145399B (zh) * | 2017-04-22 | 2021-03-02 | 华为技术有限公司 | 一种共享内存管理方法及共享内存管理设备 |
WO2021224739A1 (en) * | 2020-05-06 | 2021-11-11 | International Business Machines Corporation | Utilizing coherently attached interfaces in a network stack framework |
GB2610750A (en) * | 2020-05-06 | 2023-03-15 | Ibm | Utilizing coherently attached interfaces in a network stack framework |
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 | 维沃移动通信有限公司 | 资源获取方法、装置及电子设备 |
CN117196929A (zh) * | 2023-09-25 | 2023-12-08 | 沐曦集成电路(上海)有限公司 | 基于定长数据包的软硬件交互*** |
CN117196929B (zh) * | 2023-09-25 | 2024-03-08 | 沐曦集成电路(上海)有限公司 | 基于定长数据包的软硬件交互*** |
Also Published As
Publication number | Publication date |
---|---|
CN102006241B (zh) | 2013-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102006241B (zh) | 一种多个应用共享一个缓冲区的报文接收方法 | |
JP6307461B2 (ja) | 複製された書き込み要求を伴うコヒーレントメモリコピーのための方法及び装置 | |
JP5638069B2 (ja) | メモリデバイスによりホストメモリアクセスを制御するための方法およびシステム | |
KR20150091663A (ko) | 멀티 채널 메모리를 포함하는 시스템 및 그 동작 방법 | |
CN1961300A (zh) | 使用集成dma引擎进行高性能易失性磁盘驱动器存储器访问的装置和方法 | |
CN104903868A (zh) | 使用虚拟到物理映射以与数据存储装置进行直接用户空间通信 | |
US10831693B1 (en) | Multicast master | |
CN104205050A (zh) | 访问远程机器上的设备 | |
US11138106B1 (en) | Target port with distributed transactions | |
KR20170013270A (ko) | 플래시 메모리 기반 저장 디바이스의 입력/출력 가상화 (iov) 호스트 제어기 (hc) (iov-hc) | |
CN102055671B (zh) | 一种多应用发包的优先级管理方法 | |
CN105190577A (zh) | 合并存储器访问请求 | |
WO2017210015A1 (en) | Improving throughput in openfabrics environments | |
US20100153678A1 (en) | Memory management apparatus and method | |
CN102098215A (zh) | 一种多应用收包的优先级管理方法 | |
US20150195236A1 (en) | Techniques for implementing a secure mailbox in resource-constrained embedded systems | |
CN111858152A (zh) | 用于在备份操作期间对关键数据对象存储进行优先级排序的方法和*** | |
CN105868121A (zh) | 一种信息处理方法及电子设备 | |
CN104539450A (zh) | 网站运营活动处理***、方法和装置 | |
JP2008523485A5 (zh) | ||
US9594707B2 (en) | Data input/output (I/O) handling for computer network communications links | |
US11119787B1 (en) | Non-intrusive hardware profiling | |
CN102098214A (zh) | 一种采用轮询机制的高速报文接收方法 | |
WO2006061316A2 (en) | Transferring data between system and storage in a shared buffer | |
CN116745754A (zh) | 一种访问远端资源的***及方法 |
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. |