By digoal
Hard disks tested with different tools may produce different performance results. For example, test parameters and file systems may affect testing tools such as dd, sysbench, and iometer, thus causing inaccurate results. The performance parameters in this article are the result of FIO tests on Linux, which also serve as the references for the performance of Alibaba Cloud block storage products. We recommend FIO for testing the block storage performance on Linux and Windows instances.
1) Before the test, ensure that the file system is aligned in 4K.
parted -a optimal -s /dev/vdj mklabel gpt mkpart primary 1MiB 100%FREE
mkfs.ext4 /dev/vdj1 -m 0 -O extent,uninit_bg -E lazy_itable_init=1 -b 4096 -T largefile -L vdj1
vi /etc/fstab
LABEL=vdj1 /data02 ext4 defaults,noatime,nodiratime,nodelalloc,barrier=0,data=writeback 0 0
mkdir /data02
mount -a
2) Run the following commands in sequence to install libaio and FIO.
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install libaio –y
sudo yum install libaio-devel –y
sudo yum install fio -y
We recommend the page size of the database or the WAL size for the test.
1) Random write IOPS (4 KB for single I/O):
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
2) Random read IOPS (4KB for single I/O):
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
3) Sequential write throughput (write bandwidth) (1024 KB for single I/O):
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
4) Sequential read throughput (read bandwidth) (1024 KB for single I/O):
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing
5) Random write latency (4 KB for single I/O):
fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=iotest -name=Rand_Write_Latency_Testing
6) Random read latency (4KB for single I/O):
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=iotest -name=Rand_Read_Latency_Testingrandwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=iotest -name=Rand_Write_Latency_Testing
The following test commands are applicable only to local NVMe SSD disks. Write to the disk directly. If there are file systems and contents on your disk, don’t test them directly. Instead, change /dev/vdx
of the filename to the absolute path of the filename.
1) Random write IOPS (4 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
2) Random read IOPS (4 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
3) Sequential write throughput (write bandwidth) (128 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
4) Sequential read throughput (read bandwidth) (128 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
5) Random write latency (4 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
6) Random read latency (4 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
7) Sequential write latency (4 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=1 -rw=write -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
8) Sequential read latency (4 KB for single I/O):
# 如果您的磁盘里面有文件系统和内容,千万不要直接测试,可以把filename的/dev/vdx改成文件名绝对路径。
fio -direct=1 -iodepth=1 -rw=read -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/vdx -name=test
Take the random write IOPS (randwrite) of the cloud disk test as an example. The following table describes the FIO parameters.
Parameter | Description |
---|---|
-direct=1 | The I/O buffer is ignored during the test and data is written directly. |
-iodepth=128 | When asynchronous I/O (AIO) is used, up to 128 I/O requests can be made concurrently. |
-rw=randwrite | Random writes are selected as the read/write policy during tests. In other tests, the policy can be set as: randread (random reads), read (sequential reads), write (sequential writes), or randrw (mixed random reads and writes) |
-ioengine=libaio | libaio (Linux AIO, asynchronous I/O) is selected for the test. I/O is usually used in applications in two ways. Synchronously: Synchronous I/O sends only one I/O request at a time and the request is not returned until the kernel completes it. In this case, the iodepth is always less than 1 for a single thread. Concurrent execution of multiple threads can serve as a solution here. Usually, 16 to 32 threads run in parallel to fill the iodepth. Asynchronously: Asynchronous I/O sends a batch of I/O requests at a time through libaio and waits until all of them are completed. This reduces the number of interactions and increases interaction efficiency. |
-bs=4k | The size of the block file for a single I/O is 4 KB, which is also the default size. We recommend setting bs to a small value such as 4k when testing IOPS. We also recommend setting bs to a large value such as 1024k when testing throughput. |
-size=1G | The size of the test file is 1 GB. |
-numjobs=1 | The number of test threads is 1. |
-runtime=1000 | The test duration is 1,000 seconds. If not specified, the size of the file is specified by the above. -size is written in blocks of the size specified by -bs. |
-group_reporting | Statistics for each thread are displayed in the test results, not in different jobs. |
-filename=iotest | The name of the test file is iotest. |
-name=Rand_Write_Testing | The name of the test task is Rand_Write_Testing. You can specify the name as needed. |
Alibaba Cloud: How to Use FIO to Test the IO Performance of ECS Local SSD and ESSD (Part 2)
digoal - May 24, 2021
digoal - May 19, 2021
Alibaba Cloud ECS - April 18, 2019
Alibaba Cloud Community - April 25, 2022
Alibaba Clouder - May 15, 2018
Alibaba Cloud Native - May 23, 2022
Alibaba Cloud PolarDB for PostgreSQL is an in-house relational database service 100% compatible with PostgreSQL and highly compatible with the Oracle syntax.
Learn MoreAn online MPP warehousing service based on the Greenplum Database open source program
Learn MoreThis solution helps Internet Data Center (IDC) operators and telecommunication operators build a local public cloud from scratch.
Learn MorePlan and optimize your storage budget with flexible storage services
Learn MoreMore Posts by digoal