dpdk学习笔记2------TestPMD使用

这篇文章主要是教大家如何编译生产TestPMD,并且告诉你如何启动它。

TestPMD主要是用来测试两个网卡之间收发包,可以支持RSS,filters和Flow Director。

TestPMD的使用场景

第1中场景:测试两块网卡间的数据收发。

 dpdk学习笔记2------TestPMD使用_第1张图片
Figure 1. Setup 1 – With an external traffic generator.

第2中场景,测试同一块网卡两个口之间的数据收发。

dpdk学习笔记2------TestPMD使用_第2张图片
Figure 2. Setup 2 – TestPMD in loopback mode.

转发模式

TestPMD有3中不同的转发模式。

  • Input/output mode: 收发模式,这是TestPMD启动时默认的模式,这种模式下cpu的核从网卡的一个口收包,再从另一个口转发出去,统一网卡即可收包又可发包。
  • Rx-only mode: 接收模式,这种模式下TestPMD收到包后就丢弃。
  • Tx-only mode: 发送模式,这种模式下TestPMD产生64字节长度的IP包从网卡的网卡发出。

后两种模式分别用于收发测试。

出这三种模式外,其它模式详见 TestPMD documentation.

TestPMD的编译和准备工作

  1. 在DPDK源码目录下,可以使用下面的命令在编译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. 设置TestPMD使用的大页内存. 一种简单的方法是通过dpdk-setup.sh这个脚本来设置(这个脚本也在dpdk的源码目录下): 

    $ sudo ./usertools/dpdk-setup.sh

    还有一种方法可以参考另一篇文章:https://blog.csdn.net/superbfly/article/details/105589151

  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

运行TestPMD

TestPMD 可以运行在交互和非交互两种模式下,参数 -i 代表进入交互模式,此时可以使用命令行。通过命令行可以对TestPMD进行动态设置:

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

上面的例子中 -l 参数用来设置用到的逻辑核。12核用来管理命令行,13,14核用来转发数据包。-n 参数用来指定使用的内存通道数。当程序运行起来时,将看到如下打印输出:

$ 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 :
       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:P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00

从上面的结果可以看出,当前采用的是默认的收发模式,13核用于将port 0收到的数据从prot 1发出,同时也将port 1收到的数据从port 0转发出去。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
 ####################################################################

上面输出了各个网口键入“start”命令之后收到与发出的数据包的统计。从上面的例子可以看到,所有的收发均达到了理想的1.44兆pps(理论上万兆网口收发包的最大数量)。

键入“stop”命令后停止程序,此时会显示出各个端口的独立统计和总体统计。

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
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

使用多核

当使用一个核不能满足我们的收发需求时,可以使用多核来处理每个网口的数据。

如果想使用其它核工作,可以使用一下命令:

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: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:P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00

这里可以看到13核用来接收port 0的数据,然后从port 1发出,14核接收port 1 的数据,从port 0 发出。

更改转发模式

使用下面命令可以设置TestPMD为接收模式:

testpmd> set fwd rxonly
testpmd> start

现在我们查看网口统计将发现只有收包统计,而发包统计计数全部为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获取帮助信息

通过“help”命令可以获取帮助信息。

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.

“help display”将显示统计和其它信息:

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.

附加信息

 

了解更多 DPDK相关内容请参考 documentation, 了解更多TestPMD内容参考 DPDK TestPMD Application User Guide.

你可能感兴趣的:(dpdk,dpdk)