setup

ENVs

$ echo "export RTE_SDK=$HOME/dpdk" >> $HOME/.bashrc
$ echo "export RTE_TARGET=x86_64-native-linuxapp-gcc" >> $HOME/.bashrc

required packages

$ sudo apt install -y libpcap-dev python linux-headers-`uname -r` build-essential git libnuma-dev

download and bild DPDK

$ git clone http://dpdk.org/git/dpdk $RTE_SDK
$ cd $RTE_SDK
$ make install T=$RTE_TARGET

setup Hugepages

$ sudo vim /etc/default/grub
- GRUB_CMDLINE_LINUX=""
+ GRUB_CMDLINE_LINUX="hugepages=1024"
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
$ sudo mkdir -p /mnt/huge
$ sudo vim /etc/fstab
+ nodev /mnt/huge hugetlbfs defaults 0 0
$ reboot

helloworld

$ cd $RTE_SDK/examples/helloworld
$ make
$ sudo ./build/helloworld

NICのバインド

comming soon

周辺情報

hugepages確認

cat /proc/meminfo | grep "Huge"

cpu情報

CPU周辺の情報が取れる

lscpu

pci情報

取れるらしいんだけど使い方よくわかってない。用undergo

lspuci

skeltonの起動コマンド

以下のようにやるとtap-pmdが生成されてnetns使っていい感じになる。 ここら辺よくわかってないけど同じようにして他のアプリケーションでも使えると思う。

sudo ./build/basicfwd --vdev=net_tap0,iface=tap0 --vdev=net_tap1,iface=tap1

numa情報

がっつりnuma1の情報が持って来れそうな感じ。どのCPUコアがどのnuma socketに載っているかとか。

numactl -H

NIC numa

NICがどちらのnuma socketに繋がったpciに繋がっているかの確認

cat /sys/bus/pci/devices/[pci_address]/numa_node

pktgen

クローン(現状取り合えずでslank氏のを拝借。slankdev.mkを見れば使い方もわかる)

git clone https://github.com/slankdev/pktgen

※jk6だと俺のdpdkだとバージョン合わないからRTE_SDK変える(v16.11)

再表示

redisplay

起動コマンド例

sudo ./app/x86_64-native-linuxapp-gcc/pktgen -- -P -m "[1-7].0,[16-23].0,[8-15].1,[24-31].1"

memo