网络bcc程序测试方案
网络组指标有四个,分别是网络流量、网络延时、丢包率、错包率,主要测试准确性和性能两个方面。
-
准确性测试主要测试程序对于要提取的网络数据是否准确,可以用模拟工具模拟要提取的数据,例如使用tc命令设置网络延时和丢包,然后使用我们编写的程序采集数据,并且使用传统工具进行对比,测试我们的程序采集的数据是否准确,测试完毕后可以继续完善指标程序。
-
性能测试主要测试运行我们的程序时对于系统资源的影响,主要包括CPU利用率、内存占用、网络资源占用、cache利用情况等,例如可以使用
perf stat
测试我们的程序。
1. 具体做法
1.1 准确性测试
- 第一步,运行我们编写的数据采集程序
- 第二步,使用模拟工具模拟一定的数据流量,延时、丢包、错包等,并记录统计结果。
- 第三步,关闭模拟工具,退出我们编写的数据采集程序,运行传统工具
- 第四步,使用模拟工具模拟一定的数据流量,延时、丢包、错包等,并记录统计结果。
- 第五步,数据比较和分析,写出测试报告,优化和完善我们的程序
1.2 性能测试
- 第一步,打开性能测试工具(例如perf),统计一定时间内系统性能状态,包括cpu利用率、内存占用情况、网络资源占用情况等,并做记录
- 第二步,运行一段时间我们的数据采集程序,统计一定时间内系统性能状态,包括cpu利用率、内存占用情况、网络资源占用情况等,并做记录
- 第三步,做差异性比较和分析,并写出报告
例如使用perf测试bcc统计流量的程序运行时的性能,如下图:
task-clock:CPU 利用率,该值高,说明程序的多数时间花费在 CPU 计算上而非 IO。
Context-switches:进程切换次数,记录了程序运行过程中发生了多少次进程切换。
Cache-misses:程序运行过程中总体的 cache 利用情况,如果该值过高,说明程序的 cache 利用不好
CPU-migrations:表示进程运行过程中发生了多少次 CPU 迁移,即被调度器从一个 CPU 转移到另外一个 CPU 上运行。
Cycles:处理器时钟,一条机器指令可能需要多个 cycles。
Instructions: 机器指令数目。
IPC:是 Instructions/Cycles 的比值,该值越大越好,说明程序充分利用了处理器的特性。
2. 数据模拟工具
在Ubuntu上使用 tc 和 netem命令组合模拟客户环境网络波动情况测试,如丢包和延迟等。
- 延迟设置
//延迟 300ms ± 100ms
sudo tc qdisc add dev eth0 root netem delay 300ms 100ms
sudo tc qdisc del dev eth0 root netem delay 300ms 100ms
- 丢包设置
//丢包率 5%
sudo tc qdisc add dev eth0 root netem loss 5%
sudo tc qdisc del dev eth0 root netem loss 5%
- 使用iptables设置丢包,对输入报文随机丢包50%
iptables -I INPUT -s 121.14.48.1 -m statistic --mode random --probability 0.5 -j DROP
3. 传统工具举例
网络指标程序测试对比工具包括,但不限于这些工具,可以用其他更好的工具,现在只做一些常用传统工具的介绍。
3.1 iftop实时流量监控工具(此工具可用来测试网络流量指标程序)
可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等,详细使用方法可以看参数说明。
监控实时流量举例
3.2 netperf
netperf是一种网络性能的测量工具(可测试网络栈,测试不同类型的网络性能的benchmark工具),主要针对基于TCP或UDP的传输。netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。
netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能。
具体过程如下:
-
建立连接
-
测试
-
返回结果
-
参数用法
3.3 iperf
iperf是一个TCP/IP和UDP/IP性能测试工具,能够提供网络吞吐率信息,以及震动、丢包率、最大组和最大传输单元大小等统计信息。
iperf以client/server方式工作,服务器端和客户端都使用同一程序iperf,服务器端使用-s选项,而客户端则使用-c选项。在 client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,用来回传递着特殊的流量模式,以测试网络的性能。
参数用法
更多工具可以自行查找。