上一篇通过在虚拟机中安装dpdk和pktgen,基本已经有了一个可以测试的环境,今天主要验证pktgen的-s选项,通过pcap格式的数据文件来构造pktgen端口发送的数据,这个功能实在是太有效果了,可惜的是家里的环境没有那么多网卡,没办法捕获到pktgen端口发出的消息,否则看起来会更加直观。
在贴图之前,先简要记录一些pktgen使用的一些参数和命令,便于日后参考:
启动参数:
首先要明确一个地方,pktgen的启动参数分为两个部分,第一部分叫做"EAL common options",第二部分叫做"Application Usage",这两个部分是通过两条横杠" – "来分隔的,例如"app/x86_64-native-linuxapp-gcc/pktgen -c 0x1f -n 2 -m 1024 – -P -m [1:2].0,[3:4].1 -s 0:http_get.pcap -s 1:http_res200.pcap ",参数的帮助可以直接-h查看,其中常用的
“EAL common options”:
-c 用于指定运行程序的CPU内核掩码。研究了一下大概是这样的,假如我的虚拟机CPU有5个核,那么就按照 5 4 3 2 1来进行排位,然后从右自左,每4位组成一个16进制数值(二进制1111-> 0xf),不够的补0,算出分配给pktgen使用5个核的掩码就是0x1f,假设我们有10个核,想分配给pktgen使用8个,那么掩码就是0xff。
-n 用来指定内存通道。这一点没有太理解,没明白核和通道是什么对应关系
-m 用来指定分配的内存
-w 添加一个PCI设备到白名单。我看见Mellanox网卡dpdk绑定的测试程序中用到-w这个选项,不知道是不所相通的,后期再验证
“Application Usage”:
-s P:file 指定端口要加载的pcap数据流文件。注意写法,P代表端口,例如要给端口0指定test0.pcap文件,就写为0:test0.pcap,要给端口3指定test3.pcap文件,就写为3:test3.pcap
-P 开启所有网卡的混杂模式
-T 开启输出的彩色模式。这一选项不建议用,彩色最好看,但是颜色太淡经常看不清
-m 定义映射到端口的lcore矩阵。这里的-m和上面的意义是不一样的,而且比较灵活,理解这个参数需要掌握三个分隔符即可,一个是点号".",一个就是冒号":",还有一个是逗号",",点号用来分隔core.port,冒号用来分隔core->rx/tx的,例如上面的例子-m [1:2].0,[3:4].1,指定core1用作port0的rx,core2用作port0的tx,core3用作port1的rx,core4用作port1的tx,注意core0一般是master,不能被分配,会提示错误。
简单说完pktgen的启动参数,先看一下应用运用中的-s参数功效。使用这个功能主要是为了通过捕获的现有的特殊格式的数据包,然后加载到pktgen中,利用它超强的无与伦比的发包能力来测试服务器性能。因为这几天一直在做这方面的内容,所以稍微研究了一下,演示用自己的电脑访问一个http的网站,然后将GET和200消息分别导出成一个独立的pcap数据包,例如下面这样:
http_get.pcap:
http_res200.pcap
返回的数据包显示为tcp,实际还是http的内容,可能是因为分包的关系,数据不完整而已。有了上面这两个包,在启动pktgen的时候就可以通过-s选项加载到对应的端口,查看方法比较简单,顺便也记录一些pktgen的一些常用命令:
page
转到对应的页面。pkt常用的页面有main,latency,pcap,cpu和stats
设置端口发包数量
set count 数值,例如set 0 count 10
设置端口发包速率(相对于网卡识别到的自己的速率)
set count 百分比,例如set 1 rate 1%
修改端口源或者目的ip地址(注意要带掩码)
set [src|dst] ip IP地址,例如set 0 src ip 192.168.10.100/24
修改端口源或者目的MAC地址
set src|dst ip MAC地址,例如set 0 src fa:12:33??ab:36
切换端口(一般pktgen在一个页面会显示一个端口信息,通过port可以切换其他端口)
port
熟悉了常见的命令,通过page pcap进入pcap页面,查看我们已经加载的包信息:
遗憾是由于虚拟机是通过virtio网卡作测试的,不能抓取pktgen发出的完整的数据包,不过这种方式已经在服务器上测试过,通过pcap定制发包内容确实是可行的。