Viewing: README
Usage: [IABF_OPTIONS...] iabf [INIT] --- A --- B --- [FINI] ---
Initialize, run tasks A and B with various overlaps, and Finalize.
Command lines for INIT, A, B, and FINI are terminated by ---.
If INIT or FINI is empty then it will be skipped.
If INIT or FINI fail then we exit immediately with status 1.
For delay = $IABF_DELAY_BEGIN_NS; delay < $IABF_DELAY_END_NS; delay += $IABF_DELAY_STEP_NS
Run initializer (INIT).
In parallel: Fork, delay *, and exec processes A and B.
If delay is negative then delay A by abs(delay) ns.
Otherwise delay B by delay ns.
Wait for A and B to terminate.
Run finilizer (FINI).
To autotune IABF_DELAY_*, omit any or all of these variables and set
IABF_STEP_COUNT to the desired number of iterations and iabf will run
tasks A and B $IABF_AUTOTUNE_COUNT (16) times to determine their
expected elapsed runtimes. It will then choose IABF_DELAY_BEGIN_NS and
IABF_DELAY_ED_NS to try to arrange as much overlap coverage as
possible:
AAAAAAAAAA delay(A) is approx elapsed(B)
BBBBB delay(B) == 0
AAAAAAAAAA delay(A) < elapsed(B)
BBBBB delay(B) == 0
AAAAAAAAAA delay(A) == 0
BBBBB delay(B) == 0
AAAAAAAAAA delay(A) == 0
BBBBB delay(B) < elapsed(A)
AAAAAAAAAA delay(A) == 0
BBBBB delay(B) is approx elapsed(A)
ENVIRONMENT VARIABLES:
IABF_DELAY_BEGIN_NS=N
IABF_DELAY_END_NS=N
IABF_DELAY_STEP_NS=N
IABF_AFFINITY='0 1 7' run task A on CPU 0, task B on CPU 1, main task on CPU 7.
IABF_AUTOTUNE_COUNT=COUNT set autotune count
IABF_DEBUG=[01]
IABF_STEP_COUNT=COUNT set number of steps when autotuning
EXAMPLES:
IABF_DELAY_BEGIN_NS=000000000 IABF_DELAY_END_NS=200000000 IABF_DELAY_STEP_NS=100000 \
iabf rm -f /mnt/lustre/f0 --- \
dd if=/dev/zero of=/mnt/lustre/f0 bs=1M count=16 conv=notrunc --- \
truncate /mnt/lustre2/f0 $(( 5 * 1048576)) --- \
---
IABF_STEP_COUNT=4096 \
IABF_AFFINITY='0 1 2' \
iabf dd if=/dev/zero of=/mnt/lustre/f0 bs=1M count=128 --- \
dd if=/mnt/lustre2/f0 of=/dev/null bs=1M --- \
truncate /mnt/lustre/f0 $((5 << 20)) --- \
rm /mnt/lustre/f0 ---
TODO
* Start with a coarse step value (10ms or something) and refine.
* Add options to stop on failure of A and/or B.