EAL Commandline Options

Pktgen, like other DPDK applications splits commandline arguments into arguments for the DPDK Environmental Abstraction Layer (EAL) and arguments for the application itself. The two sets of arguments are separated using the standard convention of --:

Pktgen executable is located at ./app/app/${RTE_TARGET}/pktgen

pktgen -l 0-4 -n 3 – -P -m “[1:3].0, [2:4].1

The usual EAL commandline usage for pktgen is:

pktgen -c COREMASK -n NUM \
             [-m NB] \
             [-r NUM] \
             [-b <domain:bus:devid.func>] \
             [--proc-type primary|secondary|auto] -- [pktgen options]

The full list of EAL arguments are:

EAL options:
  -c COREMASK         : A hexadecimal bitmask of cores to run on
  -n NUM              : Number of memory channels
  -v                  : Display version information on startup
  -d LIB.so           : Add driver (can be used multiple times)
  -m MB               : Memory to allocate (see also --socket-mem)
  -r NUM              : Force number of memory ranks (don't detect)
  --xen-dom0          : Support application running on Xen Domain0 without
  --syslog            : Set syslog facility
  --socket-mem        : Memory to allocate on specific
                        sockets (use comma separated values)
  --huge-dir          : Directory where hugetlbfs is mounted
  --proc-type         : Type of this process
  --file-prefix       : Prefix for hugepage filenames
  --pci-blocklist, -b : Add a PCI device in block list.
                        Prevent EAL from using this PCI device. The argument
                        format is <domain:bus:devid.func>.
  --pci-allowlist, -w : Add a PCI device in allow list.
                        Only use the specified PCI devices. The argument
                        format is <[domain:]bus:devid.func>. This option
                        can be present several times (once per device).
                        NOTE: PCI allowlist cannot be used with -b option
  --vdev              : Add a virtual device.
                        The argument format is <driver><id>[,key=val,...]
                        (ex: --vdev=eth_pcap0,iface=eth2).
  --vmware-tsc-map    : Use VMware TSC map instead of native RDTSC
  --base-virtaddr     : Specify base virtual address
  --vfio-intr         : Specify desired interrupt mode for VFIO
  --create-uio-dev    : Create /dev/uioX (usually done by hotplug)

EAL options for DEBUG use only:
  --no-huge           : Use malloc instead of hugetlbfs
  --no-pci            : Disable pci
  --no-hpet           : Disable hpet
  --no-shconf         : No shared config (mmap'd files)

The -c COREMASK and -n NUM arguments are required. The other arguments are optional.

Pktgen requires 2 logical cores (lcore) in order to run. The first lcore, 0, is used for the pktgen commandline, for timers and for displaying the runtime metrics text on the terminal. The additional lcores 1-n are used to do the packet receive and transmits along with anything else related to packets.

You do not need to start at the actual system lcore 0. The application will use the first lcore in the coremask bitmap.

A more typical commandline to start a pktgen instance would be:

pktgen -l 0-4 -n 3 --proc-type auto --socket-mem 256,256
             -b 0000:03:00.0 -b 0000:03:00.1 \
              --file-prefix pg \
             -- -P -m "[1:3].0, [2:4].1

The coremask -c 0x1f (0b11111) indicates 5 lcores are used, as the first lcore is used by Pktgen for display and timers.

The --socket-mem 256,256 DPDK command will allocate 256M from each CPU (two in this case).

The Pktgen Commandline Options are shown in the next section.