linux 如何使用pktgen来生成100gbe流量与dpdk?

06odsfpq  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(194)

规格:
Ubuntu 20.04版
英特尔E810网卡2x 100 GbE
DPDK db2 1.11.0
Package 生成器22.04.1
超微414 GS-TNR双AMD霄龙处理器
这是我第一次使用DPDK和pktgen,我在设置时遇到了麻烦。文档中缺少设置后的具体操作。我正在开发一个读取100 gbe udp数据包并以线速将有效负载写入文件的应用程序。此时,我只是想让pktgen在我将用于生成流量的机器上工作。最终,此流量将通过另一台计算机上的Mellanox ConnectX-5网卡接收。
我按照说明设置了pktgen,但它似乎没有执行任何操作。下面是cfg文件:

description = 'A Pktgen default simple configuration'

# Setup configuration
setup = {
    'exec': (
    'sudo', '-E'
        ),

    'devices': (
        'a1:00.0'
        ),
    # UIO module type, igb_uio, vfio-pci or uio_pci_generic
    'uio': 'vfio-pci'
    }

# Run command and options
run = {
    'exec': ('sudo', '-E'),

    # Application name and use app_path to help locate the app
    'app_name': 'pktgen',

    # using (sdk) or (target) for specific variables
    # add (app_name) of the application
    # Each path is tested for the application
    'app_path': (
        './usr/local/bin/%(app_name)s',
        '/usr/local/bin/%(app_name)s'
        ),

    'cores': '2,24-26,27-29',
    'nrank': '4',
    'proc': 'auto',
    'log': '7',
    'prefix': 'pg',

    'blocklist': (
        #'03:00.0', '05:00.0',
        #'81:00.0', '84:00.0'
        ),
    'allowlist': (
        'a1:00.0,safe-mode-support=1',
        ),

    'opts': (
        '-v',
        '-T',
        '-P',
        '-j',
        ),
    'map': (
        '[24:26].0',
        ),

    'theme': 'themes/black-yellow.theme'
    }

输出如下:

>>> sdk 'None', target 'None'
<module 'cfg' from 'cfg/default-100G.cfg'>
   Trying ./usr/local/bin/pktgen
sudo -E ./usr/local/bin/pktgen -l 2,24-26,27-29 -n 4 --proc-type auto --log-level 7 --file-prefix pg -a a1:00.0,safe-mode-support=1 -- -v -T -P -j -m [24:26].0 -f themes/black-yellow.theme
[sudo] password for cogrfserver:


Copyright(c) <2010-2021>, Intel Corporation. All rights reserved. Powered by DPDK
EAL: Detected CPU lcores: 96
EAL: Detected NUMA nodes: 2
EAL: Auto-detected process type: PRIMARY
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/pg/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: No available 2048 kB hugepages reported
EAL: VFIO support initialized
EAL: Using IOMMU type 1 (Type 1)
EAL: Ignore mapping IO port bar(1)
EAL: Ignore mapping IO port bar(4)
EAL: Probe PCI driver: net_ice (8086:1592) device: 0000:a1:00.0 (socket 1)
ice_load_pkg_type(): Active package is: 1.3.30.0, ICE OS Default Package (single VLAN mode)
TELEMETRY: No legacy callbacks, legacy socket not created
**** Jumbo Frames of 9618 enabled.

*** Copyright(c) <2010-2021>, Intel Corporation. All rights reserved.
*** Pktgen  created by: Keith Wiles -- >>> Powered by DPDK <<<

>>> Packet Burst 128, RX Desc 1024, TX Desc 2048, mbufs/port 16384, mbuf cache 2048
 Port: Name         IfIndex Alias        NUMA  PCI
    0: net_ice         0                   1   8086:1592/a1:00.0

=== port to lcore mapping table (# lcores 7) ===
   lcore:    2       3       4       5       6       7       8       9      10      11      12      13      14      15      16      17      18      19      20      21      22      23      24      25      26      27      28      29      Total
port   0: ( D: T) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 1: 0) ( 0: 0) ( 0: 1) ( 0: 0) ( 0: 0) ( 0: 0) = ( 1: 1)
Total   : ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 0: 0) ( 1: 0) ( 0: 0) ( 0: 1) ( 0: 0) ( 0: 0) ( 0: 0)
  Display and Timer on lcore 2, rx:tx counts per port/lcore

