免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7525 | 回复: 3
打印 上一主题 下一主题

[网络管理] libpcap捕包效率极低!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-07 17:24 |显示全部楼层 |倒序浏览
测试环境:
================================
libpcap: 0.9.4
CPU: Celeron 2.0GHz
Mem: 256DDR
NIC: Intel 8139, 10/100M
================================
应用程序只是对libpcap传上来的包作简单计数。
测试结果如下:
包长为64字节,包数为5000,000个时,libpcap收包性能(不丢包)为:6Mbps. 
增加包长,效果要好些。
真是令人大跌眼镜! 不知道有没有作过类似测试的兄弟?

论坛徽章:
0
2 [报告]
发表于 2006-04-10 11:12 |显示全部楼层

回复 2楼 独孤九贱 的帖子

snort在不同的规则数量、规则长度以及数据包长的情况下,性能差异还是比较大的。并且它可能利用了libpcap中的BPF,可以在内核空间完成规则的查找。从而不需要内核到用户空间的转换。
目前想放弃libpcap,准备研究一下零拷贝技术。不知道有没有作过这方面研究的前辈?多多指教,先谢了。

论坛徽章:
0
3 [报告]
发表于 2006-05-11 13:23 |显示全部楼层
谢谢大家的回复,零拷贝已经完成. 结果如下

.测试设备
===============
smartBits600
DELL Poweredge2650: Intel(R) Xeon(TM) CPU 2*2.8G, 4G Memory

,测试结果(不丢包)
===============
r8169网卡(PCI: 32bit X 64MHz)
----------------------------------------
64字节(包括4字节CRC,下同)达到500Mbps
128字节达到750Mbps,
256字节以上达到1000Mbps
随机包长达到700Mbps
-------------------------------------------------------------

Intel 82545GM网卡(PCI: 64bit X 64MHz)
---------------------------------------------------
64字节(包括4字节CRC,下同)达到750Mbps
96字节以上达到1000Mbps
随机包长达到1000Mbps
-------------------------------------------------------------
相对于非零拷贝, 有很大的提高! 呵呵

论坛徽章:
0
4 [报告]
发表于 2006-05-11 14:30 |显示全部楼层

回复 7楼 platinum 的帖子

实际上没有想象的难
主要有这么几点:
1. 在内核中为Rx分配一片连续的内存, 再分割成一个个的小buffer挂到descriptor上(由于linux内核分配大的内存块有限制,所以可以分配几大块然后分别挂在descriptor上).
2. 把内存的物理地址传给用户空间的收包API.
3. 收包API通过mmap()把物理地址映射到用户空间(需要用到/dev/mem).
4. 把网卡的收包中断处理(Rx ISR)搬到用户空间.

另, 应该注意减少中断的频度, 这样可以大大降低系统开销.
所以要实现零拷贝,实际上只需要修改网卡驱动中内存的分配和中断处理.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP