diff --git a/disk-test.sh b/disk-test.sh new file mode 100644 index 0000000..c011033 --- /dev/null +++ b/disk-test.sh @@ -0,0 +1,160 @@ +#!/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" \ No newline at end of file