>>>> Configuring 1 ports, MBUF Size 9746, MBUF Cache Size 2048
Lcore:
   24, RX-Only
                RX_cnt( 1): (pid= 0:qid= 0)
   26, TX-Only
                TX_cnt( 1): (pid= 0:qid= 0)

Port :
    0, nb_lcores  2, private 0x555d4c620700, lcores: 24 26

Initialize Port 0 -- TxQ 1, RxQ 1
** Device Info (a1:00.0, if_index:0, flags 00000066) **
   min_rx_bufsize : 1024  max_rx_pktlen     : 9728  hash_key_size :   52
   max_rx_queues  :   64  max_tx_queues     :   64  max_vfs       :    0
   max_mac_addrs  :   64  max_hash_mac_addrs:    0  max_vmdq_pools:    0
   vmdq_queue_base:    0  vmdq_queue_num    :    0  vmdq_pool_base:    0
   nb_rx_queues   :    0  nb_tx_queues      :    0  speed_capa    : 000057f4

   flow_type_rss_offloads:0000000000007ffc  reta_size             :  512
   rx_offload_capa       :VLAN_STRIP IPV4_CKSUM UDP_CKSUM TCP_CKSUM QINQ_STRIP OUTER_IPV4_CKSUM VLAN_FILTER VLAN_EXTEND SCATTER TIMESTAMP KEEP_CRC
   tx_offload_capa       :VLAN_INSERT IPV4_CKSUM UDP_CKSUM TCP_CKSUM SCTP_CKSUM TCP_TSO OUTER_IPV4_CKSUM QINQ_INSERT MULTI_SEGS MBUF_FAST_FREE OUTER_UDP_CKSUM
   rx_queue_offload_capa :0000000000000000  tx_queue_offload_capa :0000000000010000
   dev_capa              :0000000000000000

  RX Conf:
     pthresh        :    8 hthresh          :    8 wthresh        :    0
     Free Thresh    :   32 Drop Enable      :    0 Deferred Start :    0
     offloads       :0000000000000000
  TX Conf:
     pthresh        :   32 hthresh          :    0 wthresh        :    0
     Free Thresh    :   32 RS Thresh        :   32 Deferred Start :    0
     offloads       :0000000000000000
  Rx: descriptor Limits
     nb_max         : 4096  nb_min          :   64  nb_align      :   32
     nb_seg_max     :    0  nb_mtu_seg_max  :    0
  Tx: descriptor Limits
     nb_max         : 4096  nb_min          :   64  nb_align      :   32
     nb_seg_max     :    0  nb_mtu_seg_max  :    0
  Rx: Port Config
     burst_size     :   32  ring_size       : 1024  nb_queues     :    1
  Tx: Port Config
     burst_size     :   32  ring_size       : 1024  nb_queues     :    1
  Switch Info: (null)
     domain_id      :65535  port_id         :    0

    Create: Default RX  0:0  - Memory used (MBUFs 16384 x (size 9746 + Hdr 128)) + 192 = 157985 KB, headroom 128
      Set RX queue stats mapping pid 0, q 0, lcore 24

    Create: Default TX  0:0  - Memory used (MBUFs 16384 x (size 9746 + Hdr 128)) + 192 = 157985 KB, headroom 128
    Create: Range TX    0:0  - Memory used (MBUFs 16384 x (size 9746 + Hdr 128)) + 192 = 157985 KB, headroom 128
    Create: Rate TX     0:0  - Memory used (MBUFs 16384 x (size 9746 + Hdr 128)) + 192 = 157985 KB, headroom 128
    Create: Sequence TX 0:0  - Memory used (MBUFs 16384 x (size 9746 + Hdr 128)) + 192 = 157985 KB, headroom 128
    Create: Special TX  0:0  - Memory used (MBUFs    64 x (size 9746 + Hdr 128)) + 192 =    618 KB, headroom 128

                                                                       Port memory used = 790543 KB
