Commit d19eaff8 authored by aumgn's avatar aumgn
Browse files

Update org files

parent 938a6003
......@@ -62,17 +62,14 @@ HD
echo -n '' > $DATAFILE
sudo cat /etc/os-release >> $LOGDIR/system
sudo sysctl -a >> $LOGDIR/system 2>/dev/null
old_autogroup=$(sudo sysctl -n kernel.sched_autogroup_enabled)
old_migration_cost=$(sudo sysctl -n kernel.sched_migration_cost_ns)
echo "old_autogroup=$old_autogroup" >> $LOGDIR/old-system
echo "old_migration_cost=$old_migration_cost" >> $LOGDIR/old-system
sudo sysctl -q kernel.sched_migration_cost_ns=500000
sudo sysctl -q kernel.sched_autogroup_enabled=0
sudo cat /etc/os-release > $LOGDIR/system
sudo sysctl -a >> $LOGDIR/system 2>/dev/null
make -C$SRCDIR >$LOGDIR/make 2>&1
repeat=$5
......
......@@ -17,18 +17,17 @@ This script will run the application with multiple parameters and produce a csv
#+BEGIN_SRC sh
usage() {
cat <<HD
Usage: $0 <pinning> <nodes> <size> <autogroup> <migrations> <repeat>
Usage: $0 <pinning> <nodes> <autogroup> <size> <repeat>
<pinning> list of values among { cores, nodes, subset, none }
<nodes> list of numbers of nodes
<size> list of sizes (parameter of the application)
<autogroup> whether ('y') or not ('n') autogroup should be enabled
<migrations> whether ('y') or not ('n') migrations should be enabled (using kernel.sched_migrations_cost_ns)
<size> list of sizes (parameter of the application)
<repeat> the number of time to run the application for each parameter combinations
Run on 64 cores with and without pinning one time each:
>> $0 "cores none" 8 400 n n 1
>> $0 "cores none" 8 400 n 1
Run on 1,2,3,4,5,6,7,8 nodes with pinning and without pinning but only the necessary number of cores five times each:
>> $0 "cores subset" "\$(seq 1 8)" "200 1000" n n 5
>> $0 "cores subset" "\$(seq 1 8)" "200 1000" n 5
HD
}
#+END_SRC
......@@ -97,10 +96,9 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
run() {
pinning=$1
nodes=$2
size=$3
autogroup=$4
migrations=$5
repeat=$6
autogroup=$3
size=$4
repeat=$5
threads=$(($nodes * 8))
arg_suffix=''
......@@ -129,23 +127,16 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
exit 35
fi
# if [[ $migrations == "y" ]]; then
# sudo sysctl -q kernel.sched_migration_cost_ns=500000
# elif [[ $migrations == "n" ]]; then
# sudo sysctl -q kernel.sched_migration_cost_ns=-1
# else
# echo 'Unknown migrations $migrations'
# exit 35
# fi
logfile_name=$nodes.$pinning.$size.$autogroup.$migrations
logfile_name=$nodes.$pinning.$size.$autogroup
time_file=$APP_LOG_DIR/$logfile_name.time
outfile=$APP_LOG_DIR/$logfile_name.out
errfile=$APP_LOG_DIR/$logfile_name.err
perf_script_file=$APP_LOG_DIR/$logfile_name.script.perf
schedstat1_file=$APP_LOG_DIR/$logfile_name.schedstat1
schedstat2_file=$APP_LOG_DIR/$logfile_name.schedstat2
printf '[%6s][%2d][%4d][%s][%s] ' $pinning $nodes $size $autogroup $migrations
printf '####### [%6s][%2d][%4d][%s][%s] #######\n' $pinning $nodes $size $autogroup $migrations |
printf '[%6s][%2d][%4d][%s] ' $pinning $nodes $size $autogroup
printf '####### [%6s][%2d][%4d][%s] #######\n' $pinning $nodes $size $autogroup |
tee -a $outfile $errfile >/dev/null
time_prefix="/usr/bin/time -f%e -o $time_file -a"
......@@ -166,9 +157,12 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
cmd="$perf_prefix $time_prefix $pin_prefix $APP_BIN $threads $APP_INPUTS_DIR/head $size $arg_suffix"
echo "$cmd" | tee -a $outfile $errfile >/dev/null
cat /proc/schedstat > $schedstat1_file
eval "$cmd" 1>>$outfile 2>>$errfile
cat /proc/schedstat > $schedstat2_file
printf '.'
printf '%s,%d,%d,%s,%s,%f\n' $pinning $nodes $size $autogroup $migrations $(tail -1 $time_file) >>$DATAFILE
printf '%s,%d,%d,%s,%s,%f\n' $pinning $nodes $size $autogroup $(tail -1 $time_file) >>$DATAFILE
if [[ -n $WITH_PERF ]]; then
sudo perf script -i $perf_raw_file >> $perf_script_file
......@@ -184,30 +178,27 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
}
sudo cat /etc/os-release >> $APP_LOG_DIR/system
sudo sysctl -a >> $APP_LOG_DIR/system 2>/dev/null
old_autogroup=$(sudo sysctl -n kernel.sched_autogroup_enabled)
old_migration_cost=$(sudo sysctl -n kernel.sched_migration_cost_ns)
echo "old_autogroup=$old_autogroup" >> $APP_LOG_DIR/system
echo "old_migration_cost=$old_migration_cost" >> $APP_LOG_DIR/system
if [[ $# != 6 ]]; then
if [[ $# != 5 ]]; then
usage $0
exit 1
fi
repeat=$6
repeat=$5
for pinning in $1; do
for nodes in $2; do
for size in $3; do
for autogroup in $4; do
for migrations in $5; do
run $pinning $nodes $size $autogroup $migrations $repeat
done
for autogroup in $3; do
for size in $4; do
run $pinning $nodes $autogroup $size $repeat
done
done
done
done
sudo sysctl -q kernel.sched_migration_cost_ns=$old_migration_cost
sudo sysctl -q kernel.sched_autogroup_enabled=$old_autogroup
echo ''
......@@ -259,58 +250,41 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
** Load data
#+BEGIN_SRC R
data <- read.csv('./data/volrend.data', header = FALSE)
names(data) <- c('Pinning', 'Nodes', 'Size', 'Autogroup', 'Time')
data <- read.csv('./volrend.data', header = FALSE)
names(data) <- c('cpubars', 'Pinning', 'Nodes', 'Size', 'Autogroup', 'Time')
summary(data)
#+END_SRC
#+RESULTS:
| Pinning | Nodes | Size | Autogroup | Time |
|------------+-----------+-------------+-----------+---------------|
| cores :280 | Min. :2 | Min. :500 | n:560 | Min. :18.82 |
| nodes :280 | 1st Qu.:3 | 1st Qu.:500 | y:560 | 1st Qu.:21.31 |
| none :280 | Median :5 | Median :500 | nil | Median :24.14 |
| subset:280 | Mean :5 | Mean :500 | nil | Mean :29.80 |
| nil | 3rd Qu.:7 | 3rd Qu.:500 | nil | 3rd Qu.:31.43 |
| nil | Max. :8 | Max. :500 | nil | Max. :79.00 |
| cpubars | Pinning | Nodes | Size | Autogroup | Time | NA |
|------------+----------+-----------+-------------+-----------+---------------+-----------|
| with :40 | cores:40 | Min. :8 | Min. :500 | n:80 | Min. :11.58 | Min. :0 |
| without:40 | none :40 | 1st Qu.:8 | 1st Qu.:500 | nil | 1st Qu.:11.67 | 1st Qu.:0 |
| nil | nil | Median :8 | Median :500 | nil | Median :12.10 | Median :0 |
| nil | nil | Mean :8 | Mean :500 | nil | Mean :12.81 | Mean :0 |
| nil | nil | 3rd Qu.:8 | 3rd Qu.:500 | nil | 3rd Qu.:13.81 | 3rd Qu.:0 |
| nil | nil | Max. :8 | Max. :500 | nil | Max. :17.02 | Max. :0 |
** Process Data
#+BEGIN_SRC R
processed <- data %>%
select(Pinning, Nodes, Size, Autogroup, Time) %>%
filter(Pinning != 'subset', Autogroup == 'n') %>%
group_by(Pinning, Nodes, Size, Autogroup) %>%
select(cpubars, Pinning, Nodes, Size, Autogroup, Time) %>%
filter(Pinning != 'nodes', Autogroup == 'n') %>%
group_by(cpubars, Pinning, Nodes, Size, Autogroup) %>%
summarise(
ThroughputMean = mean(Size / Time),
ThroughputSd = sd(Size / Time)
ThroughputMean = mean(Time),
ThroughputSd = sd(Time)
)
#+END_SRC
#+RESULTS:
| Pinning | Nodes | Size | Autogroup | ThroughputMean | ThroughputSd |
|---------+-------+------+-----------+------------------+--------------------|
| cores | 2 | 500 | n | 18.3459675157152 | 0.0265977612489882 |
| nodes | 2 | 500 | n | 18.1585068732057 | 0.049720181056774 |
| none | 2 | 500 | n | 18.4652398202751 | 0.0888830366260403 |
| cores | 3 | 500 | n | 22.9811939652092 | 0.0451723600590333 |
| nodes | 3 | 500 | n | 22.4666378521908 | 0.0815860197642701 |
| none | 3 | 500 | n | 22.6483415040959 | 0.0895873114278645 |
| cores | 4 | 500 | n | 25.505782310052 | 0.0596879123454934 |
| nodes | 4 | 500 | n | 24.6156575217621 | 0.150903843592492 |
| none | 4 | 500 | n | 24.3010200256919 | 0.148403243574827 |
| cores | 5 | 500 | n | 26.490176601519 | 0.0554675048309106 |
| nodes | 5 | 500 | n | 25.3086672531992 | 0.177010178787096 |
| none | 5 | 500 | n | 24.9689072440379 | 0.227964099920539 |
| cores | 6 | 500 | n | 25.4592655698564 | 0.0993940994110306 |
| nodes | 6 | 500 | n | 23.7509799506764 | 0.277133274783218 |
| none | 6 | 500 | n | 22.873093079685 | 0.285458099421298 |
| cores | 7 | 500 | n | 24.1039864586029 | 0.126479709689667 |
| nodes | 7 | 500 | n | 21.7328544913934 | 0.268300435798418 |
| none | 7 | 500 | n | 20.7124950044962 | 0.372529986808999 |
| cores | 8 | 500 | n | 22.3904598083879 | 0.191887731743282 |
| nodes | 8 | 500 | n | 19.1094435464418 | 0.460579640975177 |
| none | 8 | 500 | n | 14.6322760727828 | 0.554425827611595 |
| cpubars | Pinning | Nodes | Size | Autogroup | ThroughputMean | ThroughputSd |
|---------+---------+-------+------+-----------+----------------+--------------------|
| with | cores | 8 | 500 | n | 11.676 | 0.0301574813970021 |
| with | none | 8 | 500 | n | 14.9565 | 0.975825022062977 |
| without | cores | 8 | 500 | n | 11.6485 | 0.0464842927630852 |
| without | none | 8 | 500 | n | 12.9545 | 0.37514172760368 |
** Plot
......@@ -331,9 +305,9 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
ymax = ThroughputMean + ThroughputSd,
colour = Pinning
)) +
facet_grid(. ~ Autogroup, labeller = labeller(Autogroup = c(
y = "With autogroup",
n = "Without autogroup"
facet_grid(. ~ cpubars, labeller = labeller(cpubars = c(
with = "With cpubars",
without = "Without cpubars"
))) +
flat_theme$theme +
theme(legend.position = "bottom") +
......@@ -342,7 +316,7 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
#+END_SRC
#+RESULTS:
[[file:output/volrend.png]]
[[file:volrend.png]]
* Flame graph
......
......@@ -17,17 +17,16 @@ This script will run the application with multiple parameters and produce a csv
#+BEGIN_SRC sh
usage() {
cat <<HD
Usage: $0 <pinning> <nodes> <autogroup> <migrations> <repeat>
Usage: $0 <pinning> <nodes> <autogroup> <repeat>
<pinning> list of values among { cores, nodes, subset, none }
<nodes> list of numbers of nodes
<autogroup> whether ('y') or not ('n') autogroup should be enabled
<migrations> whether ('y') or not ('n') migrations should be enabled (using kernel.sched_migrations_cost_ns)
<repeat> the number of time to run the application for each parameter combinations
Run on 64 cores with and without pinning one time each:
>> $0 "cores none" 8 n n 1
>> $0 "cores none" 8 n 1
Run on 1,2,3,4,5,6,7,8 nodes with pinning and without pinning but only the necessary number of cores five times each:
>> $0 "cores subset" "\$(seq 1 8)" n n 5
>> $0 "cores subset" "\$(seq 1 8)" n 5
HD
}
#+END_SRC
......@@ -130,39 +129,33 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
exit 35
fi
if [[ $migrations == "y" ]]; then
sudo sysctl -q kernel.sched_migration_cost_ns=500000
elif [[ $migrations == "n" ]]; then
sudo sysctl -q kernel.sched_migration_cost_ns=-1
else
echo 'Unknown migrations $migrations'
exit 35
fi
logfile_name=$nodes.$pinning.$autogroup.$migrations
logfile_name=$nodes.$pinning.$autogroup
time_file=$APP_LOG_DIR/$logfile_name.time
outfile=$APP_LOG_DIR/$logfile_name.out
errfile=$APP_LOG_DIR/$logfile_name.err
perf_script_file=$APP_LOG_DIR/$logfile_name.script.perf
printf '[%6s][%2d][%s][%s] ' $pinning $nodes $autogroup $migrations
printf '####### [%6s][%2d][%s][%s] #######\n' $pinning $nodes $autogroup $migrations |
printf '[%6s][%2d][%s][%s] ' $pinning $nodes $autogroup
printf '####### [%6s][%2d][%s][%s] #######\n' $pinning $nodes $autogroup |
tee -a $outfile $errfile >/dev/null
time_prefix="/usr/bin/time -f%e -o $time_file -a"
perf_base_prefix="sudo perf record -e sched:sched_migrate_task,sched:sched_switch --call-graph dwarf -F 99"
for i in $(seq 1 $repeat); do
perf_prefix=""
if [[ -z $WITHOUT_PERF ]]; then
if [[ -n $WITH_PERF ]]; then
perf_raw_file="$APP_LOG_DIR/$logfile_name.$i.raw.perf"
perf_prefix="$perf_base_prefix -o $perf_raw_file"
fi
cmd="MR_NUMPROCS=$threads MAPRED_NO_BINDING=1 $perf_prefix $time_prefix $pin_prefix $APP_BIN $APP_INPUTS_ARG $size"
echo "$cmd" | tee -a $outfile $errfile >/dev/null
eval "$cmd" 1>>$outfile 2>>$errfile
printf '.'
printf '%s,%d,%s,%s,%f\n' $pinning $nodes $autogroup $migrations $(tail -1 $time_file) >>$DATAFILE
if [[ -z $WITHOUT_PERF ]]; then
printf '%s,%d,%s,%s,%f\n' $pinning $nodes $autogroup $(tail -1 $time_file) >>$DATAFILE
if [[ -n $WITH_PERF ]]; then
sudo perf script -i $perf_raw_file >> $perf_script_file
sudo rm $perf_raw_file
fi
......@@ -171,32 +164,28 @@ pour que les mesures de performances ne soit pas faussée par les accés disques
avg=$(awk '{ sum += $1 } END { if (NR > 0) print sum / NR; else print NaN }' $time_file)
printf ' | Avg: %6.2f\n' $avg
printf '####### [%6s][%2d][%s][%s] %6.2f #######\n' $pinning $nodes $autogroup $migrations $avg |
printf '####### [%6s][%2d][%s][%s] %6.2f #######\n' $pinning $nodes $autogroup $avg |
tee -a $outfile $errfile >/dev/null
}
sudo cat /etc/os-release >> $APP_LOG_DIR/system
sudo sysctl -a >> $APP_LOG_DIR/system 2>/dev/null
old_autogroup=$(sudo sysctl -n kernel.sched_autogroup_enabled)
old_migration_cost=$(sudo sysctl -n kernel.sched_migration_cost_ns)
echo $old_autogroup > $APP_LOG_DIR/system
echo $old_migration_cost > $APP_LOG_DIR/system
if [[ $# != 5 ]]; then
if [[ $# != 4 ]]; then
usage $0
exit 1
fi
repeat=$5
repeat=$4
for pinning in $1; do
for nodes in $2; do
for autogroup in $3; do
for migrations in $4; do
run $pinning $nodes $autogroup $migrations $repeat
done
run $pinning $nodes $autogroup $repeat
done
done
done
sudo sysctl -q kernel.sched_migration_cost_ns=$old_migration_cost
sudo sysctl -q kernel.sched_autogroup_enabled=$old_autogroup
echo ''
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment