Home | History | Annotate | Download | only in courgette
      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