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

技术编号:5450142 阅读:279 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种多个应用共享一个缓冲区的报文接收方法。硬件网卡的PCI控制器向主机注册PCI空间,驱动软件申请一个报文缓冲区,对缓冲区设置一个写指针和多个读指针寄存器,每个应用单独使用一个,硬件接收报文后移动写指针,接口库映射报文缓冲区和PCI空间寄存器,应用软件调用接口库时确定自己的读指针,之后通过移动自己的读指针接收报文。本发明专利技术使多个应用可以利用一个共享缓冲区从网络接收报文,从而避免多应用收包时的报文拷贝或二次分发开销。

【技术实现步骤摘要】

本专利技术涉及网络数据处理领域,具体涉及一种多个应用共享一个缓冲区的报文接 收方法。
技术介绍
在网络数据分析系统中,往往在一个硬件平台上运行多个应用,也就是说对设备 接收到的同一个网络报文中的数据,需要多个应用软件进行接收和处理。目前常用的一种方案是采取数据拷贝的方法,把每一个网络报文数据复制两份, 分别交给两个应用,每个应用处理自己的数据拷贝;另一种方案是采用二次分发的方法,每 个应用建立自己的报文指针队列,设备每收到一个报文,就把报文的指针分发到每个应用 的接收队列中。但是在高速网络上,采取数据拷贝的方法会带来大量的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空间寄存器,判断 硬件写指针是否等于软件的读指针,如果不相等,则说明读指针和写指针之间是新的报文, 则读取出来,并移动读指针;如果读指针追上了写指针,则说明缓冲区内报文已经全部读 出,则等待一个时间片后,进行下一次轮询。本文档来自技高网...

【技术保护点】
一种多个应用共享一个缓冲区的报文接收方法,其特征在于:包括硬件网卡、驱动软件、接口库软件,方法如下:  A、硬件网卡的PCI控制器向主机注册PCI空间,定义接收报文相关的寄存器地址;PCI空间寄存器有:报文缓冲区地址、长度、软件从缓冲区读报文的读指针、硬件向缓冲区写报文的写指针,其中读指针有多个,每个应用有自己的读指针;  B、驱动软件申请连续的物理内存,作为接收报文的缓冲区,并把缓冲区的物理地址和长度写入PCI空间的对应寄存器,并设置硬件的写指针和所有应用软件的读指针为初始值0;  C、硬件网卡每次从网络接收到一个报文后,把报文传输到软件的报文缓冲区中,并根据报文长度,修改PCI空间的写指针;  D、接口库中的API接口被一个应用调用时,首先把内核空间的缓冲区和硬件的PCI空间映射到该应用的用户空间,然后根据该应用是第几个应用,把PCI空间的第几个软件读指针寄存器作为该应用的读指针寄存器使用;  E、应用软件循环收包,每次收包都要查看接口库中映射出的PCI空间寄存器,判断硬件写指针是否等于软件的读指针,如果不相等,则说明读指针和写指针之间是新的报文,则读取出来,并移动读指针;如果读指针追上了写指针,则说明缓冲区内报文已经全部读出,则等待一个时间片后,进行下一次轮询。...

【技术特征摘要】
1. 一种多个应用共享一个缓冲区的报文接收方法,其特征在于包括硬件网卡、驱动 软件、接口库软件,方法如下A、硬件网卡的PCI控制器向主机注册PCI空间,定义接收报文相关的寄存器地址;PCI 空间寄存器有报文缓冲区地址、长度、软件从缓冲区读报文的读指针、硬件向缓冲区写报 文的写指针,其中读指针有多个,每个应用有自己的读指针;B、驱动软件申请连续的物理内存,作为接收报文的缓冲区,并把缓冲区的物理地址和 长度写入PCI空间的对应寄存器,并设置硬件的写指针和所有应用软件的读指针为初始值 0 ;C、硬件网卡每次从网络接收到一个报文后,把报文传输到软...

【专利技术属性】
技术研发人员:刘朝辉刘兴奎窦晓光李锋伟刘灿
申请(专利权)人:天津曙光计算机产业有限公司
类型:发明
国别省市:12[中国|天津]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1