*** empty log message ***
authorBart De Schuymer <bdschuym@pandora.be>
Mon, 24 Jan 2005 20:29:43 +0000 (20:29 +0000)
committerBart De Schuymer <bdschuym@pandora.be>
Mon, 24 Jan 2005 20:29:43 +0000 (20:29 +0000)
examples/perf_test/perf_test [new file with mode: 0755]

diff --git a/examples/perf_test/perf_test b/examples/perf_test/perf_test
new file mode 100755 (executable)
index 0000000..7d1a7d3
--- /dev/null
@@ -0,0 +1,256 @@
+#!/bin/bash
+#
+# This script can be used to compare the speed of
+# the different methods for adding rules in ebtables
+# chains.
+#
+# Apart from the standard method of adding rules with
+# the ebtables tool, rules can be added (faster) with
+# ebtablesd running in the background and accepting
+# commands through a pipe. The pipe can be written to
+# with the standard shell tools. The only restriction is
+# that spaces are only used to separate options and
+# commands, i.e. spaces are not allowed in strings, even
+# if they are between "". E.g.
+# ebtablesu -A --log-prefix "a space"
+# is not allowed, however
+# ebtablesu -A --log-prefix "a_space"
+# is allowed.
+#
+# Author: Bart De Schuymer
+#
+
+export PIPE=/tmp/ebtables-v2.0.7/ebtablesd_pipe
+export EBTABLES=/usr/sbin/ebtables
+export EBTABLESD=/usr/sbin/ebtablesd
+export EBTABLESU=/usr/sbin/ebtablesu
+
+if [[ $# = 0 ]]
+then
+
+rm -f iets niets iets.out niets.out
+MAXLIMIT=10000
+for ((LIMIT=10; LIMIT <= MAXLIMIT; LIMIT *= 10)) do
+  killall ebtablesd 2>/dev/null
+  $EBTABLES --init-table
+  export LIMIT
+  time $0 1
+  echo "added" $LIMIT "rules with echo"
+  $EBTABLES --atomic-file iets --atomic-save
+  $EBTABLES -F
+  time $0 2
+  echo "added" $LIMIT "rules with ebtables"
+  $EBTABLES --atomic-file niets --atomic-save
+  $EBTABLES --atomic-file iets -L > iets.out
+  $EBTABLES --atomic-file niets -L > niets.out
+  diff -purN iets.out niets.out
+  rm -f niets niets.out
+  killall ebtablesd 2>/dev/null
+  $EBTABLES -F
+  time $0 3
+  echo "added" $LIMIT "rules with ebtablesu"
+  $EBTABLES --atomic-file niets --atomic-save
+  $EBTABLES --atomic-file iets -L > iets.out
+  $EBTABLES --atomic-file niets -L > niets.out
+  diff -purN iets.out niets.out
+  rm -f niets niets.out
+  time $0 4
+  echo "added" $LIMIT "rules with atomic-file"
+  $EBTABLES --atomic-file niets --atomic-save
+  $EBTABLES --atomic-file niets -L > niets.out
+  diff -purN iets.out niets.out
+  rm -f niets niets.out
+  time $0 5
+  echo "added" $LIMIT "rules with one atomic-commit"
+  $EBTABLES --atomic-file niets --atomic-save
+  $EBTABLES --atomic-file niets -L > niets.out
+  diff -purN iets.out niets.out
+  rm -f iets iets.out niets niets.out
+done
+
+elif [[ $1 = "1" ]]
+then
+
+$EBTABLESD &
+pid=`jobs -p '$EBTABLESD'`
+sleep 1
+$EBTABLESU open filter
+# Add rules with ebtablesd
+echo "$EBTABLESU -F" >>$PIPE
+for ((a=1; a <= LIMIT; a++)) do
+  echo "$EBTABLESU -A FORWARD" >>$PIPE
+done
+$EBTABLESU commit filter
+$EBTABLESU quit
+wait $pid
+
+elif [[ $1 = "2" ]]
+then
+
+# Add rules with ebtables
+for ((a=1; a <= LIMIT; a++))
+do
+  $EBTABLES -A FORWARD
+done
+
+elif [[ $1 = "3" ]]
+then
+
+$EBTABLESD &
+pid=`jobs -p '$EBTABLESD'`
+sleep 1
+$EBTABLESU open filter
+# Add rules with ebtablesu
+for ((a=1; a <= LIMIT; a++))
+do
+  $EBTABLESU -A FORWARD
+done
+$EBTABLESU commit filter
+$EBTABLESU quit
+wait $pid
+
+elif [[ $1 = "4" ]]
+then
+
+# Add rules with ebtables --atomic-file
+$EBTABLES --atomic-file niets --atomic-init
+for ((a=1; a <= LIMIT; a++))
+do
+  $EBTABLES --atomic-file niets -A FORWARD
+done
+$EBTABLES --atomic-file niets --atomic-commit
+
+else
+
+# Add rules taken from a binary file containing a saved table
+$EBTABLES --atomic-file iets --atomic-commit
+
+fi
+
+
+# From the results below, we can conclude the following about
+# table constructions when speed is an issue.
+# For first-time fast construction of tables, it's best to use the
+#   echo + ebtablesd method. If the echo method is unwanted, it
+#   is best to use the ebtablesu + ebtablesd method.
+#   The echo method is much faster because echo is a bash
+#   built-in command.
+#   Perhaps intialize the kernel tables to empty chains with
+#   policy DROP before constructing the table in userspace.
+# For construction of tables that were constructed earlier, it
+#   is best to save those constructed tables to a binary file
+#   and then use --atomic-commit to get the table in the kernel
+#   (this is lightning fast compared with the other methods).
+#
+# System specs:
+# processor       : 0
+# vendor_id       : AuthenticAMD
+# cpu family      : 6
+# model           : 4
+# model name      : AMD Athlon(tm) processor
+# stepping        : 4
+# cpu MHz         : 1000.592
+# cache size      : 256 KB
+# MemTotal        : 515780 kB
+#
+####10 rules####
+#
+# real    0m0.078s
+# user    0m0.030s
+# sys     0m0.045s
+# added 10 rules with echo
+#
+# real    0m0.098s
+# user    0m0.031s
+# sys     0m0.063s
+# added 10 rules with ebtables
+#
+# real    0m0.275s
+# user    0m0.083s
+# sys     0m0.188s
+# added 10 rules with ebtablesu
+#
+# real    0m0.279s
+# user    0m0.082s
+# sys     0m0.192s
+# added 10 rules with atomic-file
+#
+# real    0m0.017s
+# user    0m0.009s
+# sys     0m0.008s
+# added 10 rules with one atomic-commit
+#
+# real    0m0.095s
+# user    0m0.050s
+# sys     0m0.043s
+# added 100 rules with echo
+#
+# real    0m0.936s
+# user    0m0.315s
+# sys     0m0.587s
+# added 100 rules with ebtables
+#
+# real    0m1.967s
+# user    0m0.449s
+# sys     0m1.479s
+# added 100 rules with ebtablesu
+#
+# real    0m2.472s
+# user    0m0.745s
+# sys     0m1.660s
+# added 100 rules with atomic-file
+#
+# real    0m0.018s
+# user    0m0.006s
+# sys     0m0.012s
+# added 100 rules with one atomic-commit
+#
+# real    0m0.740s
+# user    0m0.461s
+# sys     0m0.265s
+# added 1000 rules with echo
+#
+# real    0m12.471s
+# user    0m4.423s
+# sys     0m7.828s
+# added 1000 rules with ebtables
+#
+# real    0m17.715s
+# user    0m6.814s
+# sys     0m10.604s
+# added 1000 rules with ebtablesu
+#
+# real    0m28.176s
+# user    0m8.875s
+# sys     0m18.704s
+# added 1000 rules with atomic-file
+#
+# real    0m0.025s
+# user    0m0.015s
+# sys     0m0.010s
+# added 1000 rules with one atomic-commit
+#
+# real    1m11.474s
+# user    1m9.662s
+# sys     0m1.035s
+# added 10000 rules with echo
+#
+# real    10m9.418s
+# user    4m19.163s
+# sys     5m37.548s
+# added 10000 rules with ebtables
+#
+# real    2m32.119s
+# user    1m38.085s
+# sys     0m52.298s
+# added 10000 rules with ebtablesu
+#
+# real    13m23.396s
+# user    5m29.770s
+# sys     6m44.598s
+# added 10000 rules with atomic-file
+#
+# real    0m0.319s
+# user    0m0.037s
+# sys     0m0.057s
+# added 10000 rules with one atomic-commit