Windows System Performance Testing Methods
This document explains how to use the FIO tool to test the performance of CFS on Windows systems, focusing on data read/write metrics such as IOPS, throughput, and latency (excluding metadata).
Prerequisites
- You should already have created the CFS file system to be tested and mounted it on a BCC instance.
- For instructions on creating a CFS file system: Create File System.
- For instructions on mounting/unmounting an SMB-protocol CFS file system on Windows: Mount and Unmount SMB-Protocol CFS on Windows.
- Aside from latency parameters, the performance specifications provided by CFS require concurrent testing at a certain scale to achieve their peak values. It is recommended to use a BCC instance with at least 32 vCPUs as a client for testing, which should suffice for most scenarios. For other specific needs, configure the BCC instance according to actual requirements.
- During performance testing (especially for latency), ensure that both the BCC instance (client) and CFS are in the same availability zone. Cross-availability zone tests produce significantly different results and hold no reference value, so they should be avoided whenever possible.
Background
The FIO tool is recommended for testing CFS performance. Different tools might produce varying performance results for CFS and may not reflect actual performance. The performance parameters provided in this document are all test results using the FIO tool on Windows systems and are intended as references for CFS performance indicators. Specific explanations of performance metrics are included.
- IOPS: The number of data blocks read or written per second, measured in units/second. Benchmark tests for IOPS are recommended for scenarios involving small data blocks (e.g., 512 bytes, 4K, 8K, 16K).
- Throughput: The volume of data read or written per second, measured in GiB/s or MiB/s. Benchmark tests for throughput are ideal for scenarios using large data blocks (e.g., 256K, 512K, 1M).
- Latency: The time required to process a read/write request, measured in milliseconds (ms). Latency tests cover single-threaded and multi-threaded concurrent read/write operations, including metrics like average latency, maximum latency, and the 99.9th percentile latency (the value below which 99.9% of latency measurements fall).
Testing steps
- Remotely sign in to the BCC instance (client).
- To install the FIO testing tool, you can download the installation package in MSI format for installation. For the download link of the FIO installation package, please refer to the official FIO website.
- Mount the CFS to the Z: drive. Take the scenario where the FIO executable file is installed at
C:\Program Files\fio\fio.exeas an example, and execute the following commands on a single Windows BCC instance to test performance. - Run the following commands on a single Linux BCC instance to conduct performance testing.
| Performance testing | Command reference |
|---|---|
| IOPS | ## Random read/write IOPS under 128 concurrency |
| Throughput | ## Sequential read/write throughput under 8 concurrency. Throughput performance is limited by BCC bandwidth. To obtain the most accurate throughput test results, configure the --numjobs parameter appropriately based on the client’s configuration. |
| Latency | ## Read-write latency under single thread |
Note: For multi-threaded tests, configure the --numjobs parameter based on the client’s specifications for optimal results.
Appendix - Explanation of FIO Parameters
The table below outlines the purpose of each FIO parameter used in the test commands.
| Parameters | Description |
|---|---|
| direct | Specifies whether to use direct I/O. Default value: 1. |
| ioengine | Specifies the I/O engine used by FIO for testing. libaio is usually selected, as it better matches common application patterns. For more options, refer to the FIO Official Documentation. |
| rw | Specifies the read/write strategy for testing. Optional values include: |
| bs | Defines the block size for I/O operations. Default value: 4 KiB. You can specify separate read and write values in the format read,write; you may leave one field blank to use the default value for that operation. |
| size | Specifies the size of the test file. FIO will stop testing only after reading/writing the entire specified file size, unless restricted by other options (e.g., runtime). If this parameter is not specified, FIO will use the full size of the given file or device. Size can also be specified as a percentage (1-100%). For example, size=20% means FIO will use 20% of the full size of the given file or device. |
| runtime | Specifies the test duration (i.e., how long FIO runs). If this parameter is not specified, FIO will continue reading/writing the file of the size specified by size (using bs as the block size) until completion. |
| time_based | If a runtime duration is defined, FIO will continue to operate for the specified time, even if the file has been fully read or written. It will repeat the workload as necessary within the given runtime. |
| group_reporting | Sets the display mode for test results. When enabled, the results will display aggregated statistics for each process rather than breaking them down by individual tasks. |
| directory | Defines the mount path of the file system to be tested, such as /mnt/test_perf (replace this example with the actual path in use). |
| name | Designates the name of the test task, which can be assigned arbitrarily. |
| numjobs | Specifies the number of concurrent threads to be used in testing. |
For more detailed explanations of each parameter, see the FIO Official Documentation.
