Pktgen入门
这一节介绍如何编译运行pktgen, 运行环境是ubuntu, 需要检查系统是否支持大页内存
本人使用的时centos 7
总结一点: 其实只要能编译运行dpdk后,就能直接编译运行pktgen了。pktgen本来就是基于dpdk开发的
就是一个dpdk的应用程序,把它想成dpdk的helloworld就行
系统要求
请参考 DPDK入门指南 的 系统要求
其实也没啥要求的。搞一台台式机,随便安装个linux发行版,centos,unbutu,fedora都行
设置大页内存
内核2.6.33以上
make menuconfig检查一下HUGETLBFS内核选项保证打开
$ grep -i huge /boot/config-2.6.35-24-generic
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
具体参考dpdk的大页内存使用
在系统启动时,申请大页内存
$ sudo vi /etc/sysctl.conf
Add to the bottom of the file:
vm.nr_hugepages=256
在系统启动时,挂载大页内存
$ sudo vi /etc/fstab
Add to the bottom of the file:
huge /mnt/huge hugetlbfs defaults 0 0
$ sudo mkdir /mnt/huge
$ sudo chmod 777 /mnt/huge
BIOS设置
打开HPET High Precision Event Timer
打开hyper-threading
具体参考dpdk的 enabling additional BIOS functionality
其实都是附加功能,本人直接跳过了
终端显示
pktgen显示需要132列,42行
pktgen使用VT100控制代码进行显示,必须支持
本人安装了centos,都支持,跳过
下载源码
去官网下载dpdk的源码和pktgen的源码
git clone http://dpdk.org/git/dpdk
git clone http://dpdk.org/git/apps/pktgen-dpdk
安装点工具
$ sudo apt-get install linux-headers-3.5.0-32-generic
$ sudo apt-get install libpcap-dev
本人的centos都有,跳过
编译DPDK和PKTGEN
设置环境变量
export RTE_SDK=
DPDK的解压目录
export RTE_TARGET=x86_64-native-linuxapp-gcc 编译后存放的目录
编译DPDK
$ cd $RTE_SDK
$ make install T=x86_64-native-linuxapp-gcc
T=xxx-yyy-zzz都有特殊含义的,此处只了解,作为回忆,具体去看 DPDK入门指南吧
编译Pktgen
$ cd
$ make
设置环境
设置环境变量
export RTE_SDK=
export RTE_TARGET=x86_64-native-linuxapp-gcc
在PktgenInstallDir/tools下面有个run.py的脚本,其实下面还有个run.sh,都可以的
MD看到py就想起了piyan,估计intel那家伙对py也情有独钟......
可以用来配置pktgen的运行环境,包括设置大页内存,加载驱动,绑定网卡为igb_uio
$ cd /tools
$ ./run.py -s default # setup system using the cfg/default.cfg file
注意设置 cfg/default.cfg 为你的系统的配置
run.py还可以用来运行pktgen, 把 -s (-setup)删了
$ cd /tools
$ run.py default
下面是官网给出的default.cfg
# Setup configuration
setup = {
'devices': [
'81:00.0 81:00.1 81:00.2 81:00.3',
'85:00.0 85:00.1 85:00.2 85:00.3',
'83:00.0'
],
'opts': [
'-b igb_uio'
]
}
# Run command and options
run = {
'dpdk': [
'-l 1,1-5,10-13',
'-n 4',
'--proc-type auto',
'--log-level 7',
'--socket-mem 2048,2048',
'--file-prefix pg'
],
'blacklist': [
#'-b 81:00.0 -b 81:00.1 -b 81:00.2 -b 81:00.3',
#'-b 85:00.0 -b 85:00.1 -b 85:00.2 -b 85:00.3',
'-b 81:00.0 -b 81:00.1',
'-b 85:00.0 -b 85:00.1',
'-b 83:00.0'
],
'pktgen': [
'-T',
'-P',
'--crc-strip',
'-m [2:3].0',
'-m [4:5].1',
'-m [10:11].2',
'-m [12:13].3',
],
'misc': [
'-f themes/black-yellow.theme'
]
}
我们来修改一下,符合自己系统的
# 设备应该是网卡设备,这些号是PCIE ID 号
# 去dpdk的目录 下面 ./usertools/dpdk-devbind.py -s
#0000:02:05.0 '82545EM Gigabit Ethernet Controller (Copper)' unused=igb_uio
#0000:02:06.0 '82545EM Gigabit Ethernet Controller (Copper)' unused=igb_uio
#0000:02:07.0 '82545EM Gigabit Ethernet Controller (Copper)' unused=igb_uio
#0000:02:08.0 '82545EM Gigabit Ethernet Controller (Copper)' unused=igb_uio
# Setup configuration
setup = {
'devices': [
'-b 0000:02:05.0 -b 0000:02:06.0',
'-b 0000:02:07.0',
'-b 0000:02:08.0'
],
'opts': [
'-b igb_uio'
]
}
# 其实就是设置DPDK应用程序的环境, 关键是下面的,设置跟pktgen相关的运行参数
# Run command and options
run = {
'dpdk': [
#-l 0-3 下标从0开始
'-c f',
#内存通道
'-n 4',
'--proc-type auto',
'--log-level 7',
#'--socket-mem 512,512',
'--socket-mem 512', #问题1: 这样就可以了,不知道为什么,而且使用 -m 1024也是可以的,
虚拟机里面我的CPU是两个啊,因该算的是实际卡槽的cpu, 并不是虚拟的物理核心,核心数,或者逻辑核心
'--file-prefix rte',
'--huge-dir=/mnt/huge' #问题2: 建议把这加上,反正我的系统不加,有时会跑到/dev/hugepages下面去了,目前没去找为什么
],
'blacklist': [
#黑名单,不加载
#'-b 0000:02:05.0 -b 0000:02:06.0',
#'-b 0000:02:07.0',
#'-b 0000:02:08.0'
],
'pktgen': [
'-T',
'-P',
#或者用-p f 掩码
'--crc-strip',
'-m [1].0',
'-m [2].1',
'-m [3].2',
'-m [4].3',
],
'misc': [
'-f themes/black-yellow.theme'
]
}
这样就能跑起来了
/ Ports 0-3 of 4 Copyright (c) <2010-2016>, Intel Corporation
Flags:Port : P--------------:0 P--------------:1 P--------------:2 P--------------:3
Link State : ----TotalRate----
Pkts/s Max/Rx : 56/56 56/56 56/56 55/55 223/223
Max/Tx : 0/0 0/0 0/0 0/0 0/0
MBits/s Rx/Tx : 0/0 0/0 0/0 0/0 0/0
Broadcast : 0 0 0 0
Multicast : 61 58 51 0
64 Bytes : 28 28 24 0
65-127 : 42 40 39 0
128-255 : 14 14 14 0
256-511 : 18 17 15 0
512-1023 : 0 0 0 0
1024-1518 : 2 2 2 0
Runts/Jumbos : 0/0 0/0 0/0 0/0
Errors Rx/Tx : 0/0 0/0 0/0 0/0
Total Rx Pkts : 56 56 56 55
Tx Pkts : 0 0 0 0
Rx MBs : 0 0 0 0
Tx MBs : 0 0 0 0
ARP/ICMP Pkts : 28/0 28/0 24/0 0/0
:
Pattern Type : abcd... abcd... abcd... abcd...
Tx Count/% Rate : Forever /100% Forever /100% Forever /100% Forever /100%
PktSize/Tx Burst : 64 / 32 64 / 32 64 / 32 64 / 32
Src/Dest Port : 1234 / 5678 1234 / 5678 1234 / 5678 1234 / 5678
Pkt Type:VLAN ID : IPv4 / TCP:0001 IPv4 / TCP:0001 IPv4 / TCP:0001 IPv4 / TCP:0001
Dst IP Address : 192.168.1.1 192.168.0.1 192.168.3.1 192.168.2.1
Src IP Address : 192.168.0.1/24 192.168.1.1/24 192.168.2.1/24 192.168.3.1/24
Dst MAC Address : 00:0c:29:a1:0a:5f 00:0c:29:a1:0a:55 00:0c:29:a1:0a:73 00:0c:29:a1:0a:69
Src MAC Address : 00:0c:29:a1:0a:55 00:0c:29:a1:0a:5f 00:0c:29:a1:0a:69 00:0c:29:a1:0a:73
VendID/PCI Addr : 8086:100f/02:05.0 8086:100f/02:06.0 8086:100f/02:07.0 8086:100f/02:08.0
Pktgen:/> Ver: 3.3.3 (DPDK 17.02.1) Powered by Intel? DPDK ------------------
Pktgen:/>
Pktgen:/>