Linux网络编程之dpdk的环境设置详解

打印 上一主题 下一主题

主题 511|帖子 511|积分 1533

一、dpdk是什么?

DPDK(Data Plane Development Kit)是一个高性能的数据平面开发工具包,它为快速数据包处理提供库和驱动程序。DPDK主要用于网络应用中,如网络假造化、网络安全、负载均衡、防火墙和其他网络功能,它旨在提供快速、可扩展的网络数据包处理能力。
DPDK的主要特点包括:

  • 用户空间数据处理:DPDK将网络数据包处理从内核空间转移到用户空间,避免了传统内核空间处理中的上下文切换和系统调用开销,从而提高了处理速度。
  • 高性能:DPDK通过使用优化的数据包处理算法和零拷贝技术,淘汰了数据在内存中的复制次数,提高了数据处理的效率。
  • 可扩展性:DPDK支持多核处理,可以在多个CPU核心上并行处理数据包,提高了系统的可扩展性。
  • 丰富的网络协议支持:DPDK支持多种网络协议,包括TCP、UDP、IP、VLAN、MPLS等。
  • 兼容性:DPDK可以在多种Linux发行版上运行,并且可以与现有的网络应用和框架集成,如Open vSwitch、OpenStack等。
    DPDK通常用于以了局景:


  • 网络假造化:在假造化环境中,DPDK可以提高假造交换机和假造路由器的性能。
  • 高性能网络应用:如高速缓存、负载均衡器、防火墙等,DPDK可以提供所需的高性能网络处理能力。
  • SDN(软件界说网络):在SDN架构中,DPDK可以用于实现快速的数据平面处理,支持网络流量的快速转发和控制。
    DPDK是一个开源项目,由Intel发起,并得到了社区的支持和贡献。由于其高性能和机动性,DPDK在需要高速网络处理的场景中得到了广泛的应用。
二、dpdk的环境设置

多队列网卡是什么?

多队列网卡(Multi-Queue NIC)是一种网络接口卡(NIC),它支持将网络流量分发到多个处理队列中,以提高系统的网络处理性能和吞吐量。传统上,单队列网卡只有一个硬件队列用于处理所有的输入和输出流量,这可能会成为瓶颈。通过使用多队列网卡,可以将输入和输出流量分发到差别的硬件队列中,并在多核系统上进行并行处理。这样可以减轻单个队列的负载压力,并充分使用系统资源来提高网络处理效率。
多队列网卡通常需要操作系统和驱动程序的支持才能实现,因为操作系统需要将流量公道地分发到各个队列,并确保数据包按照顺序精确地发送和接收。同时,应用程序也需要针对多队列进行优化,以充分发挥多队列网卡的性能优势。
多队列网卡的关键特性包括:

  • 并行处理:通过多个队列,可以在多个CPU核心上并行处理网络流量,提高网络吞吐量和降低延迟。
  • 负载均衡:操作系统可以根据当前的网络负载和CPU使用情况,动态地调解流量分配,实现负载均衡。
  • 提高可靠性:如果一个队列出现故障或过载,其他队列可以接管其工作,从而提高系统的整体可靠性。
  • 硬件加速:多队列网卡通常配备有硬件加速功能,如TCP卸载(TOE)和假造化支持,进一步优化网络性能。
  • 支持高级网络功能:多队列网卡支持高级网络功能,如假造局域网(VLAN)、网络假造化(NVGRE、VXLAN)和流量监控等。
    多队列网卡在数据中央、云计算和高性能计算环境中尤为紧张,它们可以显著提高网络性能,满意这些环境对高网络吞吐量和低延迟的需求。
怎么判定是否为多队列网卡?

cat /proc/interrupts | grep <网卡名>
如果结果只有一行,则不是多队列网卡

怎么修改成多队列网卡?

处理:关闭假造机,找到你假造机的文件夹路径,然后找到假造机名.vmx文件,该文件记载了假造机的统统设置信息,包括网卡信息。其中,我的网卡信息如下:

修改成如下:

重新打开假造机结果如下:

注意:该设置后,网卡从ens35变成了ens160,这里的原因不明,但是不影响使用。
修改内存设置,使其支持hugepage(巨页)

一般内存的每一页是4k的,修改成成巨页后,可以选择2M大概1G,这里假造机建议选择2M。
修改:
打开这个文件:vim /etc/default/grub
修改如下:
  1. GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US default_hugepagesz=1G hugepagesz=2M hugepages=1024"
复制代码
注:在GRUB_CMDLINE_LINUX反面加 “default_hugepagesz=1G hugepagesz=2M hugepages=1024”这个三个键值对即可。
然后输入:sudo update-grub
再重启假造机即可。
下载dpdk

下载链接:https://core.dpdk.org/download/
我选择的是19.08.2的版本
注:每个版本的差别挺大的,深入发掘一个版本即可。
编译dpdk

