It’s essential to know the disk performance of your cloud compute, and it helps to plan and architect workload effectively. Often, architectures for cloud workloads run aground on the rocky shoals of unexpected poor storage performance. To prevent problems from beginning, knowing how fast your disks and filesystems has become important. This post shows you how to measure disk performance on Oracle Cloud Block Volume service.
We use FIO commands to measure disk performance. FIO is a free and open source tool that can be used for performance benchmarking. It supports many operating systems, including Oracle Linux, Windows, RHEL, and OpenBSD.
To get raw performance of a persistent disk, I created a 1-TB block volume and attached it to an Oracle Linux Compute instance. If you want to know how, see Attaching a Volume in the documentation.
I then connected to the instance and installed FIO.
Oracle Cloud Block Volume has three types of elastic performance options. The following table lists the performance characteristics for each elastic performance level. For more information, see Block Volume Elastic Performance.
Performance level |
IOPS/GB |
Max IOPS per volume |
Throughput per GB (KB/s per GB) |
Max throughput per volume (MB/s per volume) |
VPUs/GB |
Lower cost |
2 |
3000 |
240 |
Up to 480 |
0 |
Balanced |
60 |
25,000 |
480 |
480 |
10 |
Higher performance |
75 |
35,000 |
600 |
480 |
20 |
Let’s see what results I got for my 1-TB balanced performance block volume.
sudo fio --filename=/dev/sdb --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1 –readonly
sudo fio --filename=/dev/sdb --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=64 --runtime=120 --numjobs=4 --time_based --group_reporting --name=throughput-test-job --eta-newline=1 --readonly
sudo fio --filename=/dev/sdb --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=1 --numjobs=1 --time_based --group_reporting --name=readlatency-test-job --runtime=120 --eta-newline=1 --readonly
From the three results, we’re getting the maximum 25,000 IOPs from random read test, 119 MiB/s from throughput performance, and between 264 microseconds–21 milliseconds from latency performance test, on the 1-TB block volume. We’ve configured to use Linux native AIO (using the ioengine=libaio parameter in FIO command), so the Linux caching system doesn’t interfere with these results.
To verify the obtained results are sufficient for the required workloads, a good approach is to gather the IOPs requirements from proof of concepts testing. The IOPS requirements vary based on the types of environments and workloads (eg, file systems, databases, high-throughput workloads). It is also important to know the number of users accessing the systems. When we gathered the requirements, we could allocate adequate storage to have sufficient IOPs.
Balanced performance option provides 60 IOPs per GB up to 25,000 IOPs per volume. High I/O workloads, such as large databases, are recommended to run on the High Performance option, which provides 75 IOPs per GB up to 35,000 IOPs per volume.
You can start doing the same performance tests to compare Oracle Cloud Block Volume in Compute. Knowing the disk performance helps you plan and architect workload on Oracle Cloud effectively. Sign up for a free trial today!