Src MAC b4:96:91:b0:0d:f8
 <Promiscuous mode Enabled>
                                                                      Total memory used = 790543 KB
ice_set_rx_function(): Using AVX2 Vector Rx (port 0).

=== Display processing on lcore 2
WARNING: Nothing to do on lcore 25: exiting
WARNING: Nothing to do on lcore 27: exiting
WARNING: Nothing to do on lcore 28: exiting
WARNING: Nothing to do on lcore 29: exiting
- Ports 0-0 of 1   <Main Page>  Copyright(c) <2010-2021>, Intel Corporation
  Flags:Port        : P------Sngl       :0
Link State          :           <--Down-->     ---Total Rate---
Pkts/s Rx           :                    0                    0
       Tx           :                    0                    0
MBits/s Rx/Tx       :                  0/0                  0/0
Pkts/s Rx Max       :                    0                    0
       Tx Max       :                    0                    0
Broadcast           :                    0
Multicast           :                    0
Sizes 64            :                    0
      65-127        :                    0
      128-255       :                    0
      256-511       :                    0
      512-1023      :                    0
      1024-1518     :                    0
Runts/Jumbos        :                  0/0
ARP/ICMP Pkts       :                  0/0
Errors Rx/Tx        :                  0/0
Total Rx Pkts       :                    0
      Tx Pkts       :                    0
      Rx/Tx MBs     :                  0/0
