Skip to content

Instantly share code, notes, and snippets.

@kmarsh
Created June 13, 2024 22:47
Show Gist options
  • Save kmarsh/6b2c322628c29042fd5b51e82c9568e8 to your computer and use it in GitHub Desktop.
Save kmarsh/6b2c322628c29042fd5b51e82c9568e8 to your computer and use it in GitHub Desktop.

Revisions

  1. kmarsh created this gist Jun 13, 2024.
    51 changes: 51 additions & 0 deletions disk-benchmark.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,51 @@
    #!/bin/bash
    set -e

    # Raspberry Pi HDD/SDD benchmark script.
    #
    # A script I use to automate the running and reporting of benchmarks I compile
    # for my YouTube channel.
    #
    # Usage:
    # # Run it locally (overriding mount path and test size).
    # $ sudo MOUNT_PATH=/mnt/sda1 TEST_SIZE=1g ./disk-benchmark.sh
    #
    # # Run it straight from GitHub (with default options).
    # $ curl https://raw.githubusercontent.com/geerlingguy/pi-cluster/master/benchmarks/disk-benchmark.sh | sudo bash
    #
    # Author: Jeff Geerling, 2024

    printf "\n"
    printf "Disk benchmarks\n"

    # Variables.
    MOUNT_PATH=${MOUNT_PATH:-"/"}
    TEST_SIZE="100m"
    printf "Running iozone 4K / 1024K read and write tests...\n"
    iozone_result=$(./iozone -e -I -a -s $TEST_SIZE -r 4k -r 1024k -i 0 -i 1 -i 2 -f $MOUNT_PATH/iozone | cut -c7-78 | tail -n6 | head -n4)
    echo -e "$iozone_result"
    printf "\n"

    random_read_4k=$(echo -e "$iozone_result" | awk 'FNR == 3 {printf "%.2f", $7/(1024)}')
    random_write_4k=$(echo -e "$iozone_result" | awk 'FNR == 3 {printf "%.2f", $8/(1024)}')
    random_read_1024k=$(echo -e "$iozone_result" | awk 'FNR == 4 {printf "%.2f", $7/(1024)}')
    random_write_1024k=$(echo -e "$iozone_result" | awk 'FNR == 4 {printf "%.2f", $8/(1024)}')
    sequential_read_1024k=$(echo -e "$iozone_result" | awk 'FNR == 4 {printf "%.2f", $6/(1024)}')
    sequential_write_1024k=$(echo -e "$iozone_result" | awk 'FNR == 4 {printf "%.2f", $4/(1024)}')
    cat << EOF
    # --- Copy and paste the result below ---
    | Benchmark | Result |
    | -------------------------- | ------ |
    | iozone 4K random read | $random_read_4k MB/s |
    | iozone 4K random write | $random_write_4k MB/s |
    | iozone 1M random read | $random_read_1024k MB/s |
    | iozone 1M random write | $random_write_1024k MB/s |
    | iozone 1M sequential read | $sequential_read_1024k MB/s |
    | iozone 1M sequential write | $sequential_write_1024k MB/s |
    # --- End result ---
    EOF
    printf "\n"

    printf "Disk benchmark complete!\n\n"