首页 学习记录 正文
  • 本文约6182字,阅读需31分钟
  • 8789
  • 0

使用 TestPMD 测试 DPDK 性能和功能(Intel)

本文介绍数据平面开发套件 (DPDK) TestPMD 应用程序。它向您展示了如何构建和配置TestPMD,以及如何使用它来检查使用DPDK的不同网络设备的性能和功能。

TestPMD是随 DPDK 软件包一起分发的参考应用程序之一。其主要目的是在网络接口上的以太网端口之间转发数据包。此外,它还允许用户尝试不同驱动程序的某些功能,例如 RSS、过滤器和英特尔®以太网流量控制器。

我们还将查看 TestPMD 运行时命令行,该命令行可用于配置端口之间的数据包转发以及网络接口支持的其他功能。TestPMD 应用程序适用于所有版本的 DPDK。

测试PMD的示例设置

为了演示 TestPMD 的使用,我们将考虑两种典型的硬件设置。

在第一个设置(如图 1 所示)中,TestPMD 应用程序与两个连接到外部流量发生器的以太网端口一起使用。这允许用户在不同的网络工作负载下测试吞吐量和功能。

外部流量
图 1.设置 1 – 使用外部流量生成器。

在第二种设置中,TestPMD 应用程序与环回模式下的两个以太网端口一起使用。这允许用户检查网络设备的接收和传输功能,而无需外部流量发生器。


图 2.设置 2 – 环回模式下的 TestPMD。

转发模式

TestPMD 具有可在应用程序中使用的不同转发模式。

  • 输入/输出模式:此模式通常称为IO模式。它是最常见的转发模式,也是启动 TestPMD 时的默认模式。在 IO 模式下,CPU 内核从一个端口 (Rx) 接收数据包,并将其传输到另一个端口 (Tx)。如果需要,可以使用同一端口进行接收和传输。
  • 仅 Rx 模式:在此模式下,应用程序会轮询来自 Rx 端口的数据包,并在不传输数据包的情况下释放它们。通过这种方式,它充当数据包接收器。
  • 仅限 Tx 模式:在此模式下,应用程序生成 64 字节 IP 数据包,并从 Tx 端口传输这些数据包。它不处理数据包的接收,因此充当数据包

后两种模式(仅 Rx 和仅 Tx)对于分别检查数据包接收和传输非常有用。

除了这三种模式之外,还有其他转发模式 在TestPMD 文档中进行了说明。

编译和准备测试PMD

以下步骤用于编译和设置 TestPMD 应用程序:

  1. 从源目录编译 DPDK。这也会编译 TestPMD 应用程序:

    $ make config T=x86_64-native-linuxapp-gcc
    $ make
  2. 初始化内核模块uio:

    $ sudo modprobe uio
  3. igb_uio插入内核模块:

    $ sudo insmod ./build/kmod/igb_uio.ko
  4. 保留巨大的页面内存供 DPDK TestPMD 应用程序使用。最简单的方法是使用DPDK附带的 dpdk-setup.sh 工具(有关此方面的更多信息,请参阅DPDK入门指南):

    $ sudo ./usertools/dpdk-setup.sh
  5. 将网络接口端口绑定到igb_uio。对于此示例,我们将假定要使用的端口的 PCI 地址为 0000:83:00.1 和 0000:87:00.1:

    $ sudo ./usertools/dpdk-devbind.py –b igb_uio 0000:83:00.1 0000:87:00.1

运行测试PMD

TestPMD 可以使用一系列命令行参数在非交互模式下运行。它还可以在交互模式下运行,使用-i选项获取运行时命令行。运行时命令行允许动态配置 TestPMD:

$ sudo ./build/app/testpmd –l 12,13,14 –n 4 -- -i

在此示例中,-l选项指定逻辑内核。核心 12 用于管理命令行,核心 13 和 14 将用于转发数据包。-n 选项用于指定系统的内存通道数。双短划线将 DPDK 环境抽象层 (EAL) 命令与 TestPMD 应用程序命令分开,在本例中为交互模式的 -i 选项。运行应用程序时,您将看到一些如下所示的输出:

$ sudo ./build/app/testpmd –l 12,13,14 –n 4 -- -i

EAL: Detected 40 lcore(s) EAL: Probing VFIO support... EAL: PCI device 0000:83:00.0 on NUMA socket 1 EAL: probe driver: 8086:10fb net_ixgbe EAL: PCI device 0000:83:00.1 on NUMA socket 1 EAL: probe driver: 8086:10fb net_ixgbe EAL: PCI device 0000:87:00.0 on NUMA socket 1 EAL: probe driver: 8086:10fb net_ixgbe EAL: PCI device 0000:87:00.1 on NUMA socket 1 EAL: probe driver: 8086:10fb net_ixgbe Interactive-mode selected USER1: create a new mbuf pool <mbuf_pool_socket_0>:

   n=163456, size=2176, socket=0

Configuring Port 0 (socket 0) Port 0: 00:1B:21:B3:44:51 Configuring Port 1 (socket 0) Port 1: 00:1B:21:57:EE:71 Checking link statuses... Port 0 Link Up - speed 10000 Mbps - full-duplex Port 1 Link Up - speed 10000 Mbps - full-duplex Done testpmd>

testpmd>提示符允许用户输入命令。这称为运行时命令行。例如,我们可以使用它来检查转发配置:

testpmd> show config fwd
io packet forwarding - ports=2 - cores=1 - streams=2 

  • NUMA support disabled, MP over anonymous pages disabled Logical Core 13 (socket 1) forwards packets on 2 streams: RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01 RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00

