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