mirror of
https://github.com/dchakro/storage-speed-test.git
synced 2024-10-23 08:29:37 -07:00
64 lines
1.7 KiB
Bash
Executable file
64 lines
1.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Created by Alexander aka BioDranik <me@alex.bio> in Minsk, Belarus
|
|
# Modifications by Deepankar Chakroborty (https://github.com/dchakro)
|
|
|
|
set -eu
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "Usage: $0 <path_to_directory_where_to_test_read_and_write_speed>"
|
|
exit 1
|
|
fi
|
|
|
|
SD_DIR=$1
|
|
FILENAME="$SD_DIR/file_speed_test.deleteme"
|
|
read -p "Enter Filesize (Megabytes): " SIZE
|
|
if [[ -n ${SIZE//[0-9]/} ]]; then
|
|
echo "Improper input! File size set to 512MB."
|
|
SIZE=512 # in MB
|
|
fi
|
|
#
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
WRITE_FILE_COMMAND="mkfile ${SIZE}m $FILENAME"
|
|
CLEAR_CACHE_COMMAND="purge"
|
|
else
|
|
WRITE_FILE_COMMAND="dd if=/dev/zero of=$FILENAME bs=1M count=$SIZE oflag=direct"
|
|
CLEAR_CACHE_COMMAND='sh -c echo 3 > /proc/sys/vm/drop_caches'
|
|
fi
|
|
READ_FILE_COMMAND="cat $FILENAME > /dev/null"
|
|
|
|
RunTimeInSeconds() {
|
|
local TIMEFORMAT=%R
|
|
RES=`{ time $@ >/dev/null 2>&1; } 2>&1`
|
|
echo $RES
|
|
}
|
|
|
|
ClearFileCache() {
|
|
if sudo -n false 2>/dev/null; then
|
|
echo "Administrator password is required to clear file cache and get correct read test results."
|
|
fi
|
|
sudo $CLEAR_CACHE_COMMAND
|
|
}
|
|
|
|
WriteFile() {
|
|
echo "Writing ${SIZE}MB file $FILENAME..."
|
|
local WRITE_SECONDS=`RunTimeInSeconds $WRITE_FILE_COMMAND`
|
|
if [ -f "$FILENAME" ]; then
|
|
local WRITE_SPEED=$( echo "scale=2; $SIZE/$WRITE_SECONDS" | bc -l)
|
|
echo "Average sequential write speed: ${WRITE_SPEED}MB/sec."
|
|
else
|
|
echo "Error writing file $FILENAME"
|
|
false
|
|
fi
|
|
}
|
|
|
|
ReadFile() {
|
|
local READ_SECONDS=`RunTimeInSeconds $READ_FILE_COMMAND`
|
|
local READ_SPEED=$( echo "scale=2; $SIZE/$READ_SECONDS" | bc -l)
|
|
echo "Average sequential read speed: ${READ_SPEED}MB/sec."
|
|
}
|
|
|
|
WriteFile
|
|
# Always delete created file on exit.
|
|
trap "rm $FILENAME" 0
|
|
ClearFileCache
|
|
ReadFile
|