29 Apr, 2016

1 commit


23 May, 2015

5 commits

  • Add the pktgen samples script pktgen_sample02_multiqueue.sh that
    demonstrates generating packets on multiqueue NICs.

    Specifically notice the options "-t" that specifies how many
    kernel threads to activate. Also notice the flag QUEUE_MAP_CPU,
    which cause the SKB TX queue to be mapped to the CPU running the
    kernel thread. For best scalability people are also encourage to
    map NIC IRQ /proc/irq/*/smp_affinity to CPU number.

    Usage example with "-t" 4 threads and help:
    ./pktgen_sample02_multiqueue.sh -i eth4 -m 00:1B:21:3C:9D:F8 -t 4

    Usage: ./pktgen_sample02_multiqueue.sh [-vx] -i ethX
    -i : ($DEV) output interface/device (required)
    -s : ($PKT_SIZE) packet size
    -d : ($DEST_IP) destination IP
    -m : ($DST_MAC) destination MAC-addr
    -t : ($THREADS) threads to start
    -c : ($SKB_CLONE) SKB clones send before alloc new SKB
    -b : ($BURST) HW level bursting of SKBs
    -v : ($VERBOSE) verbose
    -x : ($DEBUG) debug

    Removing pktgen.conf-2-1 and pktgen.conf-2-2 as these examples
    should be covered now.

    Signed-off-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Jesper Dangaard Brouer
     
  • Add the first basic pktgen samples script pktgen_sample01_simple.sh,
    which demonstrates the a simple use of the helper functions.
    Removing pktgen.conf-1-1 as that example should be covered now.

    The naming scheme pktgen_sampleNN, where NN is a number, should encourage
    reading the samples in a specific order.

    Script cause pktgen sending with a single thread and single interface,
    and introduce flow variation via random UDP source port.

    Usage example and help:
    ./pktgen_sample01_simple.sh -i eth4 -m 00:1B:21:3C:9D:F8 -d 192.168.8.2

    Usage: ./pktgen_sample01_simple.sh [-vx] -i ethX
    -i : ($DEV) output interface/device (required)
    -s : ($PKT_SIZE) packet size
    -d : ($DEST_IP) destination IP
    -m : ($DST_MAC) destination MAC-addr
    -c : ($SKB_CLONE) SKB clones send before alloc new SKB
    -v : ($VERBOSE) verbose
    -x : ($DEBUG) debug

    Signed-off-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Jesper Dangaard Brouer
     
  • The pktgen.txt documentation still claimed that adding same device to
    multiple threads were not supported, but it have been since 2008 via
    commit e6fce5b916cd7 ("pktgen: multiqueue etc.").

    Document this and describe the naming scheme dev@X, as the procfile name
    still need to be unique.

    Fixes: e6fce5b916cd7 ("pktgen: multiqueue etc.")
    Signed-off-by: Jesper Dangaard Brouer
    Acked-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Jesper Dangaard Brouer
     
  • The pktgen.txt documentation over available config options were not complete.
    Making the list complete by adding the following.

    Pgcontrol commands:
    reset

    Device commands:
    burst
    queue_map_min
    queue_map_max
    skb_priority
    tos
    traffic_class
    node
    spi
    dst6_max
    dst6_min
    vlan_cfi
    vlan_id
    vlan_p
    svlan_cfi
    svlan_id
    svlan_p

    Signed-off-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Jesper Dangaard Brouer
     
  • And cleanup some whitespaces in pktgen.txt.

    Signed-off-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Jesper Dangaard Brouer
     

10 May, 2015

2 commits

  • Introduce xmit_mode 'netif_receive' for pktgen which generates the
    packets using familiar pktgen commands, but feeds them into
    netif_receive_skb() instead of ndo_start_xmit().

    Default mode is called 'start_xmit'.

    It is designed to test netif_receive_skb and ingress qdisc
    performace only. Make sure to understand how it works before
    using it for other rx benchmarking.

    Sample script 'pktgen.sh':
    \#!/bin/bash
    function pgset() {
    local result

    echo $1 > $PGDEV

    result=`cat $PGDEV | fgrep "Result: OK:"`
    if [ "$result" = "" ]; then
    cat $PGDEV | fgrep Result:
    fi
    }

    [ -z "$1" ] && echo "Usage: $0 DEV" && exit 1
    ETH=$1

    PGDEV=/proc/net/pktgen/kpktgend_0
    pgset "rem_device_all"
    pgset "add_device $ETH"

    PGDEV=/proc/net/pktgen/$ETH
    pgset "xmit_mode netif_receive"
    pgset "pkt_size 60"
    pgset "dst 198.18.0.1"
    pgset "dst_mac 90:e2:ba:ff:ff:ff"
    pgset "count 10000000"
    pgset "burst 32"

    PGDEV=/proc/net/pktgen/pgctrl
    echo "Running... ctrl^C to stop"
    pgset "start"
    echo "Done"
    cat /proc/net/pktgen/$ETH

    Usage:
    $ sudo ./pktgen.sh eth2
    ...
    Result: OK: 232376(c232372+d3) usec, 10000000 (60byte,0frags)
    43033682pps 20656Mb/sec (20656167360bps) errors: 10000000

    Raw netif_receive_skb speed should be ~43 million packet
    per second on 3.7Ghz x86 and 'perf report' should look like:
    37.69% kpktgend_0 [kernel.vmlinux] [k] __netif_receive_skb_core
    25.81% kpktgend_0 [kernel.vmlinux] [k] kfree_skb
    7.22% kpktgend_0 [kernel.vmlinux] [k] ip_rcv
    5.68% kpktgend_0 [pktgen] [k] pktgen_thread_worker

    If fib_table_lookup is seen on top, it means skb was processed
    by the stack. To benchmark netif_receive_skb only make sure
    that 'dst_mac' of your pktgen script is different from
    receiving device mac and it will be dropped by ip_rcv

    Signed-off-by: Alexei Starovoitov
    Signed-off-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Alexei Starovoitov
     
  • Allow flag NO_TIMESTAMP to turn timestamping on again, like other flags,
    with a negation of the flag like !NO_TIMESTAMP.

    Also document the option flag NO_TIMESTAMP.

    Fixes: afb84b626184 ("pktgen: add flag NO_TIMESTAMP to disable timestamping")
    Signed-off-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Jesper Dangaard Brouer
     

24 Feb, 2015

4 commits


02 Oct, 2014

1 commit

  • This patch demonstrates the effect of delaying update of HW tailptr.
    (based on earlier patch by Jesper)

    burst=1 is the default. It sends one packet with xmit_more=false
    burst=2 sends one packet with xmit_more=true and
    2nd copy of the same packet with xmit_more=false
    burst=3 sends two copies of the same packet with xmit_more=true and
    3rd copy with xmit_more=false

    Performance with ixgbe (usec 30):
    burst=1 tx:9.2 Mpps
    burst=2 tx:13.5 Mpps
    burst=3 tx:14.5 Mpps full 10G line rate

    Signed-off-by: Alexei Starovoitov
    Signed-off-by: Eric Dumazet
    Acked-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Alexei Starovoitov
     

02 Jul, 2014

1 commit

  • Using pktgen I'm seeing the ixgbe driver "push-back", due TX ring
    running full. Thus, the TX ring is artificially limiting pktgen.
    (Diagnose via "ethtool -S", look for "tx_restart_queue" or "tx_busy"
    counters.)

    Using ixgbe, the real reason behind the TX ring running full, is due
    to TX ring not being cleaned up fast enough. The ixgbe driver combines
    TX+RX ring cleanups, and the cleanup interval is affected by the
    ethtool --coalesce setting of parameter "rx-usecs".

    Do not increase the default NIC TX ring buffer or default cleanup
    interval. Instead simply document that pktgen needs special NIC
    tuning for maximum packet per sec performance.

    Performance results with pktgen with clone_skb=100000.
    TX ring size 512 (default), adjusting "rx-usecs":
    (Single CPU performance, E5-2630, ixgbe)
    - 3935002 pps - rx-usecs: 1 (irqs: 9346)
    - 5132350 pps - rx-usecs: 10 (irqs: 99157)
    - 5375111 pps - rx-usecs: 20 (irqs: 50154)
    - 5454050 pps - rx-usecs: 30 (irqs: 33872)
    - 5496320 pps - rx-usecs: 40 (irqs: 26197)
    - 5502510 pps - rx-usecs: 50 (irqs: 21527)

    TX ring size adjusting (ethtool -G), "rx-usecs==1" (default):
    - 3935002 pps - tx-size: 512
    - 5354401 pps - tx-size: 768
    - 5356847 pps - tx-size: 1024
    - 5327595 pps - tx-size: 1536
    - 5356779 pps - tx-size: 2048
    - 5353438 pps - tx-size: 4096

    Notice after commit 6f25cd47d (pktgen: fix xmit test for BQL enabled
    devices) pktgen uses netif_xmit_frozen_or_drv_stopped() and ignores
    the BQL "stack" pause (QUEUE_STATE_STACK_XOFF) flag. This allow us to put
    more pressure on the TX ring buffers.

    It is the ixgbe_maybe_stop_tx() call that stops the transmits, and
    pktgen respecting this in the call to netif_xmit_frozen_or_drv_stopped(txq).

    Signed-off-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Jesper Dangaard Brouer
     

25 Feb, 2014

1 commit


03 Jan, 2014

1 commit


12 Jun, 2010

1 commit

  • This patch increases the granularity of the rate generated by pktgen.
    The previous version of pktgen uses micro seconds (udelay) resolution when it
    was delayed causing gaps in the rates. It is changed to nanosecond (ndelay).
    Now any rate is possible.

    Also it allows to set, the desired rate in Mb/s or packets per second.

    The documentation has been updated.

    Signed-off-by: Daniel Turull
    Signed-off-by: Robert Olsson
    Signed-off-by: David S. Miller

    Daniel Turull
     

05 Oct, 2009

1 commit

  • It is not currently possible to instruct pktgen to use one selected tx queue.

    When Robert added multiqueue support in commit 45b270f8, he added
    an interval (queue_map_min, queue_map_max), and his code doesnt take
    into account the case of min = max, to select one tx queue exactly.

    I suspect a high performance setup on a eight txqueue device wants
    to use exactly eight cpus, and assign one tx queue to each sender.

    This patchs makes pktgen select the right tx queue, not the first one.

    Also updates Documentation to reflect Robert changes.

    Signed-off-by: Eric Dumazet
    Signed-off-by: Robert Olsson
    Signed-off-by: David S. Miller

    Eric Dumazet
     

30 Nov, 2006

2 commits


04 Oct, 2006

3 commits


29 Sep, 2006

1 commit


01 Jul, 2006

1 commit


23 Mar, 2006

1 commit


17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds