- 论坛徽章:
- 0
|
回复 14# sumireko
测试平台有三个:
1、虚拟机,用定时器每个jiffies模拟产生报文,交给sniff程序计数、读报文头然后释放,在2.8G Macbook Pro + Vmware Fusion(2core, 4G memory, 64-bit kernel 2.6.31) 虚拟机上每秒可以做到 250*8k = 2M pps(2K以内各种大小报文对性能没有影响); 此时一个核CPU已经被内核生成包的定时器占满,另一个核跑sniff程序,大概占用了 10-20%;
2、AMD Opteron 2.0G CPU, 4核 1M cache的服务器,BCM万兆卡,kernel 没有打开irq balance;没有运行sniff之前,直接修改原生驱动程序在netif_receive 之前释放收到的报文,CPU1个核可以达到1.7M pps的收包能力,再大就因为ksoftirq占满1个CPU核而导致丢包;运行ntzc+sniff后,CPU可以达到1.1M pps的抓包能力(包括用户空间sniffer收包、计数、读报文头和释放空间),此时CPU1个核被ksoftirq线程占满,另一个核运行sniff程序,CPU占用率 <30%;
3、Intel C2D E4500的一台兼容机上,网卡是我们自己的网络业务加速卡(Semptian NSA卡,4GE业务接口),加速卡和CPU之间的接口是Intel 82575 Dual GE,流量经过双通道负载分担后上到2个CPU核后,可以达到1.5Mpps的抓包能力(包括用户空间sniffer收包、计数、读报文头和释放),每个核CPU占用率 <50%;在报文大小 >=256字节时,sniffer GE线速抓包的CPU占用率降到 10% 以内。
从2和3的情况来看,ntzc本身并没有增强对突发小包的捕获能力,但大大节省了大包到用户空间时memcpy对CPU的占用;另外,由于ntzc可以很容易支持每个核上独立管理报文内存,如果配合网卡的多通道能力,在多进(线)程用户程序处理报文时,可以最大程度减少cache在多个核间同步带来的性能损失。 |
|