#!/bin/bash # Transactions per second for large lists read/write plotter using gnuplot # . ./lib.sh max=200 # Nr of db entries step=100 reqs=1000 cfg=$dir/scaling-conf.xml fyang=$dir/scaling.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 /usr/local/var/routing /usr/local/lib/xmldb/text.so EOF run(){ nr=$1 # Number of entries in DB reqs=$2 mode=$3 echo -n "replace" > $fconfig for (( i=0; i<$nr; i++ )); do echo -n "$i" >> $fconfig echo -n "$i$i" >> $fconfig 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 ;; readleaflist) time -p for (( i=0; i<$reqs; i++ )); do rnd=$(( ( RANDOM % $nr ) )) echo "]]>]]>" done | $clixon_netconf -qf $cfg -y $fyang > /dev/null ;; 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" "]]>]]>" "^]]>]]>$" } step(){ i=$1 mode=$2 echo -n "" > $fconfig t=$(TEST=%e run $i $reqs $mode $ 2>&1 | awk '/real/ {print $2}') # 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 } 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 readleaflist step $i writeleaflist done # Actual steps for (( i=$step; i<=$max; i=i+$step )); do step $i readlist step $i readleaflist step $i writelist 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 <