首先设置环境变量:
export RTE_SDK=/home/user/dpdk/dpdk-stable-19.08.2/ (注意,该路径取决于你的dpdk路径)
export RTE_TARGET=x86_64-native-linux-gcc
这个只是一次性的,为了永久生效,可以vim ~/.bashrc 反面加上前面的两句,这样每次开启终端都会设置export
解压好dpdk源码后,进入到usertools文件夹,执行dpdk设置的交互脚本文件:./dpdk-set
  1. ------------------------------------------------------------------------------
  2. RTE_SDK exported as /home/user/dpdk/dpdk-stable-19.08.2
  3. ------------------------------------------------------------------------------
  4. ----------------------------------------------------------
  5. Step 1: Select the DPDK environment to build
  6. ----------------------------------------------------------
  7. [1] arm64-armada-linuxapp-gcc
  8. [2] arm64-armada-linux-gcc
  9. [3] arm64-armv8a-linuxapp-clang
  10. [4] arm64-armv8a-linuxapp-gcc
  11. [5] arm64-armv8a-linux-clang
  12. [6] arm64-armv8a-linux-gcc
  13. [7] arm64-bluefield-linuxapp-gcc
  14. [8] arm64-bluefield-linux-gcc
  15. [9] arm64-dpaa2-linuxapp-gcc
  16. [10] arm64-dpaa2-linux-gcc
  17. [11] arm64-dpaa-linuxapp-gcc
  18. [12] arm64-dpaa-linux-gcc
  19. [13] arm64-octeontx2-linuxapp-gcc
  20. [14] arm64-octeontx2-linux-gcc
  21. [15] arm64-stingray-linuxapp-gcc
  22. [16] arm64-stingray-linux-gcc
  23. [17] arm64-thunderx2-linuxapp-gcc
  24. [18] arm64-thunderx2-linux-gcc
  25. [19] arm64-thunderx-linuxapp-gcc
  26. [20] arm64-thunderx-linux-gcc
  27. [21] arm64-xgene1-linuxapp-gcc
  28. [22] arm64-xgene1-linux-gcc
  29. [23] arm-armv7a-linuxapp-gcc
  30. [24] arm-armv7a-linux-gcc
  31. [25] i686-native-linuxapp-gcc
  32. [26] i686-native-linuxapp-icc
  33. [27] i686-native-linux-gcc
  34. [28] i686-native-linux-icc
  35. [29] ppc_64-power8-linuxapp-gcc
  36. [30] ppc_64-power8-linux-gcc
  37. [31] x86_64-native-bsdapp-clang
  38. [32] x86_64-native-bsdapp-gcc
  39. [33] x86_64-native-freebsd-clang
  40. [34] x86_64-native-freebsd-gcc
  41. [35] x86_64-native-linuxapp-clang
  42. [36] x86_64-native-linuxapp-gcc
  43. [37] x86_64-native-linuxapp-icc
  44. [38] x86_64-native-linux-clang
  45. [39] x86_64-native-linux-gcc
  46. [40] x86_64-native-linux-icc
  47. [41] x86_x32-native-linuxapp-gcc
  48. [42] x86_x32-native-linux-gcc
  49. ----------------------------------------------------------
  50. Step 2: Setup linux environment
  51. ----------------------------------------------------------
  52. [43] Insert IGB UIO module
  53. [44] Insert VFIO module
  54. [45] Insert KNI module
  55. [46] Setup hugepage mappings for non-NUMA systems
  56. [47] Setup hugepage mappings for NUMA systems
  57. [48] Display current Ethernet/Baseband/Crypto device settings
  58. [49] Bind Ethernet/Baseband/Crypto device to IGB UIO module
  59. [50] Bind Ethernet/Baseband/Crypto device to VFIO module
  60. [51] Setup VFIO permissions
  61. ----------------------------------------------------------
  62. Step 3: Run test application for linux environment
  63. ----------------------------------------------------------
  64. [52] Run test application ($RTE_TARGET/app/test)
  65. [53] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
  66. ----------------------------------------------------------
  67. Step 4: Other tools
  68. ----------------------------------------------------------
  69. [54] List hugepage info from /proc/meminfo
  70. ----------------------------------------------------------
  71. Step 5: Uninstall and system cleanup
  72. ----------------------------------------------------------
  73. [55] Unbind devices from IGB UIO or VFIO driver
  74. [56] Remove IGB UIO module
  75. [57] Remove VFIO module
  76. [58] Remove KNI module
  77. [59] Remove hugepage mappings
  78. [60] Exit Script
复制代码
内里给了很多用户可以选择的选项,在这里,步调一我选择的是[39] x86_64-native-linux-gcc
在Option中输入39即可。
遇到以下错误:
  1. mkdir: cannot create directory ‘/home/user/dpdk/dpdk-stable-19.08.2/x86_64-native-linux-gcc’:
  2. Permission denied make[3]: *** [/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkconfig.mk:68:
  3. /home/user/dpdk/dpdk-stable-19.08.2/x86_64-native-linux-gcc] Error 1 make[2]: ***
  4. [/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkroot.mk:65: config] Error 2 make[1]: ***
  5. [/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkinstall.mk:60: pre_install] Error 2 make: ***
  6. [/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkroot.mk:77: install] Error 2
复制代码
这说明是该操作该文件夹的权限不够,直接使用sudo chmod 777 /home/user/dpdk/dpdk-stable-19.08.2/ 即可
反面在执行一次39,然后进去代码编译,第一次很比较久,需要耐心等待。
如果编译中,出现下面的题目:

说明你的内核版本不匹配。我使用的时ubuntu23,这个dpdk是19的,以是内核版本过高,导致编译失败。
以是我不得不去下载一个低版本的ubuntu系统。
后来我换成了ubuntu16版本的,内核是4.4.420,这才编译成功。
言归正传,编译成功后,再执行43,插入igb_uio模块,具体请看:https://zhuanlan.zhihu.com/p/483868843
输入45,插入KNI模块
46和47是内存的设置。有关解析请看:http://t.csdnimg.cn/ZAvko
这里46和47我都设置成了512
然后输入49,查看网卡信息:

接着让你选择PIC地点,我选择eth1,理由是eth0是用来通过ssh协议连接到xshell的,而且已经处于active状态,我们选择的网卡必须是没有工作的,否则要实现down下来:ifconfig eth0 down

然后60退出。
以上就是dpdk19版本的全部环境设置。
都看到这了,还不给个免费的赞支持一下?

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表