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   code \
     88   semispace \
     89   object_groups \
     90 "
     91 
     92 INTERESTING_OLD_GEN_KEYS="\
     93   clear.code_flush \
     94   clear.dependent_code \
     95   clear.global_handles \
     96   clear.maps \
     97   clear.slots_buffer \
     98   clear.store_buffer \
     99   clear.string_table \
    100   clear.weak_cells \
    101   clear.weak_collections \
    102   clear.weak_lists \
    103   evacuate.candidates \
    104   evacuate.clean_up \
    105   evacuate.copy \
    106   evacuate.update_pointers \
    107   evacuate.update_pointers.to_evacuated \
    108   evacuate.update_pointers.to_new \
    109   evacuate.update_pointers.weak \
    110   external.mc_prologue \
    111   external.mc_epilogue \
    112   external.mc_incremental_prologue \
    113   external.mc_incremental_epilogue \
    114   external.weak_global_handles \
    115   mark.finish_incremental \
    116   mark.prepare_code_flush \
    117   mark.roots \
    118   mark.weak_closure \
    119   mark.weak_closure.ephemeral \
    120   mark.weak_closure.weak_handles \
    121   mark.weak_closure.weak_roots \
    122   mark.weak_closure.harmony \
    123   sweep.code \
    124   sweep.map \
    125   sweep.old \
    126 "
    127 
    128 if [[ "$TOP_LEVEL" = "yes" ]]; then
    129   INTERESTING_OLD_GEN_KEYS="\
    130     ${INTERESTING_OLD_GEN_KEYS} \
    131     clear \
    132     evacuate \
    133     finish \
    134     incremental_finalize \
    135     mark \
    136     pause
    137     sweep \
    138   "
    139   INTERESTING_NEW_GEN_KEYS="\
    140     ${INTERESTING_NEW_GEN_KEYS} \
    141   "
    142 fi
    143 
    144 BASE_DIR=$(dirname $0)
    145 
    146 case $OP in
    147   new-gen-rank)
    148     cat $LOGFILE | grep "gc=s" \
    149       | $BASE_DIR/eval_gc_nvp.py \
    150       --no-histogram \
    151       --rank $RANK_MODE \
    152       $CSV \
    153       $PERCENTILES \
    154       ${INTERESTING_NEW_GEN_KEYS}
    155     ;;
    156   old-gen-rank)
    157     cat $LOGFILE | grep "gc=ms" \
    158       | $BASE_DIR/eval_gc_nvp.py \
    159       --no-histogram \
    160       --rank $RANK_MODE \
    161       $CSV \
    162       $PERCENTILES \
    163       ${INTERESTING_OLD_GEN_KEYS}
    164     ;;
    165   *)
    166     ;;
    167 esac
    168