eval_gc_time.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!/bin/bash
  2. #
  3. # Copyright 2015 the V8 project 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. # Convenience Script used to rank GC NVP output.
  7. print_usage_and_die() {
  8. echo "Usage: $0 [OPTIONS]"
  9. echo ""
  10. echo "OPTIONS"
  11. echo " -r|--rank new-gen-rank|old-gen-rank GC mode to profile"
  12. echo " (default: old-gen-rank)"
  13. echo " -s|--sort avg|max sorting mode (default: max)"
  14. echo " -t|--top-level include top-level categories"
  15. echo " -c|--csv provide csv output"
  16. echo " -f|--file FILE profile input in a file"
  17. echo " (default: stdin)"
  18. echo " -p|--percentiles comma separated percentiles"
  19. exit 1
  20. }
  21. OP=old-gen-rank
  22. RANK_MODE=max
  23. TOP_LEVEL=no
  24. CSV=""
  25. LOGFILE=/dev/stdin
  26. PERCENTILES=""
  27. while [[ $# -ge 1 ]]
  28. do
  29. key="$1"
  30. case $key in
  31. -r|--rank)
  32. case $2 in
  33. new-gen-rank|old-gen-rank)
  34. OP="$2"
  35. ;;
  36. *)
  37. print_usage_and_die
  38. esac
  39. shift
  40. ;;
  41. -s|--sort)
  42. case $2 in
  43. max|avg)
  44. RANK_MODE=$2
  45. ;;
  46. *)
  47. print_usage_and_die
  48. esac
  49. shift
  50. ;;
  51. -t|--top-level)
  52. TOP_LEVEL=yes
  53. ;;
  54. -c|--csv)
  55. CSV=" --csv "
  56. ;;
  57. -f|--file)
  58. LOGFILE=$2
  59. shift
  60. ;;
  61. -p|--percentiles)
  62. PERCENTILES="--percentiles=$2"
  63. shift
  64. ;;
  65. *)
  66. break
  67. ;;
  68. esac
  69. shift
  70. done
  71. if [[ $# -ne 0 ]]; then
  72. echo "Unknown option(s): $@"
  73. echo ""
  74. print_usage_and_die
  75. fi
  76. INTERESTING_NEW_GEN_KEYS="\
  77. scavenge \
  78. weak \
  79. roots \
  80. old_new \
  81. semispace \
  82. "
  83. INTERESTING_OLD_GEN_KEYS="\
  84. clear.dependent_code \
  85. clear.global_handles \
  86. clear.maps \
  87. clear.slots_buffer \
  88. clear.string_table \
  89. clear.weak_collections \
  90. clear.weak_lists \
  91. evacuate.candidates \
  92. evacuate.clean_up \
  93. evacuate.copy \
  94. evacuate.update_pointers \
  95. evacuate.update_pointers.to_evacuated \
  96. evacuate.update_pointers.to_new \
  97. evacuate.update_pointers.weak \
  98. external.mc_prologue \
  99. external.mc_epilogue \
  100. external.mc_incremental_prologue \
  101. external.mc_incremental_epilogue \
  102. external.weak_global_handles \
  103. mark.finish_incremental \
  104. mark.roots \
  105. mark.weak_closure \
  106. mark.weak_closure.ephemeral \
  107. mark.weak_closure.weak_handles \
  108. mark.weak_closure.weak_roots \
  109. mark.weak_closure.harmony \
  110. sweep.code \
  111. sweep.map \
  112. sweep.old \
  113. "
  114. if [[ "$TOP_LEVEL" = "yes" ]]; then
  115. INTERESTING_OLD_GEN_KEYS="\
  116. ${INTERESTING_OLD_GEN_KEYS} \
  117. clear \
  118. evacuate \
  119. finish \
  120. incremental_finalize \
  121. mark \
  122. pause
  123. sweep \
  124. "
  125. INTERESTING_NEW_GEN_KEYS="\
  126. ${INTERESTING_NEW_GEN_KEYS} \
  127. "
  128. fi
  129. BASE_DIR=$(dirname $0)
  130. case $OP in
  131. new-gen-rank)
  132. cat $LOGFILE | grep "gc=s" \
  133. | $BASE_DIR/eval_gc_nvp.py \
  134. --no-histogram \
  135. --rank $RANK_MODE \
  136. $CSV \
  137. $PERCENTILES \
  138. ${INTERESTING_NEW_GEN_KEYS}
  139. ;;
  140. old-gen-rank)
  141. cat $LOGFILE | grep "gc=ms" \
  142. | $BASE_DIR/eval_gc_nvp.py \
  143. --no-histogram \
  144. --rank $RANK_MODE \
  145. $CSV \
  146. $PERCENTILES \
  147. ${INTERESTING_OLD_GEN_KEYS}
  148. ;;
  149. *)
  150. ;;
  151. esac