Commit ffe497f0 authored by Florian Fischer's avatar Florian Fischer
Browse files

make evaluation modes selectable

parent 8271e71f
Pipeline #82027 passed with stage
in 1 minute and 25 seconds
......@@ -22,8 +22,6 @@ if [ -d "$OUT" ]; then
mv "$OUT" "$OUT"-"$ctime"
fi
mkdir -p "${OUT}"/{latency,throughput}
NUMA_ARGS=--measure-cmd="numactl --cpunodebind=netdev:10gbe-card-p1 /usr/bin/time -o {BENCHDIR}/server_stats.{RUN}.txt -v"
COMMON_ARGS=(--ssh-port "${SSH_PORT}" --host "${HOST}" --perf-energy)
......@@ -40,77 +38,92 @@ COMMON_ARGS_LATENCY=(${COMMON_ARGS[@]} --data-dir ${OUT}/latency \
echo "muhq's MA io eval"
echo 'Writing results to' "$OUT"
echo 'arguments:' "${COMMON_ARGS[@]}"
echo 'throughput-arguments:' "${COMMON_ARGS_THROUGHPUT[@]}"
echo 'latency-arguments:' "${COMMON_ARGS_LATENCY[@]}"
# Baseline measurements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f vanilla vanilla-200us -- emper
# No sleep measurements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f no-sleep no-sleep-0us-1ms -- emper
# Measure parsimonious sem
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f parsimonious-sem -- emper
# Measure registering io_uring fd's improvements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f not-register-iouring -- emper
# Measurements comparing runtimes
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -- go go-200us tokio tokio-200us
# Measurements showing distributed design improvements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f simple-arch simple-arch-try-syscall -- emper
# Measurements showing linked future improvements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f linked-futures -- emper
# Measurements showing sleep strategies
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f pipe waitfd -- emper
# Measurements showing completer, stealing, notification benefits
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
io-stealing \
pipe-no-comp io-stealing-pipe-no-comp \
waitfd-no-comp io-stealing-waitfd-no-comp \
io-notification-waitfd-no-comp \
-- emper
# Measurements showing completer, stealing notification benefits with computation
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
vanilla-0us-1ms io-stealing-0us-1ms \
pipe-0us-1ms pipe-no-comp-0us-1ms \
io-stealing-pipe-no-comp-0us-1ms \
waitfd-0us-1ms waitfd-no-comp-0us-1ms \
io-stealing-waitfd-no-comp-0us-1ms \
io-notification-waitfd-no-comp-0us-1ms \
-- emper
# Measurements waitfree notification variants benefits
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
io-notification-waitfree io-notification-waitfree-no-comp \
io-notification-waitfree-0us-1ms io-notification-waitfree-no-comp-0us-1ms \
-- emper
# Measure lockless stealing variants seperatly because they are not reliable
# and thus easier to skip
#./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
#io-stealing-lockless \
#io-stealing-pipe-no-comp-lockless \
#io-stealing-waitfd-no-comp-lockless \
#io-notification-waitfd-no-comp-lockless \
#io-stealing-pipe-no-comp-lockless-0us-1ms \
#io-stealing-waitfd-no-comp-lockless-0us-1ms \
#io-notification-waitfd-no-comp-lockless-0us-1ms \
#io-notification-waitfree-no-comp-lockless \
#io-notification-waitfree-no-comp-lockless-0us-1ms \
#-- emper
# Latency evaluation
./eval.py "${COMMON_ARGS_LATENCY[@]}" -f vanilla-200us vanilla-0us-1ms no-sleep-0us-1ms \
-- emper go-200us tokio-200us
./eval.py "${COMMON_ARGS_LATENCY[@]}" -f \
{pipe,waitfd}{,-no-comp}-{200us,0us-1ms} \
io-stealing-{pipe,waitfd}-no-comp-{200us,0us-1ms} \
io-notification-{,waitfree-}waitfd-no-comp-{200us,0us-1ms} \
-- emper
## Baseline measurements
eval_throughput() {
echo "Measuring throughput"
echo 'throughput-arguments:' "${COMMON_ARGS_THROUGHPUT[@]}"
mkdir -p "${OUT}"/throughput
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f vanilla vanilla-200us -- emper
# No sleep measurements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f no-sleep no-sleep-0us-1ms -- emper
# Measure parsimonious sem
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f parsimonious-sem -- emper
# Measure registering io_uring fd's improvements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f not-register-iouring -- emper
# Measurements comparing runtimes
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -- go go-200us tokio tokio-200us
# Measurements showing distributed design improvements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f simple-arch simple-arch-try-syscall -- emper
# Measurements showing linked future improvements
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f linked-futures -- emper
# Measurements showing sleep strategies
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f pipe waitfd -- emper
# Measurements showing completer, stealing, notification benefits
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
io-stealing \
pipe-no-comp io-stealing-pipe-no-comp \
waitfd-no-comp io-stealing-waitfd-no-comp \
io-notification-waitfd-no-comp \
-- emper
# Measurements showing completer, stealing notification benefits with computation
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
vanilla-0us-1ms io-stealing-0us-1ms \
pipe-0us-1ms pipe-no-comp-0us-1ms \
io-stealing-pipe-no-comp-0us-1ms \
waitfd-0us-1ms waitfd-no-comp-0us-1ms \
io-stealing-waitfd-no-comp-0us-1ms \
io-notification-waitfd-no-comp-0us-1ms \
-- emper
# Measurements waitfree notification variants benefits
./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
io-notification-waitfree io-notification-waitfree-no-comp \
io-notification-waitfree-0us-1ms io-notification-waitfree-no-comp-0us-1ms \
-- emper
# Measure lockless stealing variants seperatly because they are not reliable
# and thus easier to skip
#./eval.py "${COMMON_ARGS_THROUGHPUT[@]}" -f \
#io-stealing-lockless \
#io-stealing-pipe-no-comp-lockless \
#io-stealing-waitfd-no-comp-lockless \
#io-notification-waitfd-no-comp-lockless \
#io-stealing-pipe-no-comp-lockless-0us-1ms \
#io-stealing-waitfd-no-comp-lockless-0us-1ms \
#io-notification-waitfd-no-comp-lockless-0us-1ms \
#io-notification-waitfree-no-comp-lockless \
#io-notification-waitfree-no-comp-lockless-0us-1ms \
#-- emper
}
eval_latency() {
## Latency evaluation
echo "Measuring latency"
echo 'latency-arguments:' "${COMMON_ARGS_LATENCY[@]}"
mkdir -p "${OUT}"/latency
./eval.py "${COMMON_ARGS_LATENCY[@]}" -f {no-sleep,vanilla}-{200us,0us-1ms} \
-- emper go-200us tokio-200us
./eval.py "${COMMON_ARGS_LATENCY[@]}" -f \
{pipe,waitfd}{,-no-comp}-{200us,0us-1ms} \
io-stealing-{pipe,waitfd}-no-comp-{200us,0us-1ms} \
io-notification-{,waitfree-}waitfd-no-comp-{200us,0us-1ms} \
-- emper
}
[[ "${EVAL_THROUGHPUT:=true}" != "false"]] && eval_throughput
[[ "${EVAL_LATENCY:=true}" != "false"]] && eval_latency
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