Jef*_*lin 4 linux statistics pcap libpcap
在Linux路由器上,我编写了一个C程序,它使用pcap来获取IP头和数据包的长度.通过这种方式,我可以收集统计数据并根据IP测量带宽.很简约.:-)
现在流量和用户数量都在增长,旧程序开始变得困难.也就是说,路由器很难应对大量的数据包.在"黄金时段"总共超过50000个包.
该程序本身已经过优化.我不想炫耀,但我相信它能够得到它的好处.它读取IP头和数据包长度.然后它将IP转换为索引(只是一个简单的减法),并将数据包的长度存储(累积)在一个数组中.它偶尔(实际上是一个SIGALRM)将数组存储在MySQL数据库中.
我的问题是:有没有其他方法可以利用以太网设备来获得比pcap"更便宜"的比特流?
我当然可以修改以太网驱动程序以包含单个IP统计信息收集,但这似乎有点矫枉过正.
基本上我的程序是繁忙的eth0上的'tcpdump',最终会杀死我的路由器.
你考虑过PF_RING吗?它仍然是pcap类似的世界,但在类固醇上 - 由于零拷贝机制:

如您所见,有一个内核模块可以将低级别的数据包复制到PF_RING缓冲区中,并且有一个用户区部分允许访问此缓冲区.
谁需要PF_RING?
基本上每个人每秒都要处理很多数据包."许多"一词根据您用于流量分析的硬件而变化.它可以在1,2GHz ARM上达到80k pkt/sec,在低端2,5GHz Xeon上达到14M pkt/sec以上.PF_RING不仅可以让您更快地捕获数据包,还可以更有效地捕获数据包,从而保留CPU周期....