1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#!/bin/bash
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Copyright 2013 The Chromium Authors. All rights reserved.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Use of this source code is governed by a BSD-style license that can be
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# found in the LICENSE file.
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Produce memory metrics for run_apply_test
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsource "$(dirname ${0})/stress_test_common"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccicompute_percentiles() {
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if [ -z "${1}" ]; then
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fi
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  local pctls=".5 .9 1"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  local lines=$(cat ${1} | wc -l)
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  for p in $pctls; do
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    local count="$(echo "${lines} * $p" | bc -lq | cut -d. -f1)"
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    local bytes=$(cat ${1} \
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      | cut -d' ' -f2 \
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      | sort -n \
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      | head -n$count \
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      | tail -n1)
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    echo -n "$((bytes / 1000000))MB "
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  done
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmain() {
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if [ $# -lt 1 ]; then
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    cat <<EOF
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben MurdochUSAGE: $(basename ${0}) dir
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciProduce memory metrics for run_apply_test.  This shows the percentiles
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)of the max heap size across all files.
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciEOF
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    exit 1
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fi
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  local dir="${1}"
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if [ ! -d "${dir}" ]; then
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    error "\"${dir}\" not found" exit 1
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fi
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  local metrics_dir="${dir}/metrics"
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  local metrics="${dir}/mem_per_file.txt"
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if [ ! -f "${metrics}" ]; then
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    local metrics_tmp="${metrics}.tmp"
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    echo "computing usage percentiles for courgette.  this may take a while..."
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    find "${metrics_dir}" \
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      | grep "\.apply_mem$" \
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      | while read i; do
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      local apply_mem="${i}"
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      local unbz2_mem="${apply_mem%.apply_mem}.unbz2_mem"
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      local unxz_mem="${apply_mem%.apply_mem}.unxz_mem"
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      echo -n "$apply_mem "
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      cat "${apply_mem}" "${unbz2_mem}" "${unxz_mem}" \
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        | grep "mem_heap_B" \
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        | cut -d= -f2 \
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        | sort -nr \
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        | head -n1
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    done | sort -k2 -n > "${metrics_tmp}"
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    mv "${metrics_tmp}" "${metrics}"
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fi
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  echo "$(compute_percentiles ${metrics})max heap per file for Courgette" \
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    "(50th 90th 100th)"
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  local metrics_bsdiff="${dir}/mem_per_file_bsdiff.txt"
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if [ ! -f "${metrics_bsdiff}" ]; then
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    local metrics_bsdiff_tmp="${metrics_bsdiff}.tmp"
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    echo "computing usage percentiles for bsdiff.  this may take a while..."
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    find "${metrics_dir}" \
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      | grep "\.bsdiff_mem$" \
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      | while read i; do
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      local bsdiff_mem="${i}"
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      echo -n "$bsdiff_mem "
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      cat $bsdiff_mem \
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        | grep "mem_heap_B" \
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        | cut -d= -f2 \
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        | sort -nr \
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        | head -n1
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    done | sort -k2 -n > "${metrics_bsdiff_tmp}"
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    mv "${metrics_bsdiff_tmp}" "${metrics_bsdiff}"
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fi
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  echo "$(compute_percentiles ${metrics_bsdiff})max heap per file for bsdiff" \
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    "(50th 90th 100th)"
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccimain "${@}"
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci