Home | History | Annotate | Download | only in loadtest
      1 #!/bin/sh
      2 #
      3 # Script that measures statsd's PSS under an increasing number of metrics.
      4 
      5 # Globals.
      6 pss=""
      7 pid=""
      8 
      9 # Starts the loadtest.
     10 start_loadtest() {
     11     echo "Starting loadtest"
     12     adb shell am start -n com.android.statsd.loadtest/.LoadtestActivity --es "type" "start"
     13 }
     14 
     15 # Stops the loadtest.
     16 stop_loadtest() {
     17     echo "Stopping loadtest"
     18     adb shell am start -n com.android.statsd.loadtest/.LoadtestActivity --es "type" "stop"
     19 }
     20 
     21 # Sets the metrics replication.
     22 # Arguments:
     23 #   $1: The replication factor.
     24 set_replication() {
     25     adb shell am start -n com.android.statsd.loadtest/.LoadtestActivity --es "type" "set_replication" --ei "replication" "${1}"
     26     echo "Replication set to ${1}"
     27 }
     28 
     29 # Reads statsd's pid and PSS.
     30 update_pid_and_pss() {
     31     # Command that reads the PSS for statsd. This also gives us its pid.
     32     get_mem=$(adb shell dumpsys meminfo |grep statsd)
     33     # Looks for statsd's pid.
     34     regex="([0-9,]+)K: statsd \(pid ([0-9]+)\).*"
     35     if [[ $get_mem =~ $regex ]]; then
     36         pss=$(echo "${BASH_REMATCH[1]}" | tr -d , | sed 's/\.//g')
     37         pid=$(echo "${BASH_REMATCH[2]}")
     38     else
     39         echo $cmd doesnt match $regex
     40     fi
     41 }
     42 
     43 # Kills statsd.
     44 # Assumes the pid has been set.
     45 kill_statsd() {
     46     echo "Killing statsd (pid ${pid})"
     47     adb shell kill -9 "${pid}"
     48 }
     49 
     50 # Main loop.
     51 main() {
     52     start_time=$(date +%s)
     53     values=()
     54     stop_loadtest
     55 
     56     echo ""
     57     echo "********************* NEW LOADTEST ************************"
     58     update_pid_and_pss
     59     for replication in 1 2 4 8 16 32 64 128 256 512 1024 2048 4096
     60     do
     61         echo "**** Starting test at replication ${replication} ****"
     62 
     63         # (1) Restart statsd. This will ensure its state is empty.
     64         kill_statsd
     65         sleep 3 # wait a bit for it to restart
     66         update_pid_and_pss
     67         echo "Before the test, statsd's PSS is ${pss}"
     68 
     69         # (2) Set the replication.
     70         set_replication "${replication}"
     71         sleep 1 # wait a bit
     72 
     73         # (3) Start the loadtest.
     74         start_loadtest
     75 
     76         # (4) Wait several seconds, then read the PSS.
     77         sleep 100 && update_pid_and_pss
     78         echo "During the test, statsd's PSS is ${pss}"
     79         values+=(${pss})
     80 
     81         echo "Values: ${values[@]}"
     82 
     83         # (5) Stop loadtest.
     84         stop_loadtest
     85         sleep 2
     86 
     87         echo ""
     88     done
     89 
     90     end_time=$(date +%s)
     91     echo "Completed loadtest in $((${end_time} - ${start_time})) seconds."
     92 
     93     values_as_str=$(IFS=$'\n'; echo "${values[*]}")
     94     echo "The PSS values are:"
     95     echo "${values_as_str}"
     96     echo ""
     97 }
     98 
     99 main
    100