安装 DPDK(CentOS 7.x)

运行环境

  • 操作系统:CentOS-7-x86_64-Minimal-1908.iso

  • RT Kernel 版本:3.10.0-1127.rt56.1093.el7

  • DPDK 版本:18.08

  • Redis 版本:3.2.12-2.el7

  • hiredis 版本:0.14.0

基础环境部署

安装 RT kernel

  • 操作系统更新

$ yum update -y && yum upgrade -y
  • RT repo

sudo tee /etc/yum.repos.d/CentOS-rt.repo >/dev/null <<EOF
# CentOS-rt.repo
 
[rt]
name=CentOS-7-rt
baseurl=http://mirror.centos.org/centos/\$releasever/rt/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
  • 软件依赖

$ yum install tuna tuned tuned-profiles-realtime rt-setup rt-tests -y
  • RT kernel

$ yum install kernel-rt.x86_64 kernel-rt-devel.x86_64 kernel-headers.x86_64 -y
$ grubby --set-default /boot/vmlinuz-3.10.0-1127.rt56.1093.el7.x86_64
  • 卸载无用 kernel

$ uname -a ; rpm -qa kernel\* | sort
Linux nes-base.novalocal 3.10.0-1127.8.2.el7.x86_64 #1 SMP Tue May 12 16:57:42 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
kernel-3.10.0-1127.10.1.el7.x86_64
kernel-3.10.0-1127.8.2.el7.x86_64
kernel-headers-3.10.0-1127.10.1.el7.x86_64
kernel-rt-3.10.0-1127.rt56.1093.el7.x86_64
kernel-rt-devel-3.10.0-1127.rt56.1093.el7.x86_64
kernel-tools-3.10.0-1127.10.1.el7.x86_64
kernel-tools-libs-3.10.0-1127.10.1.el7.x86_64

$ rpm -e kernel-3.10.0-1127.8.2.el7.x86_64
$ rpm -e kernel-3.10.0-1127.10.1.el7.x86_64

$ uname -a ; rpm -qa kernel\* | sort
Linux nes-base.novalocal 3.10.0-1127.8.2.el7.x86_64 #1 SMP Tue May 12 16:57:42 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
kernel-headers-3.10.0-1127.10.1.el7.x86_64
kernel-rt-3.10.0-1127.rt56.1093.el7.x86_64
kernel-rt-devel-3.10.0-1127.rt56.1093.el7.x86_64
kernel-tools-3.10.0-1127.10.1.el7.x86_64
kernel-tools-libs-3.10.0-1127.10.1.el7.x86_64
  • 重启虚拟机并检查

$ uname -r
3.10.0-1127.rt56.1093.el7.x86_64
$ ls /usr/src/kernels/
3.10.0-1127.rt56.1093.el7.x86_64

开启大页内存

  • 查看 Linux 操作系统是否启动了大页内存,如果 HugePages_Total 为 0,意味着 Linux 没有设置或没有启用 Huge pages。

$ grep -i HugePages_Total /proc/meminfo
HugePages_Total:       0
  • 查看是否挂载了 hugetlbfs。

$ mount | grep hugetlbfs
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
  • (可选)如果没有挂载则手动挂载。

$ mkdir /mnt/huge_1GB
$ mount -t hugetlbfs nodev /mnt/huge_1GB
$ vim /etc/fstab
nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0
  • 修改 grub2,为系统配置 12 个 1GB 的大页面。

$ vi /etc/grub2.cfg
# 定位到 linux16 /boot/vmlinuz-3.10.0-1127.rt56.1093.el7.x86_64 在行末追加
default_hugepagesz=1G hugepagesz=1G hugepages=12
  • 重启并验证

$ cat /proc/meminfo | grep Huge
HugePages_Total:      12
HugePages_Free:       12
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB
$ cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
12

安装 DPDK

  • 软件依赖

$ yum install -y libpcap.x86_64 libpcap-devel.x86_64
$ yum install numactl numactl-devel.x86_64 numactl-libs.x86_64 -y
$ yum install pciutils -y
$ yum install net-tools.x86_64 -y
$ yum install gcc gcc-c++ -y
  • 设置 DPDK 环境变量

# vi dpdk.rc
export RTE_SDK=/opt/dpdk-18.08
export RTE_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=${DPDK_DIR}/${RTE_TARGET}
export LD_LIBRARY_PATH=${RTE_SDK}/${RTE_TARGET}/lib:/usr/local/lib:/usr/lib:
  • 获取 DPDK 源码

$ cd /opt
$ wget http://fast.dpdk.org/rel/dpdk-18.08.tar.gz
$ tar -zxvf dpdk-18.08.tar.gz
$ cd /opt/dpdk-18.08/
  • 编译代码

$ source dpdk.rc
$ cd ${RTE_SDK}
$ make config T=${RTE_TARGET}
$ make clean && make
$ make install T=${RTE_TARGET}
  • 配置开启 PDUMP 抓包

$ cd ${RTE_SDK}/${RTE_TARGET}/
$ vi .config
CONFIG_RTE_LIBRTE_PMD_PCAP=y
CONFIG_RTE_LIBRTE_PDUMP=y
$ make

$ cd ${RTE_SDK}/app/pdump
$ make && make install