Tencent Cloud CBS devices vary in performance and price by type. For more information, see Cloud Disk Types. Because different applications have different workloads, if the number of I/O requests is low, the cloud disk may not play its full performance.
The following metrics are generally used to measure the performance of a cloud disk:
FIO is a tool for testing disk performance. It is used to perform stress test and verification on hardware. This document uses FIO as an example.
We recommend that you use FIO together with libaio’s I/O engine to perform the test. Please install FIO and libaio with reference to Tool Installation.
- To avoid damaging important files in the system, do not perform FIO test on the system disk.
- To avoid data corruption caused by corruption of the metadata of the underlying file system, do not perform the test on the business data disk.
- Ensure the
/etc/fstab
file DOES NOT contain the mount configuration of the disk to be tested. Otherwise, CVM may fail to launch.
fdisk -lu
As shown below, if the Start value in the command output is divisible by 8, then the disk is 4KiB-aligned. Otherwise, complete 4KiB alignment before testing.yum install libaio -y
yum install libaio-devel -y
yum install fio -y
Once completed, start testing the cloud disk performance as instructed in the test example below.The testing formulas for different scenarios are basically the same, except the rw
, iodepth
, and bs
(block size) parameters. For example, the optimal iodepth
for each workload is different as it depends on the sensitivity of your application to the IOPS and latency.
Parameter description:
Parameter | Remarks | Sample value |
---|---|---|
bs | Block size per request. Valid values include 4k, 8k, and 16k. | 4k |
ioengine | I/O engine. We recommend that you use Linux’s async I/O engine. | libaio |
iodepth | Queue depth of an I/O request. | 1 |
direct | Specifies direct mode.
|
1 |
rw | Read and write mode. Valid values include read, write, randread, randwrite, randrw, and rw, readwrite. | read |
time_based | Specifies that the time mode is used. As long as FIO runs based on the time, it is unnecessary to set this parameter. | N/A |
runtime | Specifies the test duration, which is the FIO runtime. | 600 |
refill_buffers | FIO will refill the I/O buffer at every submission. The default setting is to fill the I/O buffer only at the start and reuse the data. | N/A |
norandommap | When performing random I/O operations, FIO overwrites every block of the file. If this parameter is set, a new offset will be selected without viewing the I/O history. | N/A |
randrepeat | Specifies whether the random sequence is repeatable. True (1) indicates that the random sequence is repeatable. False (0) indicates that the random sequence is not repeatable. The default value is True (1). | 0 |
group_reporting | When multiple jobs are concurrent, statistics for the entire group are printed. | N/A |
name | Name of the job. | fio-read |
size | Address space of the I/O test. | 100GB |
filename | Test object, which is the name of the disk to be tested. | /dev/sdb |
Common use cases are as follows:
bs=4k iodepth=1: random read/write test, which can reflect the latency performance of a disk.
Run the following command to test the random read latency of the disk:
fio -bs=4k -ioengine=libaio -iodepth=1 -direct=1 -rw=randread -time_based -runtime=600 -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randread-lat --size=10G -filename=/dev/vdb
Run the following command to test the random write latency of the disk:
fio -bs=4k -ioengine=libaio -iodepth=1 -direct=1 -rw=randwrite -time_based -runtime=600 -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randwrite-lat --size=10G -filename=/dev/vdb
Run the following command to test the random hybrid read and write latency performance of an SSD cloud disk:
fio --bs=4k --ioengine=libaio --iodepth=1 --direct=1 --rw=randrw --time_based --runtime=100 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-read --size=1G --filename=/dev/vdb
The following figure shows the command output:
bs=128k iodepth = 32: sequential read/write test, can reflect the throughput performance of the disk.
Run the following command to test the sequential read throughput bandwidth:
fio -bs=128k -ioengine=libaio -iodepth=32 -direct=1 -rw=read -time_based -runtime=600 -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-read-throughput --size=10G -filename=/dev/vdb
Run the following command to test the sequential write throughput bandwidth:
fio -bs=128k -ioengine=libaio -iodepth=32 -direct=1 -rw=write -time_based -runtime=600 -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-write-throughput --size=10G -filename=/dev/vdb
Run the following command to test the sequential read throughput performance of an SSD cloud disk:
fio --bs=128k --ioengine=libaio --iodepth=32 --direct=1 --rw=read --time_based --runtime=100 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-rw --size=1G --filename=/dev/vdb
The following figure shows the command output:
bs=4k iodepth=32: random read/write test, can reflect the IOPS performance of the hard disk.
Run the following command to test the random read IOPS of the disk:
fio -bs=4k -ioengine=libaio -iodepth=32 -direct=1 -rw=randread -time_based -runtime=600 -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randread-iops --size=10G -filename=/dev/vdb
Run the following command to test the random write IOPS of the disk:
fio -bs=4k -ioengine=libaio -iodepth=32 -direct=1 -rw=randwrite -time_based -runtime=600 -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randwrite-iops --size=10G -filename=/dev/vdb
Test the random read IOPS performance of the SSD cloud disk. This is shown in the following figure:
Was this page helpful?