前言
平常每周都会有一些心得感悟,这些在大家工作中可能会有许多共性。我觉得花一些时间整理一下,跟粉丝读者们分享一下日常学习工作的想法和所得,这是一个很好的互动和文章分享的痛点。
这是第十七篇。
DPDK编译
上周在Ubuntu上面编译安装DPDK这个开源库,配置运行了一下简单的几个application。记录一下。
编译
wget http://fast.dpdk.org/rel/dpdk-21.11.tar.xz
tar dpdk-21.11.tar.xz
cd dpdk-21.11
meson build
cd build
ninja
ninja install
ldconfig
编译的步骤比较简单,具体的DPDK最新的版本使用了meson+ninja的编译工具。需要安装meson, ninja。还对其他库有依赖,主要如下:
项目 版本 安装命令
GCC 9.2.1
pkg-config >0.27 apt install build-essential
python >3.5 apt install python3.6
meson >0.49.2 pip3 install meson
ninja 1.9.0 pip3 install ninja
pyelftools > 0.22 pip3 install pyelftools
上面这些是基础的依赖,对应到不同的component,还有其他的依赖,可以查看官方文档或者根据编译错误自行安装对应的包。
编译安装完成之后,很多二进制执行文件都会被拷贝到bin目录,在终端下面直接敲dpdk然后tab键可以看到相关的命令。
大页配置
运行之前必须做的一个是大页内存的配置。
可以通过命令dpdk-hugepages.py -s查看配置的情况:
root@keep-VirtualBox:~# dpdk-hugepages.py -s
Node Pages Size Total
0 4 2Mb 8Mb
Hugepages mounted on /dev/hugepages
root@keep-VirtualBox:~#
有对应的Pages就是正常的, 上面这个说明系统已经配置了2MB大小的大页,最多支持4个页。否则需要先配置。
可以通过往配置文件写入pages数目,或者使用dpdk-hugepages.py脚本配置
echo 4 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
dpdk-hugepages.py --setup 8M
这种方式只在当次配置后生效,系统重启后就重置了。
还可以通过内核启动参数配置,就是要写入grub,保证系统启动的时候就分配hugepage内存。
nano /etc/default/grub
# 在GRUB_CMDLINE_LINUX后添加hugepage=4
GRUB_CMDLINE_LINUX_DEFAULT="quiet splashi hugepages=4 iommu=pt intel_iommu=on"
update-grub
reboot
系统并不是支持任意大小的pagesz,针对intel的cpu可以通过查看cpu flags来确定,如果有pse则表示支持2MB大小,有pdpe1gb 则支持1GB的大小。IBM power架构支持16MB和16GB。
root@keep-VirtualBox:/# cat /proc/cpuinfo | grep flags
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch vmmcall fsgsbase avx2 invpcid rdseed clflushopt arat nrip_save flushbyasid decodeassists
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch vmmcall fsgsbase avx2 invpcid rdseed clflushopt arat nrip_save flushbyasid decodeassists
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch vmmcall fsgsbase avx2 invpcid rdseed clflushopt arat nrip_save flushbyasid decodeassists
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch vmmcall fsgsbase avx2 invpcid rdseed clflushopt arat nrip_save flushbyasid decodeassists
可以看到我的虚拟机平台 cpu flags只有pse的。只支持2MB大小的pagesz。
helloworld运行
直接进入example目录编译运行即可:
root@keep-VirtualBox:/# cd /root/dpdk/examples/helloworld/
root@keep-VirtualBox:~/dpdk/examples/helloworld# make
ln -sf helloworld-shared build/helloworld
root@keep-VirtualBox:~/dpdk/examples/helloworld#
root@keep-VirtualBox:~/dpdk/examples/helloworld#
root@keep-VirtualBox:~/dpdk/examples/helloworld#
root@keep-VirtualBox:~/dpdk/examples/helloworld# ./build/helloworld
EAL: Detected CPU lcores: 4
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
hello from core 1
hello from core 2
hello from core 3
hello from core 0
root@keep-VirtualBox:~/dpdk/examples/helloworld#
更多
今天小结了一下DPDK的源码编译安装、大页配置及helloworld的运行。
清明节放假,宅家里好好学习,天天向上!活到老,学到老了。
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: fishmwei.gitee.io/ 掘金主页: juejin.cn/user/208432…