第 5 期
黄宗和等: 基于 DMA 实现高速数据包收发
基 于 DM A 实 现 高 速 数 据 包 收 发 *
( 1. 湖 南大 学 软件 学院 , 湖南 长 沙 410082; 2. 中 国科 学院 计 算技 术研 究所, 北京 100080)
黄宗 和1 , 谢高岗 2, 张大方 1
·912·
摘 要: 网 络测 试是 了解 网络 流量 , 分 析业 务性 能的重 要手 段。 如何 实现 高速 链路流 量捕 获 分析 是 目 前人 们 非
常关 注的 问题 。在网 络处 理器 上设 计了 一种 BIOS 下 基于 DMA 技 术的 接 收、发 送 以 太数 据 帧 的 方 法, 以 提 高 处
理器 数据包 处理 能力 。该 方法 已经 在 BCM1250 处 理器 上实 现, 测试 实验 表明 , 该 方 法数 据 包 处理 能 力 较之 嵌 入
式 Linux 环境 下提 高了 两倍 。
关键 词: 直 接内 存访 问( DMA) ; 网络处 理器 ; 数 据包 捕获 ; 数据 包发 送
中图 法分 类号 : TP311. 11; TP393
文章 编号 : 1001- 3695( 2006) 05- 0219- 03
文献 标识码 : A
Packet Capture and Generating at High Speed with DMA
HUANG Zong-he1 , XIE Gao-gang2, ZHANG Da-fang1
( 1. School of Software, Hunan University, Changsha Hunan 410082, China; 2. Institute of Computing Technology, Chinese Academy of
Sciences, Beijing 100080, China)
Abstract: Network test and measurement is one of most important methods to find out characteristic of traffic and understand
application performance. It is key issue to perform network measurement for high speed link. An Ethernet frame capture and
generating method has been proposed in BIOS with Direct Memory Access ( DMA) for network processor. This method has been
implemented on network processor of BCM 1250. It has been showed from experiment the performance of packet capture and
generation with this method on BCM 1250 has been improved double over on embedded linux.
Key words: Direct Memory Access ( DMA) ; Network Processor; Packet Capture; Packet Generation
1 引言
2 方法原理
网络测试是了解网络流 量, 分 析业务 性能的 重要手 段, 如
何实现高速链路 流 量捕 获分 析 是目 前人 们 非常 关注 的 问题。
数据包捕获与产生是网络 测试的 基本过 程。数据包 捕获一 般
有三种办法: ①基于专用硬件的采集方 法, 如 HP/ Agilent Advi-
sor, InMon sFlow Probe 等。这些专用 硬件 可编 程性 差, 难以 满
足用户的多种需求。②基于 PC 架构, 通过网 络接口 卡捕获 的
方法, 如 Ethereal, EtherPeek 等 工 具。该方 法 从链 路上 捕 获 数
据包, 再从网卡拷贝到操 作系统 内核空 间或者 用户空 间, 拷 贝
过程需要大量占用 CPU 资源, 基 于该方 法的 工具 在千 兆以 太
网或者更高的高速链路, 对流量进行精确测量是不可能的。③
基于网 络 处 理 器 的 数 据 包 捕 获 方 法。 网 络 处 理 器 ( Network
Processor, NP) [ 4] 是 专 门为 处 理 数 据 包 而 设 计 的 可 编 程 处 理
器, 其专门针对数据包处 理的部 件进行 了优化, 因此 数据包 处
理性 能得到 大幅度 的提升。在 通用 NP OS 如 Vxwork、嵌入 式
Linux 等环境, 由于操作系统的额外开销, 使得网络处理器的性
能没能得到极致的发挥。
本文在网络处理器上设计了 一种 BIOS 下基于 DMA 技 术
的接收、发送以太数据帧 的方法, 以提 高处理 器数据 包处理 能
力。该方法已经在 BCM1250 处理器上实现, 测试 实验表明, 该
方法数据包处理能力较之嵌入式 Linux 环境下提高了两倍。
收稿日期: 2005- 04- 07; 修返日期: 2005- 05- 19
基金项目: 国家自然科学基金资助项目( 60403031, 60273070)
DMA 技术允许来自以太网 MACs 的以 太帧直接 传输到 内
存, 而不需要处理器的 干涉。同时, 内存 中的数 据发送 到以 太
网 MACs 也不需 处理 器 处 理。因 此, 如 果我 们 能 够直 接 操 作
DMA, 就能够大 大提 高网 络 处理 器的 数 据包 处 理能 力。本 文
正 是基于 这种 思想, 设 计了 基于 DMA 方式 的数 据包 接收 / 发
送方法。DMA 方式的数据包捕获、发送的思路如图 1 所示。
传统方法
用户数据
基于 阅酝粤技术的方法
阅酝粤
用户空间
内核空间
网卡驱动
陨辕韵设备
图 员 阅酝粤方式实现包捕获辕发送
图 1 左侧是传统处理数据包的方式, 由于网卡驱动程序 运
行在内核空间, 当网卡收到 数据包 以后, 数据 包会存 放在内 核
空间内, 由于上层应用运行 在用户 空间, 无法 直接访 问内核 空
间, 因此要通过系统调用将网卡中的数据包拷贝到用户程序空
间。图 1 右侧是改 进 后的 数据 包 处理 方 式, 通过 重写 网 卡 驱
动, 使用 DMA 技术, 使得 网 卡驱 动 与上 层系 统 共享 一块 内 存
区域, 网卡从网络上捕获到的数 据包直 接 DMA 至网 络监测 系
统, 这个过 程避免 了数据 的内存 拷贝, 不需 要占用 CPU 资源,
最大程度地将 CPU 资源让给协议分析和模式匹 配等进程去 利
·022·
计算机应用研究
2006 年
用, 提高了整体性能。零拷贝解决“抓包”的瓶 颈问题, 提高 网
络处 理器的数据 包处理能力。上 层信息的发 送过程如图 2 所
示。
酝藻泽泽葬早藻
酝藻泽泽葬早藻
S藻早皂藻灶贼葬贼蚤燥灶辕
A泽泽藻皂遭造藻U灶蚤贼
Transmit FIFO
栽则葬灶泽皂蚤贼阅酝粤
悦澡葬灶灶藻造郧酝陨陨
I灶贼藻则枣葬糟藻
图 圆 信息打包辕发送
指向两块内存缓冲区。Offset 仅 仅作用 于 Buffer A, 如 果 Offset
_b 位被设置, Offset 则应用于 Buffer B。描述符有三 个控制位,
INT 位被设置, 则 DMA 管道在描述符处理完之后会 触发中断。
第 2 个控制位指示缓冲区 B 是 否有效。第 3 个控制 位则允 许
控制域是应用于 B 缓冲区或者是 A 缓冲区。描 述符组织结 构
有两种, 即环式结构和链式结构。环式结构如图 5 所示。
从网络处理器发送至以 太网 MACs 的信 息首 先被 拆分 成
一个个小于 MTU 的小包, 同时每个包都有一个流水线号, 以便
标志其在拆 分前 信 息体 中的 位 置。 用于 接 收方 信息 的 重组。
阅杂悦砸援粤
阅杂悦砸援月
S贼葬贼怎泽 韵云云遭
孕葬糟噪藻贼蕴藻灶早贼澡
灾粤蕴陨凿
陨晕栽
杂蚤扎藻月怎枣枣藻则粤 杂贼葬则贼A凿凿则藻泽泽
月怎枣枣藻则粤
杂贼葬则贼A凿凿则藻泽泽
月怎枣枣藻则月
杂蚤扎藻月怎枣枣藻则月
韵枣枣泽藻贼
O责贼蚤燥灶泽
图 源 阅酝粤描述符
阅藻泽糟则蚤责贼燥则园
阅藻泽糟则蚤责贼燥则员
杂蚤扎藻粤
月怎枣枣藻则粤
杂蚤扎藻月
月怎枣枣藻则月
韵憎灶藻则遭赠阅MA E灶早蚤灶藻
阅藻泽糟则蚤责贼燥则R蚤灶早赃泽蚤扎藻鄄员
图 缘 描述符环结构
每个小包经过信息分 割 / 组包 单元之 后, 被 组装成 以太 帧。该
帧被直接 DMA 发送至 FIFO, 然 后经 由 GMII 接口 发送 到物 理
层。
信息的接收过程与发送过程相反( 图 3) , 首先接收到 的以
太帧被保存到接收 FIFO, 然 后由 DMA 控制器 取得 帧的 内容,
经过拆包 / 解码单元, 重组接收到数据包。
酝藻泽泽葬早藻 哉灶责葬糟噪藻贼 Receive 阅酝粤
砸藻糟藻蚤增藻云陨云韵
悦澡葬灶灶藻造郧酝陨陨I灶贼藻则枣葬糟藻
图 猿 信息接收辕还原
3 方法详细设计
为了进一步详细说 明该 方法, 我 们描 述在 BCM1250 上 如
何实 现 它。 BCM1250 处 理 器 是 一 种 通 用 的 网 络 处 理 器 芯
片 [ 2] 。片上集成 了三 个 以太 网 MACs。每 个 以 太网 MACs 有
四个 DMA 管道, 其中 的 两个 用于 发 送以 太 帧, 另外 两个 用 于
接收以 太 帧。 当 发 送 数 据 包 流 时, 存 储 在 内 存 中 的 数 据 被
DMA 发送至 FIFO。DMA 控制器预取 32 字节的 Cache 块来维
持 FIFO 始终是装有数据包。数据解包器 从 FIFO 中抽 取出 64
位双字数据, 并把它们作为一个字节流转发到协议引擎。这时
可以选择以太网 MAC 引 擎或数 据包 FIFO 协议 旁路。以太 网
MAC 协议引擎根据以太网规范格式化数据包, 执行 MAC 协议
来访问发送媒介, 并通 过 GMII 引脚 把数 据 包发 送至 物 理层。
数据包流的接收开始于来 自物理 层设备 的字节 流。字节或 者
被发送至以太 网协 议 引擎 或 者数 据包 FIFO 协 议引 擎。协 议
引擎将会检查数据包的有效与否, 剥去 MAC 层外的头部, 把数
据转发至组包单元。所有被接收的字节都被组包成 64 位 的双
字, 被插入到接收 FIFO。这类似 于发送 FIFO, 接 收 FIFO 的 缓
冲功 能用 于掩 饰 DMA 延 迟。接收 DMA 引擎 将从 接 收 FIFO
中抽取 32 字节的 Cache 块, 然后传递到内存。
3. 1 DMA 系统
DMA 系统由两个基本组成元素, 即数据缓冲 区和描述符。
数据缓冲区是一定大小的物理地址空间; 描述符为含有该内存
缓冲区参数的并指向该缓 冲区的 指针。数据 之间的 传输由 三
种类型的 DMA 控制器来完成, 分别为: 接收 DMA 控 制器和 发
送 DMA 控制器和 数 据搬 运 DMA 控制 器。接 收 DMA 控 制 器
负责把以太网口进来的数据传输 到数据 缓冲区, 发送 DMA 控
制器负责把数据缓冲区中的内容发送到以太网接口, 而数据搬
运 DMA 控 制 器 则负 责 在 任意 两 块 数据 缓 冲 区之 间 的 传输。
描述符的结构示意图如图 4 所示。
DMA 描述符对每个数据缓冲区都包 含有这些参 数。 一个
描述符由两个 64 位的 双字 dscr_a 和 dscr_b 组 成。它们 分 别
砸蚤灶早B葬泽藻
C怎则则藻灶贼
Co怎灶贼
砸蚤灶早S蚤扎藻
描述符环中可容纳的描述 符数目 在环被 建立起 来时就 被
配置好了, DMA 引擎通 过检查 环的 长度 来检 测是 否到 达最 后
一个描述符( 内 存中, 最 后的描 述符 位于 内存 的最 高端 ) 。 环
大小 一般可 在 1 ~65 536 之 间。软件可 以通过 增加控 制器 中
用于记载所拥有的描述符的编 号的计 数器来 传递描 述符的 所
有权。这样 DMA 控 制器 就可 以 跟踪 当前 描 述符 的 位置。 当
DMA 控制器访问完了一个 描述 符, 其通 过减 少描 述符 计数 器
的值就可以注销对描述符 的拥有 权。 如果描 述符的 中断位 被
设置, 则描述符 处理 完 之后 就 触发 中断。对 DMA 的 操作, 只
要体现在对描述符环的操作上。在一个接收管道, 当一个数据
包被发送到 DMA 引擎时, 接口 会在数 据包的 开始处 作一个 标
记, 这样就可以识别数据包的头部。在发送管道, DMA 引擎 则
通过数据包的长度域来识 别下一 个数据 包。 虽然一 个描述 符
与两块内存块相关联, 但是 DMA 引擎 对描述 符的两 部分是 有
区别对待的。在 DSCR. A 中包含了一些参数的配置信息, 网口
将根据这些参数来处理 该数据 包。并且, 在数据 包被接 收后,
数据包的长度等信息只能记载在数据包的第一个描述符, 同时
SOP 位被设置。接收引擎都可 以通过 软设置 来清 除描 述符 的
状态字。通过使用 SOP 标 志位, 接 收引 擎可 以 识别 该描 述 符
是数据包的开始。SOP 位仅当 一个数 据包的 所有 内容 均被 接
收后才被设置为有效。当发送数据包时, 仅有的变化就是数据
包描述符的 SOP 位被 清除。这 样, 发送 引擎 就 可以 通过 该 标
志位判断数据包是否被发送 完毕。对于 DMA 引 擎来说, 当 描
述符与数据包 相连 时, SOP 位必 须 被设 置。如 果 SOP 位 被 设
置, 则发送描述符的选项域就必须是非 0; 如果 SOP 位被清除,
则描述符的选项 域 也必 须为 0。当 一个 管道 被 Disabled 之 后
又 Enabled, 它将又从基地址指向的描述符开始。同时, CPU 必
须清零计数器或者是重排描述符环, 以使得有效的描述符位于
环的开始处。
3. 2 发送操作
发送之前需要作一些发送引用时钟配置, 对于 1Gbps 的操
作, 其发送时钟为 125MHz, BCM1250 的 REFCK01 引 脚是用 于
输入引用时钟至以太网口 E0 和 E1。时钟源可在 mac_cfe 寄存
器上设置。发送 FIFO 宽 64 位, 能容纳 128 个实体。其配置 参
数主要有三个, 分别是: tx_rd_thrsh, tx_rl_thrsh, tx_wr_thrsh。tx
第 5 期
黄宗和等: 基于 DMA 实现高速数据包收发
·122·
_wr_thrsh 是 mac _thrsh_ cfg 寄 存 器 中 的 一个 域, 用 于 设 置 当
FIFO 中至少有多少的 空闲 实体 数时, 才 请求 填充 数据。数 据
是由 协 议 引擎 负 责 从发 送 FIFO 中 读 取 出来, 并 发送 至 物 理
层。一旦发送操作开始, DMA 引擎必须确保, 当协议引擎 需要
数据时, FIFO 中总有数据可供发送。无论在什么 时候, 如 果在
数据包结束之前, FIFO 是 空的, 将引 起下 溢错 误, 并导 致发 送
失败。为了降低在发送期 间 FIFO 发生 无数据 的情况, 可以 通
过设置 tx_rd_thrsh 阈值来保证在传输开始时, 已经有一定数量
的数据已经写入 FIFO 中。一旦 发送开 始, 发 送的数 据会一 直
保留, 直到 tx_rl_thrsh 个实 体被 发送 完毕。在 此期 间, 如果 检
测到任何的错误, 数据包将会被自动重发。这项功能可以通过
设定 mac_cfg 寄存器的 tx_hold_sop_en 位来启动。我们知 道每
个 MAC 都有两个发送 DMA 管道 与之相 关联。如果 只有一 个
DMA 管道被启动或者是 只有 一个管 道有 可用 的描 述符, 那 么
该管道将被选 择用 于 发送 数据。 如果 两个 DMA 管 道都 被 启
动, 并且都有可用的数据包, 将通过 mac_txd_ctl 寄存器中 设定
的权值来选择那个管道用 于发送。一 般所发 送的数 据包数 目
由权值决定。如果一个管道空闲, 另一管道立即开始。如果每
个 DMA 管道里面的数据包长度 相同, 它们将 按照权 值来共 享
发送带宽。发送操作与发送 的数据 包的封 装格式 [ 4] 分别为 图
6、图 7 所示。
当数据从 杂韵孕开始装载至此点袁或者接收到分组结束时袁将请求 阅酝粤袁
如果在此之前发生错误袁接收到的分组将被丢弃
远源 E灶贼则蚤藻泽
阅酝粤
远源 位宽
悦澡葬灶灶藻造
r曾赃则凿赃贼澡则泽澡
r曾_则造贼澡则泽澡
当数据在接收 M蚤凿鄄责葬糟噪藻贼到达此处袁
或者接收到帧结束时袁将会请求 阅酝粤
图 愿 接收操作
由图 8 可知, 接收器将会推迟告知 DMA 引擎, 直到其成功
接收到一定字节的数据包。通过 设置 mac_thrsh_cfg 寄存器 中
的 rx_rl_thrsh 域, 可 以 设 置在 通 知 DMA 引 擎之 前, 必 须 写 入
FIFO 的实体数。如果接收 到含 义结 束标 志的 数据 包, 无论 什
么时候都会告 知 DMA 引 擎。如 果 在此 点之 前 发生 任何 传 输
错误, FIFO 将被清空, 数据包自动被丢弃。当一 个数据包被 地
址过滤器接收之后, 将会选择一条 DMA 管道。DMA 管道的 选
择是通过最先接收的 128 个字节里面的其中 8 位来完成( 如果
所设定的 rx_rl_thrsh 值小于 128, 那么该 8 位必须在 rx_rl_thrsh
范围之内) 。在取得 8 位数 据之 后, 再根 据 mac _chup 和 mac_
chlo 寄存器所构成的表 来查找 2 位。数 据包 的偏 移值 可以 由
mac_cfg 寄存器所指 定( 以 nibbles 为 偏移单 位) 。当此 2 位 值
等于 0 时, 数据包将由 DMA 管道 0 来 接收, 否则由 DMA 管 道
1 来接收。
分组起始渊杂韵孕冤
员圆愿 个实体
在 杂韵孕与此实体之间发生传输错误时袁
接口能够自动重发已发送的数据
阅酝粤
4 实验结果分析
远源 位宽
T曾赃则凿赃贼澡则泽澡
T曾赃则l赃贼澡则泽澡
悦澡葬灶灶藻造
当 云陨云韵填充至此点时袁
杂韵孕将被发送
图 远 发送操作
T曾赃wr赃贼澡则泽h
如果 云陨云韵有大于此长度的
空闲空间袁将请求数据
孕则藻增蚤燥怎泽云则葬皂藻 陨云郧
陨枣早_贼曾
孕则藻葬皂遭造藻杂云阅阅藻泽贼蚤灶葬贼蚤燥灶
苑
粤凿凿则藻泽泽 杂燥怎则糟藻葬凿凿则藻泽泽
远
栽赠责藻蕴藻灶早贼澡
圆
酝蚤灶 孕葬c噪藻贼杂蚤扎藻
远
酝葬曾孕葬糟噪藻贼杂蚤扎藻
员
图 苑 分组的封装格式
陨枣早赃贼澡则泽澡
阅葬贼葬悦砸悦陨云郧
源远~员缘园园 源
3. 3 接收操作
协议引擎将会处理所有来自物理层的数据包, 负责把物理
层的封装剥去, 然后传送到接收 FIFO。接收 DMA 引擎则 把数
据从 FIFO 传输到内存中的 数据包 缓冲池 中。 在接收 过程中,
数据包将被校验是否发生 了传输 错误。在接 收数据 包早期 监
测到错误, 数据包将被丢弃, 而不 会启动 DMA 操作; 如果数 据
包在 DMA 被启动之后检 查到 错误, DMA 操作 将不 会被 中止,
而是一直完成为止。为了标记该数据包有错, 接口将在描述符
的状态位上设 定错 误 标志。 通过 保留 接 收 FIFO 中 初始 的 一
些实体而不告知 DMA 逻辑有数 据可取, 直到 填充的 数据到 达
所设定的阈值。如果在到达阈值之前, 发生错 误, FIFO 指 针可
以恢复 到 指 向 包 起始 的 实 体。同 时 该 数 据 包 被 丢 弃。 接 收
FIFO 宽 64 位, 可最多 容纳 64 个 实体。 当 FIFO 含有 数 据时,
发送信号给 DMA 引擎请求 DMA 清空 FIFO。mac_thrsh_cfg 寄
存器中的 rx_rd_thrsh 域 用于 设置 DMA 中的 有 效实 体个 数 阈
值( 当实体个数大于该值时, 将请 求清空 FIFO) 。DMA 引 擎一
般每次传输 32 字 节大 小的 数据 块, 因此 该域 通常 设为 4。接
收操作如图 8 所示。
根据上述的原理, 我们 在基于 BCM1250 的 Motorola PCRB
网络处理器硬件平台( 采用双 BCM1250, 单核主 频为 750MHz,
内存为 1GB) 和 BroadCom 的 CFE( Common Firmware Environ-
ment) 软件平台上实现了该方法。
为了检验该方 法以 太 数据 包处 理 能力, 进 行 性能 测 试 实
验。
Smartbits2000 与 PCRB 通过 GE 链路直接相连, PCRB 对捕
获的 数据 包进 行了 MAC- > IP- > TCP/UDP- > Application 的 逐
层解码, 然后把数据包转发出去。
在处理捕获的数据 包之 前, 记下当 前 的时 间 戳 t1 到 一 个
临时变量, 然后当处理完该数据包之后, 记下当时的时 间戳 t2。
则数据包总的处理时间为 t2 - t1。数据包处理的吞吐量为
C =
1
△t
=
1
t2 - t1
为了测单个数据包的处理 性能, 我们 在 100% 带 宽利用 率
下对不同大小的数据包进行测试, 测试的结果如表 1 所示。
表 1 不 同大 小数据 包处理 时间
带 宽
包 大 小
带 宽
包 大 小
( B)
64
128
256
384
512
640
768
利 用 率
100 %
100 %
100 %
100 %
100 %
100 %
100 %
包 处 理
时 间 ( t)
0. 871
0. 867
0. 872
0. 871
0. 872
0. 873
0. 871
( B)
894
1 024
1 152
1 280
1 408
1 500
利 用 率
100 %
100 %
100 %
100 %
100 %
100 %
包 处 理
时 间 ( t)
0. 868
0. 867
0. 872
0. 873
0. 868
0. 874
如表 1 所示, 在不同字节大小情况下数据包处理时间基 本
上是相等的( 因为 对进 来的 数据 包的 处理流 程基 本相 同) , 数
据包处理时间平均值为 0. 87μs, 吞吐 量为 1 149 425pps。较 之
在 Linux 环境下的 382 321pps 提高了两倍的速率。
( 下转 第 227 页 )
第 5 期
柳 斌等: 基于 Linux 系统的高速网络捕包技术研究
·722·
数据, 如果有数据, 就根据这个指针取得内存中的数据包, 如果
没有数据, 就会将自己阻 塞, 直 到有数 据包到 达才被 唤醒读 取
数据, 这样网络上若有大 量的数 据包到 达, 内 核就可 以不断 向
环形缓冲区中写数据, Libpcap 同 时不断 地从 环形 缓冲 区中 读
取数据, 数据包的读 写 并行 工作 减 少了 系统 调 用和 数据 包 拷
贝。
3 试验分析
和 数 据 拷 贝 是 Lioux 中 Libpcap 捕 包 的 主 要 性 能 瓶 颈 , 对 此
给 出了 NAPI 与 MMAP 相结 合 的 捕 包方 案 。 NAPI 是 一 种 中
断 与轮 询相 结 合 的 技 术 , 在 网 络 重 负 载 时 能 有 效 地 降 低 了
中 断数 量, 避 免系 统进 入中断 活锁 状态 。MMAP 可 以将 内 核
空 间映 射至 用户 进程 空间 , 减 少 数 据 包的 拷 贝 和 系 统 调 用。
实 验结 果表 明 该 方 案 有 效 改 善 短 长 度 数 据 包 接 收 的 效 率,
减 少中 断触 发 的 时 间 , 提 高 了 网 络 重 负 载 下 数 据 包 的 捕 获
率 。
对改进 方 案 进 行 测 试。 测 试 环 境 如 第 1 节 所 述。 采 用
Linux 2. 6. 0 内 核, 100MB 网 卡 为 Realtek 8139。 修改 8139 网
卡 驱 动 程 序, 添 加 POLL 方 法 支 持 NAPI。 使 用 Libpcap
1. 020040706 版本, 该版本是 Libpcap 的 一个特殊版 本 [ 2] , 支 持
MMAP 内存映射。捕获率的测试结果如表 3 所示。
参考文献:
[ 1]
H Salim, R Olsson, A Kuznetsov. Beyond Softnet[ J] . Proc. Linux
2 . 5 Kernel Developers Summit, San Jose, CA, USA, 2001.
[ 2] 田志宏 , 方滨兴 , 云 晓春 . RTLinux 下基于 半轮询 驱 动的 用 户级 报
文传 输机 制[ J] . 软 件学 报, 2004, 15 ( 6) : 834- 839.
表 3 改 进后 Libpcap 捕获 率
[ 3] Libpcap[ EB / OL] . http: / / public. lanl. gov / cpw/ , 2005- 04- 20.
背 景 流 量
[ 4] Mogul C J, Ramakrishnan K K. Eliminating Receive Live-lock in an
Interrupt-driven Kernel [ J ]
. ACM Transactions on Computer Sys-
tems, 1997, 15( 3) : 217- 252 .
[ 5]
[ 6]
http: / / luca. ntop. org / ring. pdf, 2005- 04 - 20[ EB/ OL] .
http: / / www.
linuxhq. com/ kernel / file/ Documentation/ networking/
NAPI_HOWTO. txt, 2005- 04- 20[ EB / OL] .
[ 7]
http: / / oprofile. Source-forge. net/ , 2005- 04 - 20[ EB/ OL] .
作者简介:
柳 斌( 1971- ) , 男 , 湖 北 武 汉人 , 讲 师 , 博 士 研 究 生, 主要 研 究 方 向 为 网
络 安全 、网 络多 媒 体; 李之 棠 ( 1952- ) , 男, 湖 北 人, 教授 , 博 士 生 导师 ,
主 要研究 方向 为计算 机网 络、网络 安 全、计算 机 系 统 结构 和 并 行 处理 ;
背 景 数 据 包 帧 长
0 Mbps
25Mbps
50Mbps
75Mbps
100Mbps
1512 B
512 B
80B
100%
100%
100%
100%
100%
90 %
100%
100%
81 %
97 %
81 %
72 %
94 %
67 %
21 %
对比 表 1、表 3, 可 以看出 采用 NAPI 和 MMAP 后, 在小 包
的环境下, 由于网卡中断数量减少, 捕包率有较大提高, 特别是
在背景数 据 帧长 为 80B 情况 下, 改 善 明 显。在 100Mbps, 80B
背景流量条件下, 系 统不再 出现瘫 痪现象。实 验表明: 改进 方
案适用于对高速率的短长度数据包的处理。
4 结束语
网络 捕包 是网 苗分 析工 具的 基础 。中断 处理 、系统 调用
黎 耀( 1977- ) , 男 , 湖 北人 , 讲 师, 主要 研究方 向为网 络安 全。
( 上 接第 221 页)
网络 处理 器的 另一 个 指 标 是 丢 包 率。 采 用 上 面 的 测 试
数据, 同时 在 10% ~100% 不 同带 宽 下 进 行 试 验, 发 现 对 于
64B 的数 据包 , 当带 宽利 用率 为 70% 时 , 出 现 丢 包 现 象。 也
就是当 发送 速率 为 大 于 1 000 000pps 时 发 生 丢 包。 图 9 是
64B 数据 包在 不同 带宽 利 用 率 下 发 送和 捕 获 到 的 数 据 包 比
较图。
丢包主要是底层硬件( 网卡) 的处 理能力引 起的。实际 网
络带宽一般为设计 的 30% ~40% , 因此 我们 的 解决 方案 是 足
以应付的。
员远 园园园 园园园
员源 园园园 园园园
员圆 园园园 园园园
员园 园园园 园园园
愿 园园园 园园园
远 园园园 园园园
源 园园园 园园园
圆 园园园 园园园
园
5 结论
产生数据
捕获数据
图 怨 远源月产生数据帧和捕获数据帧
收、发 送以 太数 据帧的 方法, 以 提高 处理 器数 据包 处理 能力。
该方法已经在 BCM1250 处理器上实现, 测试实验表 明, 该方 法
数据包处理能力较之嵌入式 Linux 环境 下提高了 两倍。此外,
该方法对于高速业务链路监测 的流的 存储提 供一种 很好的 解
决方案。
参考文献:
[ 1]
vangelos P Markatos, et al. User-level DMA without Operating Sys-
tem Kernel Modification[ C] . Proceedings of the 3rd IEEE Symposium
of High-Performance Computer Architecture, Tx USA, NW Washington
DC USA, IEEE Computer Society, 1997. 322.
[ 2]
Increasing Perform in Network Storage w / Multi-Processors & High-
Speed I/ O [ EB / OL] . http: / / zh-tw. broadcom. com/ collateral / wp /
1250-WP100-R. pdf, 2002.
[ 3] W Richard Stenens. TCP / IP Illustrated ( volume1 ) . The Protocols
[ M] . Addison Wesley, 1994. 15-17.
[ 4] N Shah. Understanding Network Processors, Master’s Thesis [ R ] .
Dept. of Electrical Engineering and Computer Sciences, University of
California, Berkeley, 2001.
作者简介:
网络测试是了解网络流 量, 分 析业务 性能的 重要手 段, 如
何实现高速链路 流 量捕 获分 析 是目 前人 们 非常 关注 的 问题。
本文在网络处理器上设计了一种 BIOS 下基 于 DMA 技术的 接
黄 宗和 ( 1979 - ) , 男, 广东 茂名人 , 研 究生 , 主 要研 究 方向 为 高 速 业务 流
监 测、测量 与监控 ; 谢 高岗 , 男 , 浙 江衢 州人, 副研 究员 , 主 要研究 方向 为
高 速网 络 技 术 、网 络 测 试 测 量 与 监 控、QoS 等; 张 大 方, 男 , 上 海 人 , 教
授 , 主要研 究方向 为可 信系统 与网 络、网络测 试测 量与监 控。