#!/bin/bash # Transactions per second for large lists read/write plotter using gnuplot # WORK IN PROGRESS . ./lib.sh max=2000 # Nr of db entries step=200 reqs=500 cfg=$dir/plot-conf.xml fyang=$dir/plot.yang fconfig=$dir/config # For memcheck # clixon_netconf="valgrind --leak-check=full --show-leak-kinds=all clixon_netconf" # clixon_netconf="valgrind --tool=callgrind clixon_netconf clixon_netconf=clixon_netconf cat < $fyang module ietf-ip{ container x { list y { key "a"; leaf a { type string; } leaf b { type string; } } leaf-list c { type string; } } } EOF cat < $cfg $cfg $fyang ietf-ip /usr/local/var/routing/routing.sock /usr/local/var/routing/routing.pidfile false /usr/local/var/routing EOF run(){ nr=$1 # Number of entries in DB reqs=$2 mode=$3 echo -n "replace" > $fconfig for (( i=0; i<$nr; i++ )); do case $mode in readlist|writelist|restreadlist|restwritelist) echo -n "$i$i" >> $fconfig ;; writeleaflist) echo -n "$i" >> $fconfig ;; esac done echo "]]>]]>" >> $fconfig expecteof_file "$clixon_netconf -qf $cfg -y $fyang" "$fconfig" "^]]>]]>$" case $mode in readlist) time -p for (( i=0; i<$reqs; i++ )); do rnd=$(( ( RANDOM % $nr ) )) echo "]]>]]>" done | $clixon_netconf -qf $cfg -y $fyang > /dev/null ;; writelist) time -p for (( i=0; i<$reqs; i++ )); do rnd=$(( ( RANDOM % $nr ) )) echo "$rnd$rnd]]>]]>" done | $clixon_netconf -qf $cfg -y $fyang > /dev/null ;; restreadlist) time -p for (( i=0; i<$reqs; i++ )); do rnd=$(( ( RANDOM % $nr ) )) curl -sSG http://localhost/restconf/data/x/y=$rnd,$rnd > /dev/null done ;; writeleaflist) time -p for (( i=0; i<$reqs; i++ )); do rnd=$(( ( RANDOM % $nr ) )) echo "$rnd]]>]]>" done | $clixon_netconf -qf $cfg -y $fyang > /dev/null ;; esac expecteof "$clixon_netconf -qf $cfg -y $fyang" "]]>]]>" "^]]>]]>$" } step(){ i=$1 mode=$2 echo -n "" > $fconfig t=$(TEST=%e run $i $reqs $mode 2>&1 | awk '/real/ {print $2}') #TEST=%e run $i $reqs $mode 2>&1 # t is time in secs of $reqs -> transactions per second. $reqs p=$(echo "$reqs/$t" | bc -lq) # p is transactions per second. echo "$i $p" >> $dir/$mode # echo "m:$mode i:$i t=$t p=$p" } once(){ # kill old backend (if any) sudo clixon_backend -zf $cfg -y $fyang if [ $? -ne 0 ]; then err fi # start new backend sudo clixon_backend -s init -f $cfg -y $fyang if [ $? -ne 0 ]; then err fi # Always as a start for (( i=10; i<=$step; i=i+10 )); do step $i readlist step $i writelist step $i restreadlist step $i writeleaflist done # Actual steps for (( i=$step; i<=$max; i=i+$step )); do step $i readlist step $i writelist step $i restreadlist step $i writeleaflist done # Check if still alive pid=`pgrep clixon_backend` if [ -z "$pid" ]; then err "backend already dead" fi # kill backend sudo clixon_backend -zf $cfg if [ $? -ne 0 ]; then err "kill backend" fi } once gnuplot -persist <