官方手冊:http://pktgen-dpdk.readthedocs.io/en/latest/getting_started.html
過程
- 開機(重啟)
- 把DPDK那一套流程走一遍(環境變量設置、設置userspace I/O態、掛載大頁、綁定網卡)
- 按照官方手冊上編譯。pktgen就是基於dpdk開發的應用,所以只要能成功編譯dpdk就可以編譯pktgen。官方手冊上一些依賴項可以跳過不看。
我用到的指令:
export RTE_SDK=/home/chang/dpdk
export RTE_TARGET=x86_64-native-linuxapp-gcc
# 編譯DPDK
cd $RTE_SDK
make install T=x86_64-native-linuxapp-gcc
# 設置userspace I/O態、掛載大頁、綁定網卡
cd /home/chang/dpdk/usertools
./dpdk-setup.py
# 編譯pktgen
cd ~
git clone git://dpdk.org/apps/pktgen-dpdk
cd pktgen-dpdk
make
4.接下來要做的是修改配置文件。在/pktgen-dpdk/cfg
里
# 備份
cp default.cfg backup
vim default.cfg
這是官方給我們的示例 default.cfg
description = 'A Pktgen default simple configuration'
# Setup configuration
setup = {
'exec': (
'sudo',
'-E'
),
'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'
),
'opts': (
'-b igb_uio'
)
}
# Run command and options
run = {
'exec': (
'sudo',
'-E'
),
# Application name and use app_path to help locate the app
'app_name': 'pktgen',
# using (sdk) or (target) for specific variables
# add (app_name) of the application
# Each path is tested for the application
'app_path': (
'./app/%(target)s/%(app_name)s',
'%(sdk)s/%(target)s/app/%(app_name)s',
),
'dpdk': (
'-l 14,15-22',
'-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'
),
'app': (
'-T',
'-P',
'--crc-strip',
'-m [15:16].0',
'-m [17:18].1',
'-m [19:20].2',
'-m [21:22].3'
),
'misc': (
'-f', 'themes/black-yellow.theme'
)
}
需要修改的地方有三處:
- 網卡設備的PCI號,可以用dpdk的usertools查看。
- DPDK EAL 的 command line arguments。改成與你系統對應的參數。參照DPDK的文檔。
- pktgen 的 command line arguments,參照pktgen的文檔。
貼上我的版本作為參考:
# 只貼有修改的部分
# ……
'devices': (
'02:01.0 02:02.0' # 只綁定了兩個網卡到DPDK做實驗
),
# ……
'dpdk': (
'-l 0-3',
'-n 4',
'--proc-type auto',
'--log-level 7',
#'--socket-mem 2048,2048',
'--socket-mem 2048', # 只有一個socket
'--file-prefix pg',
),
# .......
'app': (
'-T',
'-P',
'--crc-strip',
'-m [1].0', # 查看官方手冊了解 -m 用法,用於提供lcore到port的映射
'-m [2].1'
#'-m [19:20].2',
#'-m [21:22].3'
),
修改完后即可執行。
cd pktgen-dpdk
./tools/run.py -s default
./tools/run.py default
執行情況
(我終於第一次看到DPDK的超過120Mbit/s的轉發速率到底是啥樣子的了……)