環境
- Intel(R) Xeon(R) CPU
- Ubuntu 16.04 LTS
- DPDL 17.11.2 LTS
手順
DPDKをダウンロード
cd ~
curl https://fast.dpdk.org/rel/dpdk-17.11.2.tar.xz | tar xJvf -
NUMAのライブラリをインストール
sudo apt install libnuma-dev
DPDKのセットアップツールを実行
cd dpdk-stable-17.11.2/usertools/
./dpdk-setup.sh
[14] x86_64-native-linuxapp-gcc
を選択
ビルドが走る
ビルド後,[34] Exit Script
で抜ける
sudo mkdir -p /opt/dpdk/
sudo cp ~/dpdk-stable-17.11.2 /opt/dpdk
bashrcに環境変数を設定する
vim .bashrc
DPDKへのパスを通す
export RTE_SDK=/opt/dpdk/dpdk-stable-17.11.2/
サンプルプログラムのコンパイルができるか試す
cd ~/dpdk-stable-17.11.2/examples/helloworld
make
これでビルドが成功すればDPDKが使えるようになっている.
実行にはhugepageの設定が別途必要
ここでは一時的な方法を使う
sudo su -c "echo 20 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages"
サンプルプログラムを実行
sudo ./helloworld
実行結果
EAL: Detected 32 lcore(s)
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:03:00.0 on NUMA socket 0
EAL: probe driver: 8086:1528 net_ixgbe
EAL: PCI device 0000:03:00.1 on NUMA socket 0
EAL: probe driver: 8086:1528 net_ixgbe
EAL: PCI device 0000:07:00.0 on NUMA socket 0
EAL: probe driver: 8086:1521 net_e1000_igb
EAL: PCI device 0000:07:00.1 on NUMA socket 0
EAL: probe driver: 8086:1521 net_e1000_igb
hello from core 1
hello from core 2
hello from core 3
hello from core 4
hello from core 5
hello from core 6
hello from core 7
hello from core 8
hello from core 9
hello from core 10
hello from core 11
hello from core 12
hello from core 13
hello from core 14
hello from core 15
hello from core 16
hello from core 17
hello from core 18
hello from core 19
hello from core 20
hello from core 21
hello from core 22
hello from core 23
hello from core 24
hello from core 25
hello from core 26
hello from core 27
hello from core 28
hello from core 29
hello from core 30
hello from core 31
hello from core 0
これで一通りDPDKが使えるようになった!
あとはhugepageを再起後も使えるようにgrub.cfg
に設定すればOK
sudo vim /etc/default/grub
下記はデフォルトのhugepageを1Gに設定し,1Gを1つ確保する例
-GRUB_CMDLINE_LINUX=""
+GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=1"
こういった設定もできる
これは1Gを1,2Mを20確保する例
GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=1 hugepagesz=2M hugepages=20"
設定後,下記のコマンドでgrubを反映して再起動
sudo update-grub
sudo reboot
下記のように,hugepage_totalが1になっていれば設定されている
cat /proc/meminfo | grep HugePage
AnonHugePages: 0 kB
HugePages_Total: 1
HugePages_Free: 1
HugePages_Rsvd: 0
HugePages_Surp: 0