dpdk编译和安装步骤

一、状态查询

grep -i HugePages_Total /proc/meminfo     查询是否启动大页

mount |grep hugetlbfs                               查看是否挂载了 hugetlbfs

cat /proc/meminfo |grep Huge                  查询大页是否配置

二、初始配置

设置虚拟机增加2个网卡,启动cpu虚拟化和IOMMU(若使用虚机)

apt install meson ninja-build build-essential python3-pip

apt install python3-pyelftools

lscpu     查看cpu\numa\socket信息   (numastat)

也可以使用dpdk脚本查看 python3 cpu_layout.py -s

cat  /proc/cpuinfo |grep --color pse      查看是否支持2M大页

cat  /proc/cpuinfo |grep --color pdpe1gb查看是否支持1G大页

我们已经知道, 为系统分配大页内存有两种大小:

2M 和 1G 

1G的只有64位系统支持, 并且我们推荐64位的操作系统尽量使用1G的page

同时, 我们还知道配置大页内存,有两个时机

boot time 和 run time

boot time的配置写在grub里,给内核.

 2.1 2M大页:(配置512*2M)

a、run time时生效

numa架构:

node0节点:echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

node1节点:echo 256 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

非numa:echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

这种配置方式的优点是配置简单,无需编译、重启,但是无法配置1GB这样的大hugepages

b、boot time生效(推荐)

1、修改文件

修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX中加入如下配置:

hugepages=1024  (1024*2M)

default_hugepagesz=2M hugepagesz=2M hugepages=1024

2、编译配置文件  grub2-mkconfig -o /boot/grub2/grub.cfg

3、重启 reboot

cat /proc/meminfo | grep Huge 查看大页是否设置成功

也可以使用dpdk脚本查看python3 dpdk-hugepages.py -s

mkdir /mnt/huge && mount -t hugetlbfs nodev /mnt/huge   临时挂载使用大页

echo “nodev /mnt/huge hugetlbfs defaults 0 0” >> /etc/fstab  永久挂载使用大页

2.2 1G大页:

1G大页内存,需要libhugetlbfs库的支持,如果设置2MB的据说不需要

apt install  libhugetlbfs

a、boot time生效

1、修改文件

修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX中加入如下配置:

default_hugepagesz=1G hugepagesz=1G hugepages=4

该配置表示默认的hugepages的大小为1G,设置的hugepages大小为1Ghugepages的页数为4页,即以41G页面的形式保留4Ghugepages内存

GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"

GRUB_DEFAULT=saved

GRUB_DISABLE_SUBMENU=true

GRUB_TERMINAL_OUTPUT="console"

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap default_hugepagesz=1G hugepagesz=1G hugepages=4 rhgb quiet"

GRUB_DISABLE_RECOVERY="true"

2、编译配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

3、重启

通过reboot命令重启,随后可以通过cat /proc/cmdline查看kernelcommand line是否包含之前的配置。

4、挂载

mkdir /mnt/huge_1GB  && mount -t hugetlbfs pagesize=1GB /mnt/ huge_1GB 临时挂载使用大页

echo “nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0” >> /etc/fstab 永久挂载使用大页

添加上面这样一行内容至/etc/fstab后并重启,可以通过df -a看到挂载成功:

nodev                           0       0         0     - /mnt/huge_1GB

这种配置方式的优点是可以在系统开机时即配置预留好hugepages,避免系统运行起来后产生内存碎片;另外,对于较大的例如1G pages,是不支持在系统运行起来后配置的,只能通过kernel cmdline的方式进行配置。对于双插槽的NUMA系统(dual-socket NUMA system),预留的hugepages会被均分至两个socket。

三、编译安装

mkdir build 创建外部编译目录

meson -Dbuildtype=debug -Dexamples=ALL -Denable_kmods=true build

???meson configure -Dexamples=All build -Dprefix=`pwd`/x86_64-native-linuxapp-gcc

编译问题解决:

buildtools/meson.build:45:8: ERROR: Problem encountered: missing python module: elftools

pip install pyelftools --upgrade

pip3 install pyelftools –upgrade

ninja -C build install

???cd build&&ninja install

ldconfig 刷新ldd链接

Ps:执行完之后所有的库都安装在 /usr/local/lib/x86_64-linux-gnu/ 目录。可执行程序和脚本都安装在 /usr/local/bin/ 目录。卸载只需执行 ninja uninstall 即可。至此环境安装完成。

编译DPDK应用:cd /usr/local/share/dpdk/examples  +  make

四、内核驱动安装

1、如果使用uio,需要加载uio_pci_generic(系统默认、不支持VF设备)
2、如果使用vfio,需要加载vfio(系统默认)和vfio-pci(系统默认)
3、如果使用igb_uio,需要加载uio(系统默认)和igb_uio(编译得到)。但是新版本的dpdk不再使用igb_uio(虽然还可以打开配置进行编译)。

git clone http://dpdk.org/git/dpdk-kmods

cd dpdk-kmods/linux/igb_uio

make

cd dpdk-kmods/linux/igb_uio

modprobe uio智能加载原有uio驱动

insmod igb_uio.ko intr_mode=legacy 加载驱动时要带着参数intr_mode=legacy,如果不加参数,将会有问题!

rmmod igb_uio.ko 卸载驱动

五、dpdk网卡接管

为接管前ethtool和ifconfig都可以查看网卡状态。最好记住网卡名和编号之间的关系。

DPDK网卡绑定

ifconfig ens38 down

python3 dpdk-devbind.py -b igb_uio ens38

???python3 dpdk-devbind.py --bind=vfio-pci ens38 ( vfio-pci需要支持IOMMU)

查看网卡状态

dpdk-devbind.py –status

解绑网卡

网卡 ens38被 DPDK 占用后,ifconfig 里就没有了,使用 lspci | grep Eth查看网卡

//解绑两个网卡的 igb_uio 驱动,绑定 e1000 驱动:

dpdk-devbind.py -u 0000:02:06.0

dpdk-devbind.py -b e1000  02:06.0

//启动网卡

#ifconfig ens38 up

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值