一 netmap和ifconfig
我们使用netmap进行网络抓包,在包流量比较大的场合,比如10Gbps网络下,有时候是抓包不丢,当时包相对来说处理速度忙,导致一些丢包问题:
watch ifconfig eno1
可以看到drop packets 在增加,收到包的数量和发送包的数量保持不变,当时实际上是收到数据包的。
目前我想,看不到rx的数量变化是因为netmap是接管网卡的,网络数据不再向内核传递,所以看不到,至于丢的包数,是由于网卡的队列满造成的丢包,所以不需要在内核,直接看到的。
ethtool -S eno1|grep drop
或
ethtool -S eno1|grep error
可以验证。
经过测试netmap正常跑,解析数量不是太多的情况下,性能达到6Gbps-7Gbps之间。
二 用 af-packet收包
af-packet收包,特点是在网卡上用
watch ifconfig eno1
去看,发现rx的数量一直在增加,drop packets数量没有增加,感觉是不是比netmap的性能更好,其实不是,经过测试这种丢包更加严重。
丢包drop packet数量在程序内部抓包的时候显示一直在增加,也就是说性能只能达到4Gbps到5Gbps之间。
开了40个多线程,丢包竟然丢了一半。
三 小流量网卡netmap显示丢包
小流量情况下,按道理netmap丢包严重,到底是什么问题,可以考虑关闭暂停帧,
这种是64个字节的小帧数据,通知对方暂停接收或发送。
ethtool -A ethx tx off //发送模块关闭
ethtool -A ethx rx off //接收模块关闭
网友评论