blob: a2abef318c157f88e7cac2ce09424b47e96f649e [file] [log] [blame]
#!/bin/bash
#
# Plot the data reduced by reduce.sh. Run in the directory where
# reduce.sh deposited the data.
#
# Usage: bash plots.sh
#
# This script plots only the CAS and local data, though it preps all
# of the data that reduce.sh currently produces.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you can access it online at
# http://www.gnu.org/licenses/gpl-2.0.html.
#
# Copyright (C) Meta Platforms Inc., 2023
#
# Authors: Paul E. McKenney <paulmck@kernel.org>
T="`mktemp -d ${TMPDIR-/tmp}/plots.sh.XXXXXX`"
trap 'rm -rf $T' 0 2
tag="`ls *.atomicinc.sctr.dat | sed -e 's/.atomicinc.sctr.dat$//'`"
# Copy over the multi-valued scatter data
cp "${tag}.atomicinc.sctr.dat" $T/"Atomic increment"
awk < "${tag}.blindcmpxchg.sctr.dat" > $T/"Blind cmpxchg" '{ print $1 + 0.25, $2; }'
awk < "${tag}.cmpxchg.sctr.dat" > $T/"cmpxchg" '{ print $1 + 0.5, $2; }'
awk < "${tag}.write.sctr.dat" > $T/"Write" '{ print $1 + 0.75, $2; }'
# Just average values for the local data
lastcpu="`tail -1 ${tag}.atomicinc.dat | awk '{print $1; }'`"
for i in localcmpxchg locallock
do
label="`echo ${i} | sed -e 's/^local/Local /'`"
value="`tail -1 ${tag}.${i}.dat | awk '{print $2; }'`"
awk -v "lastcpu=${lastcpu}" -v "value=${value}" < /dev/null '
BEGIN {
for (i = 0; i <= lastcpu; i++)
print i, value;
}' > "$T/${label}"
done
awk -v "lastcpu=${lastcpu}" '
BEGIN {
if (lastcpu >= 128) {
print "w dots";
} else {
print "w points pt 6 ps 1"
}
}' > $T/withstring
ws="`cat $T/withstring`"
resdir="`pwd`"
pushd $T > /dev/null
gnuplot << ---EOF---
set term png size 2000,800
set output "${resdir}/latencies.png"
set key tmargin
set xlabel "CPU Number (${tag})"
set ylabel "Latency (ns)"
plot "Atomic increment" ${ws}, "Blind cmpxchg" ${ws}, "cmpxchg" ${ws}, "Write" ${ws}, "Local cmpxchg" w l, "Local lock" w l
---EOF---
display "${resdir}/latencies.png"