From 27b24a45f22d04273b249c975eac19e4495487a8 Mon Sep 17 00:00:00 2001 From: "e.gavrin" Date: Tue, 19 Aug 2014 02:13:18 +0400 Subject: [PATCH] Refine rss_measure.sh --- tools/rss_measure.sh | 133 +++++++++++++++++++++++-------------------- 1 file changed, 71 insertions(+), 62 deletions(-) diff --git a/tools/rss_measure.sh b/tools/rss_measure.sh index c92496214..da7432de8 100755 --- a/tools/rss_measure.sh +++ b/tools/rss_measure.sh @@ -20,98 +20,107 @@ RAW_OUTPUT=$3 SLEEP=0.3 REPEATS=5 -RSS_OUTPUT="1" -PSS_OUTPUT="1" -SHARE_OUTPUT="1" -SHARECLN_OUTPUT="1" -SHAREDRT_OUTPUT="1" -RSS_SHARE_OUTPUT="1" -PRIVCLEAN_OUTPUT="1" -PRIVDIRTY_OUTPUT="1" +Size_OUT="" +Rss_OUT="" +Pss_OUT="" +Share_OUT="" +Shared_Clean_OUT="" +Shared_Dirty_OUT="" +Private_Clean_OUT="" +Private_Dirty_OUT="" +Swap_OUT="" + +function collect_entry() +{ + OUT_NAME="$1_OUT"; + OUT=$OUT_NAME; + + SUM=`cat /proc/$PID/smaps 2>/dev/null | grep $1 | awk '{sum += $2;} END { if (sum != 0) { print sum; }; }'`; + + if [ "$SUM" != "" ]; + then + eval "$OUT"="\"\$$OUT $SUM\\n\""; + fi; +} + +function print_entry() +{ + OUT_NAME="$1_OUT"; + OUT=$OUT_NAME; + + eval "echo -e \"\$$OUT\"" | awk -v entry="$1" '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { if (n == 0) { exit; }; printf "%19s:%8d Kb%19s:%8d Kb\n", entry, sum / n, entry, max; }'; +} function run_test() { $JERRY $TEST & PID=$! - while true; + while kill -0 "$PID" > /dev/null 2>&1; do - RSS_SUM=`cat /proc/$PID/smaps 2>/dev/null | grep Rss | awk '{sum += $2;} END {print sum;}'` - [ "$RSS_SUM" != "" ] || break; - - PSS_SUM=`cat /proc/$PID/smaps 2>/dev/null | grep Pss | awk '{sum += $2;} END {print sum;}'` - [ "$PSS_SUM" != "" ] || break; - - SHARE_SUM=`cat /proc/$PID/smaps 2>/dev/null | grep Share | awk '{sum += $2;} END {print sum;}'` - [ "$SHARE_SUM" != "" ] || break; - - PRIVCLEAN_SUM=`cat /proc/$PID/smaps 2>/dev/null | grep Private_Clean | awk '{sum += $2;} END {print sum;}'` - [ "$PRIVCLEAN_SUM" != "" ] || break; - - PRIVDIRTY_SUM=`cat /proc/$PID/smaps 2>/dev/null | grep Private_Dirty | awk '{sum += $2;} END {print sum;}'` - [ "$PRIVDIRTY_SUM" != "" ] || break; - - SHARECLN_SUM=`cat /proc/$PID/smaps 2>/dev/null | grep Shared_Clean | awk '{sum += $2;} END {print sum;}'` - [ "$SHARECLN_SUM" != "" ] || break; - - SHAREDRT_SUM=`cat /proc/$PID/smaps 2>/dev/null | grep Shared_Dirty | awk '{sum += $2;} END {print sum;}'` - [ "$SHAREDRT_SUM" != "" ] || break; - - RSS_SHARE_SUM=$(($RSS_SUM - $SHARE_SUM)) - + collect_entry Size + collect_entry Rss + collect_entry Pss + collect_entry Share + collect_entry Shared_Clean + collect_entry Shared_Dirty + collect_entry Private_Clean + collect_entry Private_Dirty + collect_entry Swap + sleep $SLEEP - RSS_OUTPUT="$RSS_OUTPUT $RSS_SUM\n" - PSS_OUTPUT="$PSS_OUTPUT $PSS_SUM\n" - SHARE_OUTPUT="$SHARE_OUTPUT $SHARE_SUM\n" - RSS_SHARE_OUTPUT="$RSS_SHARE_OUTPUT $RSS_SHARE_SUM\n" - PRIVCLEAN_OUTPUT="$PRIVCLEAN_OUTPUT $PRIVCLEAN_SUM\n" - PRIVDIRTY_OUTPUT="$PRIVDIRTY_OUTPUT $PRIVDIRTY_SUM\n" - SHARECLN_OUTPUT="$SHARECLN_OUTPUT $SHARECLN_SUM\n" - SHAREDRT_OUTPUT="$SHAREDRT_OUTPUT $SHAREDRT_SUM\n" - - done + done } + +ITERATIONS=`seq 1 $REPEATS` START=$(date +%s.%N) -for i in 1 2 3 4 5 +for i in $ITERATIONS do run_test done FINISH=$(date +%s.%N) -EXEC_TIME=$(echo "$FINISH - $START" | bc) echo if [ "$RAW_OUTPUT" != "" ]; then - echo -e $RSS_OUTPUT; - echo -e $PSS_OUTPUT; - echo -e $SHARE_OUTPUT; + echo -e "$Size_OUT"; + echo -e "$Rss_OUT"; + echo -e "$Pss_OUT"; + echo -e "$Share_OUT"; + echo -e "$Shared_Clean_OUT"; + echo -e "$Shared_Dirty_OUT"; + echo -e "$Private_Clean_OUT"; + echo -e "$Private_Dirty_OUT"; + echo -e "$Swap_OUT"; fi; -if [ "$RSS_OUTPUT" == "1" ] +if [ "$Size_OUT" == "" ] then - echo =================== - echo "Test failed." - echo =================== - exit 1 + echo =================== + echo "Test failed." + echo =================== + exit 1 fi; -TIME=$(echo "scale=3;$EXEC_TIME / 1.0" | bc ) -AVG_TIME=$(echo "scale=3;$EXEC_TIME / 5" | bc ) +TIME=$(echo "scale=3;($FINISH - $START) / 1.0" | bc ); +AVG_TIME=$(echo "scale=3;$TIME / $REPEATS" | bc ); echo =================== -echo -e $RSS_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Rss average:\t\t%d Kb\tRss max: %d Kb\n", sum / n, max; }' -echo -e $PSS_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Pss average:\t\t%d Kb\tPss max: %d Kb\n", sum / n, max; }' -echo -e $SHARE_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Share average:\t\t%d Kb\tShare max: %d Kb\n", sum / n, max; }' -echo -e $RSS_SHARE_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Rss - Share average:\t%d Kb\tRss - Share max: %d Kb\n", sum / n, max; }' -echo -e $PRIVCLEAN_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Private_Clean average:\t%d Kb\tPrivate_Clean max: %d Kb\n", sum / n, max; }' -echo -e $PRIVDIRTY_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Private_Dirty average:\t%d Kb\tPrivate_Dirty max: %d Kb\n", sum / n, max; }' -echo -e $SHARECLN_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Shared_Clean average:\t%d Kb\tShared_Clean max: %d Kb\n", sum / n, max; }' -echo -e $SHAREDRT_OUTPUT | awk '{ if ($1 != "") { sum += $1; n += 1; if ($1 > max) { max = $1; } } } END { printf "Shared_Dirty average:\t%d Kb\tShared_Dirty max: %d Kb\n", sum / n, max; }' +printf "%24sAVERAGE%28sMAX\n" "" ""; +print_entry Size +print_entry Rss +print_entry Pss +print_entry Share +print_entry Shared_Clean +print_entry Shared_Dirty +print_entry Private_Clean +print_entry Private_Dirty +print_entry Swap echo -e "---" echo -e "Exec time / average:\t$TIME / $AVG_TIME secs" echo ===================