前言
pktgen是性能强大、功能丰富的测试工具。它的发包能力可达10M以上,而普通的发包工具,例如iperf、netfperf只能达到几十万的水平。原因在于,pktgen是内核模块,直接在内核中构建数据包并发送,不存在从用户空间向内核空间拷贝数据的过程。另外值得一提的是pktgen-dpdk,虽然运行在用户态,但是由于用户态直接接管网卡设备,也不存在从用户态向内核拷贝数据的过程。这两个性能测试工具性能相仿。从加速比和功能丰富角度看,pktgen-dpdk更胜一筹,从部署复杂度和兼容性看,pktgen内核版更具优势。
正是因为pktgen是一个内核模块,它的使用界面不是很友好(通过修改虚拟文件的值来进行配置)。好在Linux源码中提供了脚本协助用户完成这个操作。
本文旨在介绍一种经过验证的部署方式。读者可以根据本文介绍的步骤快速搭建一个测试环境。
拓扑
性能测试一般采用C/S模式。pktgen做为客户端(发送端),服务端部署sar来观察性能指标(接收端)。
pktgen(发送端)安装过程
你需要一台Linux主机部署pktgen。本案使用的OS为CentOS7。由于pktgen的sample文件位于源码包,加上有些linux发行版默认没有携带pktgen工具,建议采用如下步骤编译安装内核。
1、下载官方linux内核源码包
2、解压源码包:
tar xvf 源码包.xz |
3、将解压后的源码包迁移至/usr/src/目录下,重命名为linux,或者建立软链接:
ln –s <解压后源码包名> linux |
4、安装必要的工具
yum install openssl openssl-devel gcc make ncurses ncurses-devel bison flex libelf-dev libelf-devel elfutils-libelf-devel -y |
5、生成内核编译配置文件,这是一个伪图形界面的工具,一路使用默认值即可
make menuconfig |
6、编译内核
make -j 20 |
7、安装内核
make modules_install make install |
8、重启计算机,在内核选择目录下,选择新编译的内核即可
pktgen的使用
使用Pktgen的最简单办法,是直接使用位于linux内核源码包中的示例脚本。这些脚本位于/usr/src/linux-<内核版本号>/samples/pktgen/ 目录下。
单流发包测试:
./pktgen_sample02_multiqueue.sh -i <网口名称> -m <目的MAC> -d <目的IP> -n <发包数目> -s <包大小> -t <线程数目> |
使用pktgen_sample02_multiqueue.sh可以进行多队列测试,使用pktgen_sample04_many_flows.sh可执行多流测试。
使用<脚本名称> -h 命令可以参看可选参数。大致如下:
Usage: ./pktgen_sample01_simple.sh [-vx] -i ethX -i : ($DEV) output interface/device (required) -s : ($PKT_SIZE) packet size -d : ($DEST_IP) destination IP -m : ($DST_MAC) destination MAC-addr -t : ($THREADS) threads to start -f : ($F_THREAD) index of first thread (zero indexed CPU number) -c : ($SKB_CLONE) SKB clones send before alloc new SKB -n : ($COUNT) num messages to send per thread, 0 means indefinitely -b : ($BURST) HW level bursting of SKBs -v : ($VERBOSE) verbose -x : ($DEBUG) debug |
sar(接收端):
1、sar的安装
yum install sysstat |
2、sar的配置
打开配置文件: /etc/sysconfig/sysstat 一般不需要特殊配置 |
3、sar的运行
一般不需要,sar进程会随机启动。手动启动的话,执行
systemctl start sysstat |
4、查看流量信息
sar -n DEV 1 1000 // 查看网络流量信息, 1表示1秒刷新一次,1000表示执行1000次; 前面的选项是变化的,而最后这两个选项永久不变。 后面可以加一个grep来过滤特定的网络接口 |
5、其他参数
-u |
CPU使用情况 |
-r |
内存使用情况 |
-b |
磁盘使用情况 |
-n |
网络使用情况 |