160 lines
No EOL
5.4 KiB
Bash
160 lines
No EOL
5.4 KiB
Bash
#!/bin/bash
|
|
|
|
# Standaardduur in seconden (bijvoorbeeld 60 seconden)
|
|
DEFAULT_DURATION=60
|
|
DURATION=$DEFAULT_DURATION
|
|
|
|
# Aantal runs
|
|
DEFAULT_REPEATS=5
|
|
REPEATS=$DEFAULT_REPEATS
|
|
|
|
# Standaard slaaptijd tussen runs
|
|
DEFAULT_SLEEPTIME=60
|
|
SLEEPTIME=$DEFAULT_SLEEPTIME
|
|
|
|
# Uitvoer CSV-bestand
|
|
CSV_FILE="results.csv"
|
|
|
|
# Functie voor het verwijderen van het CSV-bestand
|
|
delete_csv() {
|
|
if [ -f "$CSV_FILE" ]; then
|
|
echo "Het CSV-bestand '$CSV_FILE' bestaat al en wordt verwijderd."
|
|
rm "$CSV_FILE"
|
|
fi
|
|
}
|
|
|
|
# Functie om argumenten te verwerken
|
|
while [[ "$#" -gt 0 ]]; do
|
|
case "$1" in
|
|
-d|--delete)
|
|
delete_csv
|
|
shift
|
|
;;
|
|
-t|--duration)
|
|
if [[ -n "$2" && "$2" =~ ^[0-9]+$ ]]; then
|
|
DURATION=$2
|
|
echo "Duur van de test ingesteld op $DURATION seconden."
|
|
shift 2
|
|
else
|
|
echo "Fout: je moet een geldige numerieke waarde voor de duur opgeven."
|
|
exit 1
|
|
fi
|
|
;;
|
|
-r|--repeats)
|
|
if [[ -n "$2" && "$2" =~ ^[0-9]+$ ]]; then
|
|
REPEATS=$2
|
|
echo "Aantal runs ingesteld op $REPEATS."
|
|
shift 2
|
|
else
|
|
echo "Fout: je moet een geldige numerieke waarde voor runs opgeven."
|
|
exit 1
|
|
fi
|
|
;;
|
|
-s|--sleep)
|
|
if [[ -n "$2" && "$2" =~ ^[0-9]+$ ]]; then
|
|
SLEEPTIME=$2
|
|
echo "slaaptijd ingesteld op $SLEEPTIME seconden."
|
|
shift 2
|
|
else
|
|
echo "Fout: je moet een geldige numerieke waarde voor slaaptijd opgeven."
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Ongeldig argument: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Maak het CSV-bestand aan met headers
|
|
echo "run,slaaptijd,timestamp,duration,read_bw_mbps,write_bw_mbps,read_iops,write_iops,avg_latency" > "$CSV_FILE"
|
|
|
|
# Variabelen voor het berekenen van gemiddelden
|
|
total_read_bw=0
|
|
total_write_bw=0
|
|
total_read_iops=0
|
|
total_write_iops=0
|
|
total_latency=0
|
|
|
|
# Loop voor meerdere tests
|
|
for ((i=1; i<=REPEATS; i++))
|
|
do
|
|
echo "Test $i van de $REPEATS runs..."
|
|
|
|
# FIO uitvoeren
|
|
fio_output=$(fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --bs=4k \
|
|
--iodepth=64 --readwrite=randrw --rwmixread=75 --size=4G --filename=./fio.file \
|
|
--lat_percentiles=1 --output-format=json --time_based --runtime=$DURATION --group_reporting)
|
|
|
|
# Extract FIO metrics
|
|
fio_read_iops=$(echo "$fio_output" | jq -r '.jobs[0].read.iops')
|
|
fio_write_iops=$(echo "$fio_output" | jq -r '.jobs[0].write.iops')
|
|
fio_read_bw_kbps=$(echo "$fio_output" | jq -r '.jobs[0].read.bw')
|
|
fio_write_bw_kbps=$(echo "$fio_output" | jq -r '.jobs[0].write.bw')
|
|
fio_read_bw_mbps=$(echo "scale=2; $fio_read_bw_kbps / 1024" | bc)
|
|
fio_write_bw_mbps=$(echo "scale=2; $fio_write_bw_kbps / 1024" | bc)
|
|
|
|
# Ioping uitvoeren
|
|
ioping_output=$(ioping -c $DURATION ./)
|
|
avg_latency=$(echo "$(echo "$ioping_output" | grep 'min/avg/max/mdev' | awk '{print $6}')")
|
|
|
|
# Timestamp voor de CSV
|
|
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
|
|
# Variabelen omzetten naar 2 decimalen
|
|
fio_read_iops=$(printf "%.2f" $fio_read_iops)
|
|
fio_write_iops=$(printf "%.2f" $fio_write_iops)
|
|
|
|
# Resultaten exporteren naar CSV
|
|
echo "$i / $REPEATS,$SLEEPTIME seconden,$timestamp,$DURATION seconden,$fio_read_bw_mbps,$fio_write_bw_mbps,$fio_read_iops,$fio_write_iops,$avg_latency us" >> "$CSV_FILE"
|
|
|
|
# Tel de waarden op voor gemiddelde berekening (zorg ervoor dat de waarden decimaal zijn)
|
|
total_read_bw=$(echo "$total_read_bw + $fio_read_bw_mbps" | bc)
|
|
total_write_bw=$(echo "$total_write_bw + $fio_write_bw_mbps" | bc)
|
|
total_read_iops=$(echo "$total_read_iops + $fio_read_iops" | bc)
|
|
total_write_iops=$(echo "$total_write_iops + $fio_write_iops" | bc)
|
|
total_latency=$(echo "$total_latency + $avg_latency" | bc)
|
|
|
|
# Opruimen
|
|
rm -rf fio.file
|
|
|
|
# Resultaten tonen
|
|
echo "==== Instellingen ===="
|
|
echo "Run: $i / $REPEATS"
|
|
echo "Slaaptijd: $SLEEPTIME seconden"
|
|
echo "Tijd: $DURATION seconden"
|
|
echo "======================"
|
|
|
|
echo "=== FIO Resultaten ==="
|
|
echo "Read Bandwidth (MB/s): $fio_read_bw_mbps"
|
|
echo "Write Bandwidth (MB/s): $fio_write_bw_mbps"
|
|
echo "Read IOPS: $fio_read_iops"
|
|
echo "Write IOPS: $fio_write_iops"
|
|
echo "======================"
|
|
|
|
echo "=== Ioping Resultaten ==="
|
|
echo "Gemiddelde Latency: $avg_latency us"
|
|
echo "========================="
|
|
|
|
# Wacht 60 seconden voor de volgende test
|
|
if [[ $i -lt $REPEATS ]]; then
|
|
echo "Wacht $SLEEPTIME seconden voor de volgende test..."
|
|
sleep $SLEEPTIME
|
|
fi
|
|
done
|
|
|
|
# Alleen de gemiddelden berekenen als er 2 of meer herhalingen zijn
|
|
if [[ $REPEATS -ge 2 ]]; then
|
|
# Bereken de gemiddelde waarden na alle runs
|
|
avg_read_bw=$(echo "scale=2; $total_read_bw / $REPEATS" | bc)
|
|
avg_write_bw=$(echo "scale=2; $total_write_bw / $REPEATS" | bc)
|
|
avg_read_iops=$(echo "$total_read_iops / $REPEATS" | bc)
|
|
avg_write_iops=$(echo "$total_write_iops / $REPEATS" | bc)
|
|
avg_latency=$(echo "scale=2; $total_latency / $REPEATS" | bc)
|
|
|
|
# Voeg de gemiddelde waarden toe aan het CSV-bestand
|
|
echo "Gemiddelden,,,,$avg_read_bw,$avg_write_bw,$avg_read_iops,$avg_write_iops,$avg_latency us" >> "$CSV_FILE"
|
|
fi
|
|
|
|
echo "Alle tests zijn voltooid. Resultaten zijn opgeslagen in $CSV_FILE" |