这表明TestPMD正在使用默认的io转发模式,如上所述。它还显示核心编号 13(这是我们从 中启用的第二个核心)将从端口 0 轮询数据包,将它们转发到端口 1,反之亦然。命令行上的第一个核心 12 用于处理运行时命令行本身。

要开始转发,只需键入 start:

testpmd> start

然后,若要检查是否正在端口之间转发流量,请运行以下命令以显示应用程序正在使用的所有端口的统计信息:

testpmd> show port stats all

NIC statistics for port 0

RX-packets: 8480274 RX-missed: 0 RX-bytes: 508816632 RX-errors: 0 RX-nombuf: 0 TX-packets: 5763344 TX-errors: 0 TX-bytes: 345800320

Throughput (since last show) Rx-pps: 1488117 Tx-pps: 1488116

NIC statistics for port 1

RX-packets: 5763454 RX-missed: 0 RX-bytes: 345807432 RX-errors: 0 RX-nombuf: 0 TX-packets: 8480551 TX-errors: 0 TX-bytes: 508832612

Throughput (since last show) Rx-pps: 1488085 Tx-pps: 1488084

此输出显示自数据包转发开始以来应用程序处理的数据包总数,以及两个端口接收和传输的数据包数。流量速率以每秒数据包数 (pps) 显示。在此示例中,在端口接收的所有流量都以 1488 万 pps 的理论线速转发。线速是给定数据包大小和网络接口的最大速度。

要停止转发,只需键入停止即可。这将停止转发并显示两个端口的累积统计信息以及总体摘要。

testpmd> stop

Telling cores to stop... Waiting for lcores to finish...

------------------ Forward statistics for port 0 ---------------------- RX-packets: 136718750 RX-dropped: 0 RX-total: 136718750 TX-packets: 136718750 TX-dropped: 0 TX-total: 136718750

------------------ Forward statistics for port 1 ---------------------- RX-packets: 136718750 RX-dropped: 0 RX-total: 136718750 TX-packets: 136718750 TX-dropped: 0 TX-total: 136718750

+++++++++++ Accumulated forward statistics for all ports +++++++++++++++ RX-packets: 273437500 RX-dropped: 0 RX-total: 273437500 TX-packets: 273437500 TX-dropped: 0 TX-total: 273437500 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

使用多核

对于单个内核不足以转发所有传入流量的情况,可以使用多个内核来处理来自不同端口的数据包。

在前面的示例中,核心 13 和 14 可用于转发数据包,但仅使用核心 13。要启用另一个内核,我们可以使用以下命令:

testpmd> set nbcore 2

testpmd> show config fwd

io packet forwarding - ports=2 - cores=2 - streams=2


  • NUMA support disabled, MP over anonymous pages disabled
    Logical Core 13 (socket 1) forwards packets on 1 streams:
    RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01
    Logical Core 14 (socket 1) forwards packets on 1 streams:
    RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00

现在,核心 13 将从端口 0 接收数据包并在端口 1 上传输它们,核心 14 将从端口 1 接收数据包并在端口 0 上传输它们。

更改转发模式

如上所述,TestPMD 具有不同的转发模式。要将转发模式更改为仅 Rx,我们可以使用 set fwd 命令:

testpmd> set fwd rxonly
testpmd> start

现在,如果我们查看端口统计信息,我们会看到仅显示收到的数据包。由于没有传输的数据包,因此 Tx 统计信息将保持在 0:

testpmd> show port stats all

NIC statistics for port 0

RX-packets: 524182888 RX-missed: 0 RX-bytes: 31450974816 RX-errors: 0 RX-nombuf: 0 TX-packets: 0 TX-errors: 0 TX-bytes: 0

Throughput (since last show) Rx-pps: 14880770 Tx-pps: 0

NIC statistics for port 1

RX-packets: 486924876 RX-missed: 0 RX-bytes: 29215494352 RX-errors: 0 RX-nombuf: 0 TX-packets: 0 TX-errors: 0 TX-bytes: 0

Throughput (since last show) Rx-pps: 14880788 Tx-pps: 0

在 TestPMD 中获取帮助

TestPMD 为运行时可用的命令提供了联机帮助。这些部分分为几个部分,可以使用帮助进行访问。

testpmd> help

以下部分提供了帮助:

help control    : Start and stop forwarding.

help display : Displaying port, stats and config information. help config : Configuration information. help ports : Configuring ports. help registers : Reading and setting port registers. help filters : Filters configuration help. help all : All of the above sections.

例如,要获取有关显示统计信息和其他信息的命令的帮助,请执行以下操作:

testpmd> help display
Display:

show port (info|stats|xstats|fdir|stat_qmap|dcb_tc|cap) (port_id|all)

Display information for port_id, or all.

show port X rss reta (size) (mask0,mask1,...)

Display the rss redirection table entry indicated by masks on port X. size is used to indicate the hardware supported reta size

show port rss-hash ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|ipv6-udp-ex [key]

Display the RSS hash functions and RSS hash key of port X

clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)

Clear information for port_id, or all.

show (rxq|txq) info (port_id) (queue_id)

Display information for configured RX/TX queue.

show config (rxtx|cores|fwd|txpkts)

Display the given configuration.

read rxd (port_id) (queue_id) (rxd_id)

Display an RX descriptor of a port RX queue.

read txd (port_id) (queue_id) (txd_id)

Display a TX descriptor of a port TX queue.

结论

在本文中,我们介绍了如何编译,设置和运行TestPMD以及如何通过运行时命令行对其进行配置。



    评论
    更换验证码
    友情链接