通过raw socket 测试网卡性能

来源:互联网 发布:蓝可儿事件真相 知乎 编辑:程序博客网 时间:2024/06/16 20:35

一 测试环境

硬件环境:
processors number: 8
vendor_id : GenuineIntel
model name : Intel(R) Xeon(R) CPU L5420 @ 2.50GHz
cpu MHz : 2490.000
cache size : 6144 KB

memory : 20G

NIC: Intel Corporation I350 Gigabit Network Connection × 4

操作系统:
Linux ubuntu88 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

测试工具:
git@code.csdn.net:antony1776/packetsender.git

pktSender,基于PF_PACKET,c语言实现的数据包发送工具;
pktRcver,基于PF_RING,数据包接收工具;

二 测试目的

1 测试千兆网卡最大吞吐率,最大包接收速度,以及丢包率;
2 测试网卡满负荷时的cpu占用率;

三 测试步骤

1 开启数据接收程序:

#> pktRcver -i eth5 -e 1 -g 4

将网口 eth5 用于数据接收,并将该应用进程绑定到 CPU 4上,以观察该进程的 CPU 占用情况;

通过控制台输出,可以观察数据的实时接收情况。

2 开启数据发送程序 :

#> pktSender eth4 7 1000000

将网口 eth4 用于数据发送,并将该应用进程绑定到 CPU7 上,设置最大发包速率为 100w packet/s ;

四 测试结果

1 当设置数据包 payload 为 512 bytes 时,千兆网卡达到最大吞吐率,此时的实时速率为 1000Mbit/s,如下图所示:

这里写图片描述

但是此时的包速率只有 211834 (约等于21w)。

这里写图片描述

同时,pktRcver 进程的 cpu 占用率为 1.4%,pktSender 进程的 cpu 占用率为 26.8%;由此可见,数据接收对 cpu 的消耗并不大。

2 设置数据包 payload 为 1 byte,千兆网卡可以达到最大发包速率,此时的发包速率为 870240 packets/s (约等于 87 万),但是此时
的吞吐率并不大,只能达到 561.96 Mbit/s。同时,千兆网卡出现了一定程度的丢包,丢包率约等于 十万分之二。

这里写图片描述

相应的,pktSender 进程的 CPU 占用率达到了 100%,而 pktRcver 进程的 CPU 占用率只有 3.1%。可见,基于 PF_RING 的接收包工具
对 CPU 的需求并不是很大。

这里写图片描述