TCP Flags           :               .A....
TCP Seq/Ack         :  305419896/305419920
Pattern Type        :              abcd...
Tx Count/% Rate     :        Forever /100%
Pkt Size/Tx Burst   :            64 /  128
TTL/Port Src/Dest   :       64/ 1234/ 5678
Pkt Type:VLAN ID    :      IPv4 / TCP:0001
-- Pktgen 22.04.1 (D:    8086:1592/a1:00.0by DPDK  (pid:12889) ----------------
** Version: DPDK 21.11.0, Command Line Interface without timers
Pktgen:/>
Executing 'themes/black-yellow.theme'
t         theme default white white off
Pktgen:/> theme top.spinner cyan none bold
Pktgen:/> theme top.ports green none bold
Pktgen:/> theme top.page white none bold
Pktgen:/> theme top.copyright yellow none off
Pktgen:/> theme top.poweredby blue none bold
Pktgen:/> theme sep.dash blue none off
Pktgen:/> theme sep.text white none off
Pktgen:/> theme stats.port.label blue none bold
Pktgen:/> theme stats.port.flags blue none bold
Pktgen:/> theme stats.port.data blue none off
Pktgen:/> theme stats.port.status green none off
Pktgen:/> theme stats.port.linklbl green none bold
Pktgen:/> theme stats.port.link green none off
Pktgen:/> theme stats.port.ratelbl white none bold
Pktgen:/> theme stats.port.rate white none off
Pktgen:/> theme stats.port.sizelbl cyan none bold
Pktgen:/> theme stats.port.sizes cyan none off
Pktgen:/> theme stats.port.errlbl red none bold
Pktgen:/> theme stats.port.errors red none off
Pktgen:/> theme stats.port.totlbl blue none bold
Pktgen:/> theme stats.port.totals blue none off
Pktgen:/> theme stats.dyn.label blue none bold
Pktgen:/> theme stats.dyn.values green none off
Pktgen:/> theme stats.stat.label magenta none off
Pktgen:/> theme stats.stat.values white none off
Pktgen:/> theme stats.total.label red none bold
Pktgen:/> theme stats.total.data blue none bold
Pktgen:/> theme stats.colon blue none bold
Pktgen:/> theme stats.rate.count blue none bold
Pktgen:/> theme stats.bdf blue none off
Pktgen:/> theme stats.mac green none off
Pktgen:/> theme stats.ip cyan none off
Pktgen:/> theme pktgen.prompt green none off
Pktgen:/> cls
| Ports 0-0 of 1   <Main Page>  Copyright(c) <2010-2021>, Intel Corporation
  Flags:Port        : P------Sngl       :0
Link State          :       <UP-100000-FD>     ---Total Rate---
Pkts/s Rx           :                    0                    0
       Tx           :                    0                    0
MBits/s Rx/Tx       :                  0/0                  0/0
Pkts/s Rx Max       :                    7                    7
       Tx Max       :                    0                    0
Broadcast           :                    0
Multicast           :                   60
Sizes 64            :                    0
      65-127        :                  178
      128-255       :                   29
      256-511       :                   60
      512-1023      :                    0
      1024-1518     :                    0
Runts/Jumbos        :                  0/0
ARP/ICMP Pkts       :                  0/0
Errors Rx/Tx        :                  0/0
Total Rx Pkts       :                  267
      Tx Pkts       :                    0
      Rx/Tx MBs     :                  0/0
TCP Flags           :               .A....
TCP Seq/Ack         :  305419896/305419920
Pattern Type        :              abcd...
Tx Count/% Rate     :        Forever /100%
Pkt Size/Tx Burst   :            64 /  128
TTL/Port Src/Dest   :       64/ 1234/ 5678
Pkt Type:VLAN ID    :      IPv4 / TCP:0001

问题是:
1.我还应该做些什么来开始产生100 gbe流量?
1.我注意到,一旦驱动程序切换到dpdk的vfio-pci驱动程序,接口名称不再显示在ifconfig或dpdk驱动程序工具中,为什么?

  • 谢谢-谢谢
6kkfgxo0

6kkfgxo01#

有多个假设是不正确或不完整的,这导致了主要的疑问,如
1.要开始生成100 gbe流量,我还应该做些什么?
1.驱动程序被切换到dpdk的vfio-pci驱动程序,接口名称不再显示在ifconfig中
1.出现了pktgen提示符,但我不确定该在那里做什么。我分配mac地址吗?Ip地址吗?
1.文档中没有任何地方有一个例子。
因此,下面逐一解决这些问题

*无法使用Pktgen

  1. DPDK Pktgen文档可在here中找到。
    1.用默认值开始分组生成的最简单的方法是简单地通过start all
    1.要创建一系列的数据包,请参考stackoverflow-1或pktgen运行时选项
    1.由于提到MLX NIC是下一个使用的NIC,因此也请参阅StackOverflow中的link-1和like-2。
    注意:Pktgen文档和官方站点中几乎涵盖了入门所需的所有信息。2所以我强烈建议您花些时间去那里。3因此我不同意***文档中没有任何地方有示例***的说法。

*接口名称不再显示在ifconfig中

  1. DPDK库的整体意图是通过将设备与UIO (Userspace IO)绑定来绕过内核NIC驱动程序和堆栈层处理。
    1.在DPDK中,NIC大致分为物理NIC(带PCIe ID)和少数虚拟NIC(带netdev
    1.英特尔E810是一个物理网卡,可通过igb_uio或vfio在用户空间中为PF和VF(refer)绑定DPDK。
  2. DPDK文档请参阅设备配置和其他部分以获得完整概述。
    注意事项:
  • 大多数供应商NIC(包括英特尔)都允许通过将PCie配置空间暴露给用户空间来完成设备配置。所有设备配置和RX-TX都直接进行,无需任何中间或内核驱动程序干预。因此,将设备绑定到用户空间将从内核netdev示例中删除该设备
  • 如果目的是使用仍在内核下的NIC,请检查AF_PACKET和PCAP PMD。
  • Mellanox NIC CX-5、CX-6和CX-7使用更多端口|开关表示模式。硬件资源由内核驱动程序管理,因此每个端口都将存在一个关联的ethdev netlink示例。没有绑定到dpdk uio,而是通过端口表示符将对DMA缓冲区的访问重定向到用户空间

访问DPDK Linux入门指南和快速启动页面也将有助于解决查询。

*是否分配mac地址?Ip地址

对于DPDK应用程序和DPDK pktgen,简单的答案是否定的。一旦绕过内核和网络堆栈,就不再有本地IP终止或数据包转发的概念。Pktgen提示符已经有一组默认值,它使用这些值传输具有所需mac、vlan、IP和tcp的数据包|UDP有效载荷。

相关问题