From: Jesper Dangaard Brouer <brouer@redhat.com>
To: netdev@vger.kernel.org
Cc: Jesper Dangaard Brouer <brouer@redhat.com>,
Daniel Borkmann <borkmann@iogearbox.net>,
Alexei Starovoitov <ast@plumgrid.com>,
Robert Olsson <robert@herjulf.se>,
Ben Greear <greearb@candelatech.com>,
Cong Wang <cwang@twopensource.com>
Subject: [net-next PATCH v3 10/10] pktgen: add benchmark script pktgen_bench_xmit_mode_netif_receive.sh
Date: Thu, 21 May 2015 12:18:29 +0200 [thread overview]
Message-ID: <20150521101822.15148.6918.stgit@ivy> (raw)
In-Reply-To: <20150521101501.15148.10609.stgit@ivy>
This script pktgen_bench_xmit_mode_netif_receive.sh is a benchmark
script, which can be used for benchmarking part of the network stack.
This can be used for performance improving or catching regression in
that area.
The script is developed for benchmarking ingress qdisc path, original
idea by Alexei Starovoitov. This script don't really need any
hardware. This is achieved via the recently introduced stack inject
feature "xmit_mode netif_receive". See commit 62f64aed622b6 ("pktgen:
introduce xmit_mode '<start_xmit|netif_receive>'").
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
.../pktgen/pktgen_bench_xmit_mode_netif_receive.sh | 86 ++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
create mode 100755 samples/pktgen/pktgen_bench_xmit_mode_netif_receive.sh
diff --git a/samples/pktgen/pktgen_bench_xmit_mode_netif_receive.sh b/samples/pktgen/pktgen_bench_xmit_mode_netif_receive.sh
new file mode 100755
index 0000000..cb15903
--- /dev/null
+++ b/samples/pktgen/pktgen_bench_xmit_mode_netif_receive.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+#
+# Benchmark script:
+# - developed for benchmarking ingress qdisc path
+#
+# Script for injecting packets into RX path of the stack with pktgen
+# "xmit_mode netif_receive". With an invalid dst_mac this will only
+# measure the ingress code path as packets gets dropped in ip_rcv().
+#
+# This script don't really need any hardware. It benchmarks software
+# RX path just after NIC driver level. With bursting is also
+# "removes" the SKB alloc/free overhead.
+#
+# Setup scenarios for measuring ingress qdisc (with invalid dst_mac):
+# ------------------------------------------------------------------
+# (1) no ingress (uses static_key_false(&ingress_needed))
+#
+# (2) ingress on other dev (change ingress_needed and calls
+# handle_ing() but exit early)
+#
+# config: tc qdisc add dev $SOMEDEV handle ffff: ingress
+#
+# (3) ingress on this dev, handle_ing() -> tc_classify()
+#
+# config: tc qdisc add dev $DEV handle ffff: ingress
+#
+# (4) ingress on this dev + drop at u32 classifier/action.
+#
+basedir=`dirname $0`
+source ${basedir}/functions.sh
+root_check_run_with_sudo "$@"
+
+# Parameter parsing via include
+source ${basedir}/parameters.sh
+# Using invalid DST_MAC will cause the packets to get dropped in
+# ip_rcv() which is part of the test
+[ -z "$DEST_IP" ] && DEST_IP="198.18.0.42"
+[ -z "$DST_MAC" ] && DST_MAC="90:e2:ba:ff:ff:ff"
+[ -z "$BURST" ] && BURST=1024
+
+# Base Config
+DELAY="0" # Zero means max speed
+COUNT="10000000" # Zero means indefinitely
+
+# General cleanup everything since last run
+pg_ctrl "reset"
+
+# Threads are specified with parameter -t value in $THREADS
+for ((thread = 0; thread < $THREADS; thread++)); do
+ # The device name is extended with @name, using thread number to
+ # make then unique, but any name will do.
+ dev=${DEV}@${thread}
+
+ # Add remove all other devices and add_device $dev to thread
+ pg_thread $thread "rem_device_all"
+ pg_thread $thread "add_device" $dev
+
+ # Base config of dev
+ pg_set $dev "flag QUEUE_MAP_CPU"
+ pg_set $dev "count $COUNT"
+ pg_set $dev "pkt_size $PKT_SIZE"
+ pg_set $dev "delay $DELAY"
+ pg_set $dev "flag NO_TIMESTAMP"
+
+ # Destination
+ pg_set $dev "dst_mac $DST_MAC"
+ pg_set $dev "dst $DEST_IP"
+
+ # Inject packet into RX path of stack
+ pg_set $dev "xmit_mode netif_receive"
+
+ # Burst allow us to avoid measuring SKB alloc/free overhead
+ pg_set $dev "burst $BURST"
+done
+
+# start_run
+echo "Running... ctrl^C to stop" >&2
+pg_ctrl "start"
+echo "Done" >&2
+
+# Print results
+for ((thread = 0; thread < $THREADS; thread++)); do
+ dev=${DEV}@${thread}
+ echo "Device: $dev"
+ cat /proc/net/pktgen/$dev | grep -A2 "Result:"
+done
next prev parent reply other threads:[~2015-05-21 10:19 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-21 10:15 [net-next PATCH v3 00/10] pktgen: cleanups and introducing new samples/pktgen scripts Jesper Dangaard Brouer
2015-05-21 10:15 ` [net-next PATCH v3 01/10] pktgen: remove obsolete "max_before_softirq" from pktgen doc Jesper Dangaard Brouer
2015-05-21 10:16 ` [net-next PATCH v3 02/10] pktgen: adjust spacing in proc file interface output Jesper Dangaard Brouer
2015-05-21 10:16 ` [net-next PATCH v3 03/10] pktgen: doc were missing several config options Jesper Dangaard Brouer
2015-05-21 10:16 ` [net-next PATCH v3 04/10] pktgen: document ability to add same device to several threads Jesper Dangaard Brouer
2015-05-21 10:16 ` [net-next PATCH v3 05/10] pktgen: make /proc/net/pktgen/pgctrl report fail on invalid input Jesper Dangaard Brouer
2015-05-21 10:17 ` [net-next PATCH v3 06/10] pktgen: new pktgen helper functions for samples scripts Jesper Dangaard Brouer
2015-05-21 10:17 ` [net-next PATCH v3 07/10] pktgen: add sample script pktgen_sample01_simple.sh Jesper Dangaard Brouer
2015-05-21 10:17 ` [net-next PATCH v3 08/10] pktgen: add sample script pktgen_sample02_multiqueue.sh Jesper Dangaard Brouer
2015-05-21 10:18 ` [net-next PATCH v3 09/10] pktgen: add sample script pktgen_sample03_burst_single_flow.sh Jesper Dangaard Brouer
2015-05-21 10:18 ` Jesper Dangaard Brouer [this message]
2015-05-22 3:31 ` [net-next PATCH v3 00/10] pktgen: cleanups and introducing new samples/pktgen scripts David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150521101822.15148.6918.stgit@ivy \
--to=brouer@redhat.com \
--cc=ast@plumgrid.com \
--cc=borkmann@iogearbox.net \
--cc=cwang@twopensource.com \
--cc=greearb@candelatech.com \
--cc=netdev@vger.kernel.org \
--cc=robert@herjulf.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).