blob: d6acd5edfb3e7b912bbd720d031e76de988ab6c2 [file] [log] [blame]
#! /bin/bash -u
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This script takes the out.txt, generated by heatmap_generator.py
# and sorted into a heatmap data file (inst-histo.txt) and then
# call gnu plot to draw the heat map and the time map.
# A heat map shows the overall hotness of instructions being executed
# while the time map shows the hotness of instruction at different time.
#
# Usage:
# ./perf-to-inst-page.sh HEATMAP_TITLE
# HEATMAP_TITLE: the title to display on the heatmap
HEAT_PNG="heat_map.png"
TIMELINE_PNG="timeline.png"
HEATMAP_TITLE=$1
ENABLE_HUGEPAGE=$2
heatmap_command="
set terminal png size 600,450
set xlabel \"Instruction Virtual Address (MB)\"
set ylabel \"Sample Occurance\"
set grid
set output \"${HEAT_PNG}\"
set title \"${HEATMAP_TITLE}\"
"
if [[ "${ENABLE_HUGEPAGE}" = "hugepage" ]]; then
hugepage_hist="inst-histo-hp.txt"
smallpage_hist="inst-histo-sp.txt"
cat out.txt | grep hugepage | awk '{print $3}' \
| sort -n | uniq -c > "${hugepage_hist}"
cat out.txt | grep smallpage | awk '{print $3}' \
| sort -n | uniq -c > "${smallpage_hist}"
# generate inst heat map
heatmap_in_hugepage=("'${hugepage_hist}' using \
(\$2/1024/1024):1 with impulses notitle lt rgb 'red'")
heatmap_outside_hugepage=("'${smallpage_hist}' using \
(\$2/1024/1024):1 with impulses notitle lt rgb 'blue'")
echo "
${heatmap_command}
plot ${heatmap_in_hugepage}, ${heatmap_outside_hugepage}
" | gnuplot
else
awk '{print $3}' out.txt | sort -n | uniq -c > inst-histo.txt
# generate inst heat map
echo "
${heatmap_command}
plot 'inst-histo.txt' using (\$2/1024/1024):1 with impulses notitle
" | gnuplot
fi
# generate instruction page access timeline
num=$(awk 'END {print NR+1}' out.txt)
echo "
set terminal png size 600,450
set xlabel \"time (sec)\"
set ylabel \"Instruction Virtual Address (MB)\"
set output \"${TIMELINE_PNG}\"
set title \"instruction page accessd timeline\"
plot 'out.txt' using (\$0/$num*10):(\$3/1024/1024) with dots notitle
" | gnuplot