DPDK 抓包使用指南
一. 基本步骤
1. 下载 dpdk 源代码
http://core.dpdk.org/download/
2.下载 kmod 源代码
http://git.dpdk.org/dpdk-kmods/commit/
3. 解压编译 kmod,生成生成 igb_uio.ko
~/dpdk/dpdk-kmods-e68a705cc5dc3d1333bbcd722fe4e9a6ba3ee648/linux/igb_uio$ make
4.安装工具
sudo apt-get install libpcap-dev
sudo apt install python3-pip
pip3 install ninja
pip3 install meson
5. 编译 dpdk 代码
meson -Dexamples=all build
ninja -C build
6. 加载驱动 igb_uio
modprobe uio
insmod igb_uio.ko
7. 申请内存大页
mkdir -p /dev/hugepages
mountpoint -q /dev/hugepages || mount -t hugetlbfs nodev /dev/hugepages
su
echo 4096 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
8. 查询绑定网卡
./usertools/dpdk-devbind.py –status
ifconfig enp4s0 down
./usertools/dpdk-devbind.py --bind=igb_uio 0000:04:00.0 (0000:04:00.0 /enp4s0 是上一步查询设备得到的需要绑定的网卡 ID 和名称)
9. 运行 dpdk-testpmd
sudo ./build/app/dpdk-testpmd -c 3 -n 2 -- -i
testpmd> set fwd rxonly
testpmd> start
testpmd> show port stats all
10. 运行 dpdk-pdump
sudo ./build/app/dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/home/x/rx.pcap'
11. 获取结果
如果网卡有数据输入,打开/home/x/rx.pcap 文件就能看到数据包详情。
二. 使用多队列方式提升抓包性能
如果网卡数据流量较大,生成使用基本抓包功能很可能出现来不及抓取存储导致丢包现象,此时我们可以开启网卡多队列功能提升抓包性能。
1. 申请 ramfs
mkdir ~/ramfs
mke2fs /dev/ram0 8G
mount /dev/ram0 ~/ramfs/
2. 运行 dpdk-testpmd
sudo ./build/app/dpdk-testpmd -c 0xff -n 8 -- -i --rxq=4 --txq=4 --nb-core=4
testpmd> flow create 0 ingress pattern eth type is 0x05a2 dst is 87:65:43:21:43:21 / end actions queue index 1 / end
testpmd> set fwd rxonly
testpmd> start
testpmd> show port stats all
上述操作的作用是把以太网包长或类型为 0x5a2 并且目的 mac 地址为 87:65:43:21:43:21 的数据包放入队列 1 进行收取,生成其余数据包放入队列 0。根据传入的参数 rxq 接收队列有四个,也可以设置其余的过滤条件放入队列 2 和 3。
3. 运行 dpdk-pdump
sudo ./build/app/dpdk-pdump -l 10,11,12,13 -- --multi --pdump 'port=0,queue=0,rx-dev=/home/x/ramfs/rx-0.pcap' --pdump 'port=0,queue=1,rx-dev=/home/x/ramfs/rx-1.pcap'
启动多核进行文件 dump,生成其中核 10 用于 dpdk-pdump 主程序,核 11 用于接收队列 0 的数据包并写入 rx-0.pcap,核 12 用于接收队列 1 的数据包并写入 rx-1.pcap,核 13 为指定的空闲核。
参考链接:
[1] http://core.dpdk.org/doc/quick-start/
[2] https://blog.csdn.net/Q93068/article/details/110581617
[3] https://blog.csdn.net/aixueai/article/details/114791965