CN102006241B - 一种多个应用共享一个缓冲区的报文接收方法 - Google Patents

一种多个应用共享一个缓冲区的报文接收方法 Download PDF

Info

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
Application number
CN2010105977594A
Other languages
English (en)
Other versions
CN102006241A (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.)
Dawning Network Technology Co ltd
Original Assignee
Dawning Information Industry 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 Dawning Information Industry Co Ltd filed Critical Dawning Information Industry Co Ltd
Priority to CN2010105977594A priority Critical patent/CN102006241B/zh
Publication of CN102006241A publication Critical patent/CN102006241A/zh
Application granted granted Critical
Publication of CN102006241B publication Critical patent/CN102006241B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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空间寄存器,判断硬件写指针是否等于软件的读指针,如果不相等,则说明读指针和写指针之间是新的报文,则读取出来,并移动读指针;如果读指针追上了写指针,则说明缓冲区内报文已经全部读出,则等待一个时间片后,进行下一次轮询。
CN2010105977594A 2010-12-17 2010-12-17 一种多个应用共享一个缓冲区的报文接收方法 Active CN102006241B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 曙光信息产业(北京)有限公司 一种支持多类型网卡链路聚合的零拷贝方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
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.