analyze_mem_test 2.4 KB

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