summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBart De Schuymer <bdschuym@pandora.be>2005-01-24 20:29:43 +0000
committerBart De Schuymer <bdschuym@pandora.be>2005-01-24 20:29:43 +0000
commit2bd42cfbaee58b9d383f83dd616058060100b8d9 (patch)
tree06d760deea6f84f7ecbb95436de853fee4ce0baa
parentd2ced8273cf812ca2ac61f407e6992e63bc1821d (diff)
*** empty log message ***
-rwxr-xr-xexamples/perf_test/perf_test256
1 files changed, 256 insertions, 0 deletions
diff --git a/examples/perf_test/perf_test b/examples/perf_test/perf_test
new file mode 100755
index 0000000..7d1a7d3
--- /dev/null
+++ b/examples/perf_test/perf_test
@@ -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