centos7上dpdk编译安装

dpdk版本:dpdk-17.05
下载地址:http://www.dpdk.org/browse/dpdk/snapshot/dpdk-17.05.tar.gz
内核版本:3.10.0-123.el7.x86_64

 

编译过程:

 

 

yum install libpcaplibcap-devel

yum install pciutils

yum install –y kernel-devel kernel-headers

yum install kernel.x86_64 -y

yum install net-tools.x86_64

 

tar -xzvf dpdk-17.05.tar.gz

cd dpdk-17.05

 

大页内存分配:

 NUMA系统(现在的linux一般都是)

  1. echo 1024 >/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
  2. echo 1024 >/sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
  1. [root@localhost dpdk-dst]# lscpu
  2. Architecture: x86_64
  3. CPU op-mode(s):32-bit,64-bit
  4. ByteOrder:LittleEndian
  5. CPU(s):2
  6. On-line CPU(s)list:0,1
  7. Thread(s) per core:1
  8. Core(s) per socket:2
  9. Socket(s):1
  10. NUMA node(s):1
  11. Vendor ID:GenuineIntel
  12. CPU family:6
  13. Model:61
  14. Model name:Intel(R)Core(TM) i5-5200U CPU @2.20GHz
  15. Stepping:4
  16. CPU MHz:2194.916
  17. BogoMIPS:4389.83
  18. Hypervisor vendor:VMware
  19. Virtualization type: full
  20. L1d cache:32K
  21. L1i cache:32K
  22. L2 cache:256K
  23. L3 cache:3072K
  24. NUMA node0 CPU(s):0,1

从上面可以看到,

  1. NUMA node(s):1

总共有一个NUMA node,注意这里的node个人理解就是具有独立内存和CPU总线的最小计算单元(每个node内部有自己的CPU总线和内存),而Core就是socket里独立的一组程序执行的硬件单元,比如寄存器,计算单元等,不单独占有内存。

 

非NUMA系统

  1. echo 1024 >/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

大页内存的挂载

  1. mkdir /mnt/huge
  2. mount -t hugetlbfs nodev /mnt/huge

 


  1. export RTE_SDK=/home/yml/dpdk/dpdk-stable-16.07.2    //这个是你生成的编译环境的路径
  2. export RTE_TARGET=x86_64-native-linuxapp-gcc    //编译的环境变量
  3. export DESTDIR = /home/yml/dpdk/dpdk-stable-16.07.2/ //你的安装路径,就是编译出来的文件的路径

编译

  1. make install T=$RTE_TARGET

Loading Modules to Enable Userspace IO for DPDK 

  1.  
  2. cd x86_64-native-linuxapp-gcc/
  3. sudo modprobe uio
  4. sudo insmod kmod/igb_uio.ko
  5. sudo insmod kmod/rte_kni.ko

网卡绑定

  1. ./tools/dpdk-devbind.py --status 查询网卡状态
  1. [root@localhost tools]#./dpdk-devbind.py --status
  2.  
  3. Network devices using DPDK-compatible driver
  4. ============================================
  5. 0000:02:05.0'82545EM Gigabit Ethernet Controller (Copper)' drv=ig`b_uio unused=e1000
  6. 0000:02:06.0'82545EM Gigabit Ethernet Controller (Copper)' drv=igb_uio unused=e1000
  7.  
  8. Network devices using kernel driver
  9. ===================================
  10. 0000:02:01.0'82545EM Gigabit Ethernet Controller (Copper)'if=eno16777736 drv=e1000 unused=igb_uio *Active*
  11. 0000:02:07.0'82545EM Gigabit Ethernet Controller (Copper)'if=eno67109432 drv=e1000 unused=igb_uio
  12.  
  13. Other network devices
  14. =====================

 

  1. ./tools/dpdk-devbind.py --bind=igb_uio 02:07.0

 

 

==================================================

 

执行test程序时输出:

EAL: Error reading from file descriptor 23: Input/output error

原因:

在虚拟机添加的网卡,dpdk不支持导致的。

需要修改一行代码,跳过dpdk pci 检查

 

修改代码行

 

lib/librte_eal/linuxapp/igb_uio/igb_uio.c

 

找到

pci_intx_mask_supported(dev)

这行代码

然后修改为

pci_intx_mask_supported(dev)||true

 

编译时错误: 提示  初始值设定项里有未知的字段‘ndo_change_mtu’

是因为新版本内核文件修改的问题,

用find / -name netdevice.h 查找内核中的头文件,找到struct net_device_ops 中的 ndo_change_mtu,

会看到ndo_change_mtu被替换成对应版本的ndo_change_mtu_rhXX,比如 ndo_change_mtu_rh74 将 /kni_net.c:704:2 中 ndo_change_mtu 用 ndo_change_mtu_rh74 

 

重新编译后

remod igb_uio

然后再insmod igb_uio

这个过程可以用dpdk-setup.py脚本来完成;

 

 

 

你可能感兴趣的:(网络通信)