前言
平常每周都会有一些心得感悟,这些在大家工作中可能会有许多共性。我觉得花一些时间整理一下,跟粉丝读者们分享一下日常学习工作的想法和所得,这是一个很好的互动和文章分享的痛点。
这是第十七篇。
DPDK编译
上周在Ubuntu上面编译安装DPDK这个开源库,配置运行了一下简单的几个application。记录一下。
编译
1 2 3 4 5 6 7 8
| 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。还对其他库有依赖,主要如下:
1 2 3 4 5 6 7 8
| 项目 版本 安装命令 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查看配置的情况:
1 2 3 4 5 6 7
| 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脚本配置
1 2 3
| echo 4 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
dpdk-hugepages.py --setup 8M
|
这种方式只在当次配置后生效,系统重启后就重置了。
还可以通过内核启动参数配置,就是要写入grub,保证系统启动的时候就分配hugepage内存。
1 2 3 4 5 6
| 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。
1 2 3 4 5 6
| 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目录编译运行即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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,沟通交流。
博客地址: https://fishmwei.github.io/
掘金主页: https://juejin.cn/user/2084329776486919