diff options
author | Joshua Bakita <jbakita@cs.unc.edu> | 2020-10-22 00:08:12 -0400 |
---|---|---|
committer | Joshua Bakita <jbakita@cs.unc.edu> | 2020-10-22 00:08:12 -0400 |
commit | 3b0aa125061b362b23ecf66afe8319e3a268c874 (patch) | |
tree | 9323b85d5a3a0d14e33a28caa9ffc3b8ce7225be /baseline | |
parent | edb491490ccd0cae4bd28ca9c9a7e095a47c749b (diff) |
Add pair benchmarking and isolation specification into run_bench.sh
This allows `run_bench.sh` to replace all previous general paired
benchmarking scripts. See `run_everything.sh` for an example of how
to use the new script.
This also fixes two critical bugs present in the old scripts:
1. The cpus_list was incorrectly set for resctrl when running
synchronous pair timing with L2+L3 isolation (i). Each write
to that file replaces the previous contents, and it was previously
written once for each core. This prevented the entire 1st core
from using any L3 cache.
2. The competing task list was indexed improperly in the asynchronous
pair timing script. This caused the competing task to always be
identical to the task being profiled.
These issues combine to imply that in the rejected RTSS'20 paper:
- All Level-C SMT timing data is suspect
- Level-A and -B SMT timing data with L2+L3 isolation (i) is
wildly optimistic
Diffstat (limited to 'baseline')
-rwxr-xr-x | baseline/run_baseline_L3_ONLY.sh | 152 | ||||
-rw-r--r-- | baseline/tacleNames.txt | 18 |
2 files changed, 11 insertions, 159 deletions
diff --git a/baseline/run_baseline_L3_ONLY.sh b/baseline/run_baseline_L3_ONLY.sh deleted file mode 100755 index 4183653..0000000 --- a/baseline/run_baseline_L3_ONLY.sh +++ /dev/null | |||
@@ -1,152 +0,0 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | core=$1 | ||
4 | maxJobs=$2 | ||
5 | userRunID=$3 | ||
6 | tacleNames=tacleNames.txt | ||
7 | |||
8 | if [ $# -lt 3 ]; then | ||
9 | echo "Usage $0 <core ID> <number of iterations> <run ID> [TACLe names file] [--contend]" | ||
10 | exit | ||
11 | fi | ||
12 | |||
13 | if [ $# -gt 3 ]; then | ||
14 | echo "Using alternate list of TACLe benchmarks from $4" | ||
15 | tacleNames=$4 | ||
16 | fi | ||
17 | |||
18 | if [ "$EUID" -ne 0 ] | ||
19 | then | ||
20 | echo "You need to be root to enable interrupt isolation and real-time execution!" | ||
21 | exit | ||
22 | fi | ||
23 | |||
24 | echo "Making sure that binaries are up to date..." | ||
25 | while read i; do | ||
26 | make bin/$i | ||
27 | done < $tacleNames | ||
28 | echo "Done. Disabling real-time throttling..." | ||
29 | |||
30 | # Turn off rt throttling | ||
31 | echo -1 > /proc/sys/kernel/sched_rt_runtime_us | ||
32 | echo "Done. Redirecting all interrupts to core 0..." | ||
33 | |||
34 | # Redirect all interrupts to core 0 | ||
35 | i=0 | ||
36 | for IRQ in /proc/irq/* | ||
37 | do | ||
38 | # Skip default_smp_affinity | ||
39 | if [ -d $IRQ ]; then | ||
40 | irqList[$i]=$(cat $IRQ/smp_affinity_list) | ||
41 | echo 0 2> /dev/null > $IRQ/smp_affinity_list | ||
42 | fi | ||
43 | i=$(( $i + 1 )) | ||
44 | done | ||
45 | |||
46 | # Read the names of each benchmark | ||
47 | j=0 | ||
48 | while read i; do | ||
49 | tacleProg[$j]=$i | ||
50 | j=$(( $j + 1 )) | ||
51 | done < $tacleNames | ||
52 | |||
53 | echo "Done. Checking for wbinvd module..." | ||
54 | if [[ ! -f "/proc/wbinvd" ]]; then | ||
55 | echo "ERROR: wbinvd module not loaded. Exiting..." | ||
56 | exit | ||
57 | fi | ||
58 | |||
59 | # Enable L3 isolation | ||
60 | echo "Done. Enabling L3 isolation..." | ||
61 | mount -t resctrl resctrl /sys/fs/resctrl | ||
62 | mkdir -p /sys/fs/resctrl/benchmarks | ||
63 | echo $1 > /sys/fs/resctrl/benchmarks/cpus_list | ||
64 | # Reset global bandwith control and remove L3 from global | ||
65 | echo "L3:0=ffff;1=ffff;2=ffff;3=0000" > /sys/fs/resctrl/schemata | ||
66 | echo "MB:0=2048;1=2048;2=2048;3=2048" > /sys/fs/resctrl/schemata | ||
67 | # Alloc L3 to benchmark | ||
68 | echo "L3:0=0000;1=0000;2=0000;3=00ff" > /sys/fs/resctrl/benchmarks/schemata | ||
69 | echo "MB:0=2048;1=2048;2=2048;3=2048" > /sys/fs/resctrl/benchmarks/schemata | ||
70 | echo "Done. Verifying configuration with user..." | ||
71 | |||
72 | # Generate file name string | ||
73 | # We append to this as we parse the environment settings | ||
74 | runID=$(date +"%b%d-%H") | ||
75 | |||
76 | # Confirm configuration with user | ||
77 | echo "=== Global Config ===" | ||
78 | cat /sys/fs/resctrl/schemata | ||
79 | echo "=== Core $1 Config ===" | ||
80 | cat /sys/fs/resctrl/benchmarks/cpus_list | ||
81 | cat /sys/fs/resctrl/benchmarks/schemata | ||
82 | if [[ $5 == "--contend" ]]; then | ||
83 | if [[ ! -f "/playpen/mc2/imx6q-thrasher/thrasher" ]]; then | ||
84 | echo "ERROR: thrasher binary not fonud. Exiting..." | ||
85 | exit | ||
86 | fi | ||
87 | echo "Will run 6 contending tasks" | ||
88 | runID=$runID-c | ||
89 | else | ||
90 | runID=$runID-xc | ||
91 | fi | ||
92 | if uname -a | grep -q "mc2"; then | ||
93 | echo "MC^2 Autodetected. NOT SUPPORTED. Exiting..." | ||
94 | exit | ||
95 | else | ||
96 | echo "MC^2 not detected. 50% L3 allocation enabled." | ||
97 | runID=$runID-i3 | ||
98 | fi | ||
99 | if pwd | grep -qi dis; then | ||
100 | echo "Autodetected DIS. Will use script-level looping." | ||
101 | fi | ||
102 | echo "Results will be saved as $runID-$userRunID.txt" | ||
103 | echo "Press enter to confirm environment, Ctrl-C to exit..." | ||
104 | read | ||
105 | |||
106 | # Start contending tasks | ||
107 | if [[ $5 == "--contend" ]]; then | ||
108 | echo "Done. Starting 6 contending tasks..." | ||
109 | # Run two contending tasks on each other CCX | ||
110 | taskset -c 1 /playpen/mc2/imx6q-thrasher/thrasher & | ||
111 | taskset -c 2 /playpen/mc2/imx6q-thrasher/thrasher & | ||
112 | taskset -c 5 /playpen/mc2/imx6q-thrasher/thrasher & | ||
113 | taskset -c 6 /playpen/mc2/imx6q-thrasher/thrasher & | ||
114 | taskset -c 9 /playpen/mc2/imx6q-thrasher/thrasher & | ||
115 | taskset -c 10 /playpen/mc2/imx6q-thrasher/thrasher & | ||
116 | fi | ||
117 | sleep 1 # Wait for contending tasks to start | ||
118 | echo "Done. Beginning benchmarks..." | ||
119 | |||
120 | num_tests=$(wc -l < $tacleNames) | ||
121 | for (( i = 0; i < $num_tests ; i++ )) | ||
122 | do | ||
123 | # If using DIS, we have to iterate in the script as DIS won't do it for us | ||
124 | pwd | grep -qi dis | ||
125 | iters=$(python3 -c "print(int(not "$?")*("$maxJobs"-1))") | ||
126 | for ((k=0;k<=iters;k++)); do | ||
127 | # Check if we're using LITMUS^RT or not | ||
128 | if [[ -f source/extra.h ]] && grep -q "#define LITMUS 1" source/extra.h; then | ||
129 | ./bin/${tacleProg[$i]} ${tacleProg[$i]} $maxJobs $core $runID-$userRunID 1 | ||
130 | else | ||
131 | # Interleave memory allocations between all nodes (only 1 node w/out MC^2) | ||
132 | chrt -r 97 numactl --interleave=all taskset -c $core ./bin/${tacleProg[$i]} ${tacleProg[$i]} $maxJobs $core $runID-$userRunID 1 | ||
133 | fi | ||
134 | done | ||
135 | echo COMPLETE: ${tacleProg[$i]} | ||
136 | done | ||
137 | |||
138 | # End contending tasks | ||
139 | if [[ $5 == "--contend" ]]; then | ||
140 | killall thrasher | ||
141 | fi | ||
142 | |||
143 | # Put smp_affinty back the way it was | ||
144 | i=0 | ||
145 | for IRQ in /proc/irq/* | ||
146 | do | ||
147 | if [ -d $IRQ ]; then | ||
148 | echo ${irqList[$i]} 2> /dev/null > $IRQ/smp_affinity_list | ||
149 | fi | ||
150 | i=$(( $i + 1 )) | ||
151 | done | ||
152 | |||
diff --git a/baseline/tacleNames.txt b/baseline/tacleNames.txt index 8f4845a..2e02966 100644 --- a/baseline/tacleNames.txt +++ b/baseline/tacleNames.txt | |||
@@ -1,19 +1,23 @@ | |||
1 | petrinet | 1 | petrinet |
2 | ndes | ||
3 | statemate | 2 | statemate |
4 | adpcm_dec | 3 | ndes |
4 | h264_dec | ||
5 | huff_dec | ||
5 | cjpeg_wrbmp | 6 | cjpeg_wrbmp |
7 | fmref | ||
8 | audiobeam | ||
9 | adpcm_dec | ||
6 | adpcm_enc | 10 | adpcm_enc |
11 | g723_enc | ||
12 | huff_enc | ||
13 | gsm_dec | ||
7 | cjpeg_transupp | 14 | cjpeg_transupp |
8 | dijkstra | ||
9 | epic | 15 | epic |
10 | fmref | 16 | anagram |
11 | gsm_dec | ||
12 | h264_dec | ||
13 | huff_enc | ||
14 | rijndael_enc | 17 | rijndael_enc |
15 | rijndael_dec | 18 | rijndael_dec |
16 | gsm_enc | 19 | gsm_enc |
17 | susan | 20 | susan |
21 | dijkstra | ||
18 | ammunition | 22 | ammunition |
19 | mpeg2 | 23 | mpeg2 |