]> rtime.felk.cvut.cz Git - can-benchmark.git/blobdiff - gw-tests/lib.sh
Prepare for testing under different loads
[can-benchmark.git] / gw-tests / lib.sh
index 43afe6de213898e5b6a095b4d06e9ffe18c67051..05b28d1c22842df4cfd44a28a5de3f519bd3c1fb 100644 (file)
@@ -11,8 +11,8 @@ error() {
 
 while [ $# -gt 0 ]; do
     case "$1" in
-       -P) OPT_PLOT_DISABLE=1; shift;;
-       -p) OPT_PLOT_ONLY=1; shift;;
+       -P|--no-plot) OPT_PLOT_DISABLE=1; shift;;
+       -p|--plot) OPT_PLOT_ONLY=1; shift;;
        -X|--no-x11-plot) OPT_NO_X11=1; shift;;
        -t) case "$2" in
                all|flood|50|oneatatime) OPT_TRAFFIC=$2;;
@@ -27,7 +27,7 @@ PATH=$PWD/../_compiled/bin/:$PATH
 sshgw() {
     local socket="$HOME/.ssh/cangw-connection"
 
-    if [[ ! -S $socket ]]; then
+    if [[ ! -S $socket ]] || ! ssh -x -a -S $socket root@192.168.2.3 true; then
        # Create master connection to speed up subsequenct command.
        # The ssh is put into background and the connection is closed
        # after 10 minutes)
@@ -43,7 +43,8 @@ cleanupgw() {
 _plot() {
     local testname=`basename $0 .sh`
 
-    plot_cmds | sed -e "/set title/ s/[\"']\(.*\)[\"']/\"\1\\\\n($kvers)\"/" > plot.gp
+    plot_cmds | sed -e "/set title/ s/[\"']\(.*\)[\"']/\"\1\\\\n(GW kernel $kvers, traffic $traffic)\"/" > plot.gp
+    if [[ ! -s plot.gp ]]; then return; fi
     if [ -z "$OPT_NO_X11" ]; then
        echo "set terminal x11 enhanced; $(< plot.gp)" | gnuplot -persist
     fi
@@ -68,7 +69,7 @@ echo_plot() {
 
 traffic_and_length() {
     local opts
-    case $OPT_TRAFFIC in
+    case $traffic in
        flood) opts='';;
        50)        opts="-p $((2*(44+$1*8)))";;
        oneatatime)        opts="-o";;
@@ -77,46 +78,66 @@ traffic_and_length() {
     echo $opts -l $1
 }
 
+start_load() {
+}
+
+kill_load() {
+}
+
+_measure() {
+    # Remove data from the last measurement
+    rm -rf *
+    touch .results
+    cat > plot.sh <<-EOF
+       #!/bin/bash
+       export kvers=$kvers
+       export hostkvers=$hostkvers
+       export traffic=$traffic
+       cd \$(dirname \$0)/$(dirname $script)
+       exec ./$(basename $script) --plot "\$@"
+       EOF
+    chmod +x plot.sh
+    # Set can interfaces up
+    sshgw 'for i in 0 1; do ip link show dev can$i|grep -q UP || ip link set can$i up type can bitrate 1000000; done'
+    # Delete all vcan interfaces
+    sshgw 'for dev in $(ip l|grep -o vcan[^:]\\+); do ip link del dev $dev; done'
+    # Reset priorities
+    sshgw 'if pid=`pidof irq/145-can0`; then chrt -p -f 50 $pid > /dev/null; fi'
+    sshgw 'if pid=`pidof irq/146-can1`; then chrt -p -f 50 $pid > /dev/null; fi'
+    sshgw 'if pid=`pidof sirq-net-rx/0`; then chrt -p -f 49 $pid > /dev/null; fi'
+    sshgw 'if pid=`pidof sirq-net-tx/0`; then chrt -p -f 49 $pid > /dev/null; fi'
+    # Set the length of qdisc queue to avoid ENOBUFS errors
+    ifconfig can0 txqueuelen 200
+    cleanupgw
+
+    prepare
+    start_load
+    main
+    kill_load
+}
+
+
 _run() {
-    if [[ ! "$OPT_PLOT_ONLY" ]]
-    then kernel_versions=$(sshgw uname -r)
-    else kernel_versions=$(ls results/by-kern)
-    fi
     if [[ $OPT_TRAFFIC = all ]]
     then traffics="flood 50 oneatatime"
-    else traffics=$OPT_TRAFFIC
+    else traffics=${traffic:-$OPT_TRAFFIC}
     fi
-    for OPT_TRAFFIC in $traffics; do
-    for kvers in $kernel_versions; do
-       dir="results/host-$(uname -r)/$kvers/$OPT_TRAFFIC/$(basename $0 .sh)"
+    hostkvers=${hostkvers:-host-$(uname -r)}
+    kvers=${kvers:-$(sshgw uname -r)}
+    test=$(basename $0 .sh)
+    for traffic in $traffics; do
+       dir="results/$hostkvers/$kvers/$traffic/$test"
        mkdir -p $dir
-       script=$PWD/$0
+       script=$(echo $dir | sed -e 's/[^/]*/../g')/${test}.sh
        cd $dir
-       echo "Working directory: $dir"
        if [[ ! "$OPT_PLOT_ONLY" ]]; then
-           # Remove data from the last measurement
-           rm -rf *
-           # Set can interfaces up
-           sshgw 'for i in 0 1; do ip link show dev can$i|grep -q UP || ip link set can$i up type can bitrate 1000000; done'
-           # Delete all vcan interfaces
-           sshgw 'for dev in $(ip l|grep -o vcan[^:]\\+); do ip link del dev $dev; done'
-           # Reset priorities
-           sshgw 'chrt -p -f 50 `pidof irq/145-can0` > /dev/null || :'
-           sshgw 'chrt -p -f 50 `pidof irq/146-can1` > /dev/null || :'
-           sshgw 'chrt -p -f 49 `pidof sirq-net-rx/0` > /dev/null || :'
-           sshgw 'chrt -p -f 49 `pidof sirq-net-tx/0` > /dev/null || :'
-           # Set the length of qdisc queue to avoid ENOBUFS errors
-           ifconfig can0 txqueuelen 200
-           cleanupgw
-
-           main
-           cp $script .
+           echo "Working directory: $dir"
+           _measure
        fi
        if [[ ! "$OPT_PLOT_DISABLE" ]]; then
            _plot
        fi
-       cd -
-    done
+       cd - > /dev/null
     done
 }