Hardware Tests
Recommended hardware tests
AIStor diagnostics
Run the built in health diagnostic tool.
mc support diag ALIAS --airgap
Replace ALIAS with the alias
defined for the server.
AIStor Support diagnostic tools
Run the three mc support perf
tests.
These server-side tests validate network, drive, and object throughput. Run each of the tests with default options.
Alternatively, run all three tests at once with the following command:
mc support perf ALIAS
-
Network test
Run a network throughput test on a cluster with alias
minio1
.mc support perf net minio1
-
Drive test
Run drive read/write performance measurements on all drive on all nodes for a cluster with alias
minio1
. The command uses the default blocksize of 4MiB.mc support perf drive minio1
-
Object test
Measure the performance of S3 read/write of an object on the alias
minio1
. AIStor autotunes concurrency to obtain maximum throughput and IOPS (Input/Output Per Second).mc support perf object minio1
Operating System Diagnostic Tools
If the mc support diag
show unexpected results, you can use the operating system’s default tools.
Test each drive independently on all servers to ensure they are identical in performance. Use the results of these OS-level tools to verify the capabilities of your storage hardware. Record the results for later reference.
-
Test the drive’s performance during write operations
This tests checks a drive’s ability to write new data (uncached) to the drive by creating a specified number of blocks at up to a certain number of bytes at a time to mimic how a drive would function with writing uncached data. This allows you to see the actual drive performance with consistent file I/O.
dd if=/dev/zero of=/mnt/driveN/testfile bs=128k count=80000 oflag=direct conv=fdatasync > dd-write-drive1.txt
Replace
driveN
with the path for the drive you are testing. The following table breaks down the above command and explains what each flag does.Command Element Description dd
The command to copy and paste data. if=/dev/zero
Read from /dev/zero
, an system-generated endless stream of 0 bytes used to create a file of a specified sizeof=/mnt/driveN/testfile
Write to /mnt/driveN/testfile
bs=128k
Write up to 128,000 bytes at a time count=80000
Write up to 80000 blocks of data oflag=direct
Use direct I/O to write to avoid data from caching conv=fdatasync
Physically write output file data before finishing > dd-write-drive1.txt
Write the contents of the operation’s output to dd-write-drive1.txt
in the current working directoryThe operation returns the number of files written, total size written in bytes, the total length of time for the operation (in seconds), and the speed of the writing in some order of bytes per second.
-
Test the drive’s performance during read operations
dd if=/mnt/driveN/testfile of=/dev/null bs=128k iflag=direct > dd-read-drive1.txt
Replace
driveN
with the path for the drive you are testing. The following table breaks down the above command and explains what each flag does.Command Element Description dd
The command to copy and paste data if=/mnt/driveN/testfile
Read from /mnt/driveN/testfile
; replace with the path to the file to use for testing the drive’s read performanceof=/dev/null
Write to /dev/null
, a virtual file that does not persist after the operation completesbs=128k
Write up to 128,000 bytes at a time count=80000
Write up to 80000 blocks of data iflag=direct
Use direct I/O to read and avoid data from caching > dd-read-drive1.txt
Write the contents of the operation’s output to dd-read-drive1.txt
in the current working directoryUse a sufficiently sized file that mimics the primary use case for your deployment to get accurate read test results.
The following guidelines may help during performance testing:
- Small files: < 128KB
- Normal files: 128KB – 1GB
- Large files: > 1GB
You can use the
head
command to create a file to use. The following command example creates a 10 Gigabyte file calledtestfile
.head -c 10G </dev/urandom > testfile
The operation returns the number of files read, total size read in bytes, the total length of time for the operation (in seconds), and the speed of the reading in bytes per second.
IO controller test
Use the Flexible I/O tester (fio
) to test the input/output controller and all drives in combination.
Document the performance numbers for each server in your deployment.
Save the following to a text file as aistor-io-test.fio
[global]
numjobs=8
iodepth=16
bs=4194304
ioengine=sync
direct=1
rw=read
fsync_on_close=1
group_reporting=0
zero_buffers
[drive0-0]
filesize=1000G
filename=/mnt/disk0/minio/0.bin
[drive0-1]
filesize=1000G
filename=/mnt/disk0/minio/1.bin
[drive0-2]
filesize=1000G
filename=/mnt/disk0/minio/2.bin
[drive0-3]
filesize=1000G
filename=/mnt/disk0/minio/3.bin
Modify the drive#-#
sections to match the drives you are testing.
You can modify the other parts of the file if needed:
Parameter | Description |
---|---|
numjobs |
The number of jobs to use for the test. Modify to suit your hardware. |
iodepth |
Leave unchanged for Linux, but for other operating systems, adjusting the value may improve the test performance. |
bs |
Block size unit, in bytes. |
ioengine |
Do not change. Defines the type of read and write to use. Sync mimics what AIStor does. |
direct |
Do not change. Use non-buffered I/O. |
rw |
One of read , write , or rw for the type of I/O pattern to test. |
fsync_on_close |
Do not change. Set to 1 to flush in-core data on each file close. |
group_reporting |
Collates the data on output. |
zero_buffers |
Do not change. Initialize buffers with all zeroes (0 ). |
filesize |
The size of the file to use for testing. |
After modifying the file as needed, run the test with the following command:
fio aistor-io-test.fio