From 9cf212aaa02266ed3bd034384eb343aaf8c61891 Mon Sep 17 00:00:00 2001
From: Peter Cai <peter.cai@uwaterloo.ca>
Date: Thu, 16 Feb 2023 14:47:50 -0500
Subject: [PATCH] Add perf stat support

---
 configs/5.15.79-peter.sh        | 1 +
 configs/base.sh                 | 1 +
 experiments/memcached.shared.sh | 4 ++++
 experiments/perf.shared.sh      | 8 ++++++++
 4 files changed, 14 insertions(+)
 create mode 100644 experiments/perf.shared.sh

diff --git a/configs/5.15.79-peter.sh b/configs/5.15.79-peter.sh
index 368fdaa..b648d84 100644
--- a/configs/5.15.79-peter.sh
+++ b/configs/5.15.79-peter.sh
@@ -2,4 +2,5 @@ IS_CUSTOM_KERNEL=true
 KERNEL_SRC=/home/p5cai/workspace/linux
 CPUPOWER=$KERNEL_SRC/tools/power/cpupower/cpupower
 X86_ENERGY_PERF_POLICY=$KERNEL_SRC/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy
+PERF=$KERNEL_SRC/tools/perf/perf
 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$KERNEL_SRC/tools/power/cpupower"
diff --git a/configs/base.sh b/configs/base.sh
index 6a561c0..f4b9483 100644
--- a/configs/base.sh
+++ b/configs/base.sh
@@ -1,6 +1,7 @@
 IS_CUSTOM_KERNEL=false
 CPUPOWER=cpupower
 X86_ENERGY_PERF_POLICY=x86_energy_perf_policy
+PERF=perf
 
 # Execute all SSH commands under this user
 # so that we don't need ssh keys for root
diff --git a/experiments/memcached.shared.sh b/experiments/memcached.shared.sh
index 94dfe24..e6cd0e5 100644
--- a/experiments/memcached.shared.sh
+++ b/experiments/memcached.shared.sh
@@ -1,3 +1,5 @@
+source "$EXP_ROOT/experiments/perf.shared.sh"
+
 CONNS=160 # per agent thread
 
 load_config() {
@@ -37,7 +39,9 @@ warmup() {
 
 run_mutilate() {
     echo "Running mutilate with $CONNS connections per agent (core) and QPS = $QPS"
+    perf_stat_start "$1"
     sudo -u $SSH_USER $MUTILATE --noload -c$CONNS $MUTCLIENTS -t30 -u 0 -q $QPS | tee $DATA_OUT/$1.txt
+    perf_stat_stop
 }
 
 memcached_pre_start() {
diff --git a/experiments/perf.shared.sh b/experiments/perf.shared.sh
new file mode 100644
index 0000000..db84939
--- /dev/null
+++ b/experiments/perf.shared.sh
@@ -0,0 +1,8 @@
+perf_stat_start() {
+    $PERF stat -C 0-$((THREADS - 1)) -e LLC-load-misses:u,LLC-load-misses:k,mem_load_uops_retired.llc_miss,mem_uops_retired.all_loads,cycles,cycles:u,cycles:k,instructions,instructions:u,instructions:k,stalled-cycles-frontend,stalled-cycles-backend -o "$DATA_OUT/stat_$1.txt" &
+    PERF_STAT_PID=$!
+}
+
+perf_stat_stop() {
+    kill -INT "$PERF_STAT_PID" || true
+}
-- 
GitLab