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
  1. Network test

    Run a network throughput test on a cluster with alias minio1.

    mc support perf net minio1
    
  2. 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
    
  3. 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.

  1. 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 size
    of=/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 directory

    The 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.

  2. 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 performance
    of=/dev/null Write to /dev/null, a virtual file that does not persist after the operation completes
    bs=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 directory

    Use 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 called testfile.

    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
All rights reserved 2024-Present, MinIO, Inc.