免费注册 查看新帖 |

Chinaunix

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

[网络管理] 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-07 21:55 |只看该作者
原帖由 seasoblue 于 2006-4-7 17:24 发表
测试环境:
================================
libpcap: 0.9.4
CPU: Celeron 2.0GHz
Mem: 256DDR
NIC: Intel 8139, 10/100M
================================
应用程序只是对libpcap传上来的包作简 ...


我用的snort,就是基于libpcap的,在PIII 800+128M DDR,性能比你这个高远去了……

论坛徽章:
0
3 [报告]
发表于 2006-04-10 11:12 |只看该作者

回复 2楼 独孤九贱 的帖子

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

论坛徽章:
0
4 [报告]
发表于 2006-04-26 10:28 |只看该作者

很正常

libpcap的混杂模式抓包丢包的确很厉害,二三十兆比特的流量都丢,0.9.4必0.7.2要丢的少一点,但是没有很大改善。改用raw socket百兆网络基本不丢吧。

论坛徽章:
0
5 [报告]
发表于 2006-04-27 09:33 |只看该作者
根据我的经验,libpcap在linux下面效率很低,千兆网络下每秒也就抓得到十几兆字节。
在windows和freebsd下还是不错的,性能高了好几倍
这应该是跟操作系统有关

原帖由 seasoblue 于 2006-4-7 17:24 发表
测试环境:
================================
libpcap: 0.9.4
CPU: Celeron 2.0GHz
Mem: 256DDR
NIC: Intel 8139, 10/100M
================================
应用程序只是对libpcap传上来的包作简 ...

论坛徽章:
0
6 [报告]
发表于 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
7 [报告]
发表于 2006-05-11 13:28 |只看该作者
谈谈经验吧 ^_^

论坛徽章:
0
8 [报告]
发表于 2006-05-11 13:51 |只看该作者
楼主能说说经验否,我这的Ntop用的是libpcap 0.94抓的包。。能否采用你的技术哦?

论坛徽章:
0
9 [报告]
发表于 2006-05-11 14:30 |只看该作者

回复 7楼 platinum 的帖子

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

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

论坛徽章:
0
10 [报告]
发表于 2006-05-11 14:33 |只看该作者
能否将修改后的 82545GM 网卡驱动共享一下啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP