1 #!/bin/bash 2 3 # Copyright 2013 The Chromium Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 # Produce memory metrics for run_apply_test 8 9 source "$(dirname ${0})/stress_test_common" 10 11 compute_percentiles() { 12 if [ -z "${1}" ]; then 13 return; 14 fi 15 local pctls=".5 .9 1" 16 local lines=$(cat ${1} | wc -l) 17 for p in $pctls; do 18 local count="$(echo "${lines} * $p" | bc -lq | cut -d. -f1)" 19 local bytes=$(cat ${1} \ 20 | cut -d' ' -f2 \ 21 | sort -n \ 22 | head -n$count \ 23 | tail -n1) 24 echo -n "$((bytes / 1000000))MB " 25 done 26 } 27 28 main() { 29 if [ $# -lt 1 ]; then 30 cat <<EOF 31 32 USAGE: $(basename ${0}) dir 33 34 Produce memory metrics for run_apply_test. This shows the percentiles 35 of the max heap size across all files. 36 37 EOF 38 exit 1 39 fi 40 41 local dir="${1}" 42 if [ ! -d "${dir}" ]; then 43 error "\"${dir}\" not found" exit 1 44 fi 45 46 local metrics_dir="${dir}/metrics" 47 local metrics="${dir}/mem_per_file.txt" 48 49 if [ ! -f "${metrics}" ]; then 50 local metrics_tmp="${metrics}.tmp" 51 echo "computing usage percentiles for courgette. this may take a while..." 52 find "${metrics_dir}" \ 53 | grep "\.apply_mem$" \ 54 | while read i; do 55 local apply_mem="${i}" 56 local unbz2_mem="${apply_mem%.apply_mem}.unbz2_mem" 57 local unxz_mem="${apply_mem%.apply_mem}.unxz_mem" 58 echo -n "$apply_mem " 59 cat "${apply_mem}" "${unbz2_mem}" "${unxz_mem}" \ 60 | grep "mem_heap_B" \ 61 | cut -d= -f2 \ 62 | sort -nr \ 63 | head -n1 64 done | sort -k2 -n > "${metrics_tmp}" 65 mv "${metrics_tmp}" "${metrics}" 66 fi 67 68 echo "$(compute_percentiles ${metrics})max heap per file for Courgette" \ 69 "(50th 90th 100th)" 70 71 local metrics_bsdiff="${dir}/mem_per_file_bsdiff.txt" 72 73 if [ ! -f "${metrics_bsdiff}" ]; then 74 local metrics_bsdiff_tmp="${metrics_bsdiff}.tmp" 75 echo "computing usage percentiles for bsdiff. this may take a while..." 76 find "${metrics_dir}" \ 77 | grep "\.bsdiff_mem$" \ 78 | while read i; do 79 local bsdiff_mem="${i}" 80 echo -n "$bsdiff_mem " 81 cat $bsdiff_mem \ 82 | grep "mem_heap_B" \ 83 | cut -d= -f2 \ 84 | sort -nr \ 85 | head -n1 86 done | sort -k2 -n > "${metrics_bsdiff_tmp}" 87 mv "${metrics_bsdiff_tmp}" "${metrics_bsdiff}" 88 fi 89 90 echo "$(compute_percentiles ${metrics_bsdiff})max heap per file for bsdiff" \ 91 "(50th 90th 100th)" 92 } 93 94 main "${@}" 95