---
title: 运行DPDK
description: "使用大页可以提升DPDK转发性能。最大支持1G大页，但是4.14内核不支持1G大页，若需要使用1G大页则需要升级内核。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengaccel/network/dpdkug/kunpengaccel_TMdpdk_06_0006.html
sourcePath: /source/zh/kunpengaccel/network/dpdkug/kunpengaccel_TMdpdk_06_0006.html
indexId: 40bbd23a1e9ee498fb71b8cc6afffd32b01192b1ea4ac1e52b3fdcd3982663a771
---
# 运行DPDK

#### 配置大页内存

使用大页可以提升DPDK转发性能。最大支持1G大页，但是4.14内核不支持1G大页，若需要使用1G大页则需要升级内核。

内核为4.14时默认支持2M和512M大页。本文以内核配置512M大页为例，2M大页的配置方法类似，本文不再赘述。

1. 查看当前环境支持的NUMA Node个数，根据NUMA Node数为每个Node预留大页内存。
  1 numactl -H

2. 查看系统支持的大页类型。
  1 ll /sys/kernel/mm/hugepages/

  若回显信息中显示有hugepages-524288kB字样则表示支持512M大页。

  若回显信息中显示有hugepages-1048576kB字样则表示支持1G大页。

  可以根据实际情况进行选择使用，默认优先选择最大的大页类型。

3. 预留大页内存。

  - 配置512M大页。

    a. 配置大页个数。
      1 2 3 4 echo 50 > /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages echo 50 > /sys/devices/system/node/node1/hugepages/hugepages-524288kB/nr_hugepages echo 50 > /sys/devices/system/node/node2/hugepages/hugepages-524288kB/nr_hugepages echo 50 > /sys/devices/system/node/node3/hugepages/hugepages-524288kB/nr_hugepages

    b. 挂载大页。
      1 2 mkdir -p /mnt/huge_512mb mount -t hugetlbfs none /mnt/huge_512mb -o pagesize=512MB

  - （可选，需系统支持）配置1G大页。

    a. 打开“/etc/default/grub”文件。
      1 vi /etc/default/grub

    b. 修改系统启动项，预留大页 ，预留16个1G大页，总共16G。在GRUB_CMDLINE_LINUX行最后加上：

```
default_hugepagesz=1G hugepagesz=1G hugepages=16
```


    c. 生成系统grub并重启系统使配置生效。
      1 grub2-mkconfig -o /boot/efi/EFI/openeuler/grub.cfg

    d. 确认是否配置成功。
      1 cat /proc/meminfo | grep -i huge

      若回显信息中显示已配置的大页数量为16，则预留大页配置成功。

    e. 挂载大页。
      1 2 mkdir -p /mnt/huge_1gb mount -t hugetlbfs none /mnt/huge_1gb -o pagesize=1GB


#### 接管内核态网口

1. 加载内核驱动模块（使用vfio需要BIOS开启SMMU）。
  1 2 modprobe vfio modprobe vfio-pci

2. 绑定被测网口用户态，用于DPDK转发。首先获取网口PCI地址，可以使用DPDK源码“usertools/dpdk-devbind.py”脚本进行查看，以及进行接口绑定工作。

  a. 查看待绑定接口信息。
    1 dpdk-devbind.py -s


  b. 查看端口状态，接管链路状态up的端口。
    1 ethtool enp125s0f1

  c. 绑定用于DPDK转发的网口，此处以绑定0000:7d:00.1网口为例，使用时以查询到的待绑定的网口为准。
    1 dpdk-devbind.py --bind=vfio-pci 0000:7d:00.1

    查看端口是否成功绑定：

    1 dpdk-devbind.py -s

    端口处于up状态时进行绑定会报错，此时应执行ifconfig xxx down命令，再进行绑定。


#### 运行DPDK

完成上述配置，即可开始运行DPDK相关测试程序。本文以编译DPDK生成的标准测试程序testpmd为例，根据环境实际信息运行以下命令。


```
testpmd -c 0xf -n 4 -w $PCI  -- --rxd=$depth --txd=$depth  --rxq=$qnum --txq=$qnum --nb-cores=$cores  -i
```

testpmd为DPDK 19.11版本中的测试命令，DPDK 21.11.5版本中testpmd命令为dpdk-testpmd。


| 参数 | 说明 |
| --- | --- |
| \-c | 指定参与转发的CPU核，后跟参加转发核的掩码。 |
| \-n | 指定内存通道个数。 |
| \-w | 指定参与转发的网口PCI，即安装DPDK 19.11章节中绑定的网口PCI地址。 |
| \-\-rxd/\-\-txd | 指定参与转发的网口队列深度。 |
| \-\-rxq/\-\-txq | 指定参与转发的网口队列个数。 |
| \-\-nb\-cores | 指定实际参与转发的CPU核数。 |
| \-i | 以交互模式启动程序。 |
