tencent cloud


CFS Storage Performance Testing

Last updated: 2024-05-23 16:40:02
    This document mainly introduces how to perform performance testing on the CFS File System in a reasonable manner.

    Key Performance Metrics Instructions

    Latency: The duration it takes to process read and write requests, measured in milliseconds. Typically, this is benchmarked using a 1 MB file with a single-stream (single-threaded) 4 K small I/O for testing.
    IOPS: The number of data blocks read or written per second, measured in operations per second. In the industry, it is commonly benchmarked using a 100 MB file through concurrent (multi-host, multi-threaded) 4 K small I/O for testing.
    Throughput: The amount of data read or written per second, measured in GiB/s or MiB/s. Typically, this is benchmarked using a 100 MB file with concurrent (multi-host, multi-threaded) 1 M large I/O for testing.


    CFS's provided Performance Specifications , excluding latency parameters, all require a certain scale of machines with a sufficient number of cores to conduct concurrency stress testing to reach their maximum values. Typically, preparing 16 cloud servers with more than 32C as clients can meet the needs of most testing scenarios. For other stress testing requirements, cloud servers can be configured according to actual situations.
    When stress testing CFS's General Standard and General Performance types, due to the server-side cache acceleration feature, read performance may exceed the standard values when cache hits occur. This is an expected phenomenon.
    During performance stress testing, especially latency tests, it is necessary to ensure that the CVMs (clients) and CFS are located within the same availability zone. Performance results from cross-availability zone tests will significantly differ from standard values and should be avoided as much as possible.


    Installing Stress Testing Software

    sudo yum install fio
    sudo apt-get install fio

    Read Latency Testing

    fio -directory=/path/to/cfs -iodepth=1 -time_based=1 -thread -direct=1 -ioengine=libaio -rw=randread -bs=4K -size=1M -numjobs=1 -runtime=60 -group_reporting -name=cfs_test

    Write Latency Testing

    fio -directory=/path/to/cfs -iodepth=1 -time_based=1 -thread -direct=1 -ioengine=libaio -rw=randwrite -bs=4K -size=1M -numjobs=1 -runtime=60 -group_reporting -name=cfs_test

    Read IOPS Testing

    fio -directory=/path/to/cfs -iodepth=1 -time_based=1 -thread -direct=1 -ioengine=libaio -rw=randread -bs=4K -size=100M -numjobs=128 -runtime=60 -group_reporting -name=cfs_test

    Write IOPS Testing

    fio -directory=/path/to/cfs -iodepth=1 -time_based=1 -thread -direct=1 -ioengine=libaio -rw=randwrite -bs=4K -size=100M -numjobs=128 -runtime=60 -group_reporting -name=cfs_test

    Read Throughput Testing

    fio -directory=/path/to/cfs -iodepth=1 -time_based=1 -thread -direct=1 -ioengine=libaio -rw=randread -bs=1M -size=100M -numjobs=128 -runtime=60 -group_reporting -name=cfs_test

    Write Throughput Testing

    fio -directory=/path/to/cfs -iodepth=1 -time_based=1 -thread -direct=1 -ioengine=libaio -rw=randwrite -bs=1M -size=100M -numjobs=128 -runtime=60 -group_reporting -name=cfs_test

    FIO Parameter Description

    Parameter Description
    Indicates whether to use direct I/O. Default value is 1.
    Value of 1: Indicates to use direct I/O, and ignores the client's I/O cache, with data being written or read directly.
    Value of 0: Indicates not to use direct I/O.
    This parameter cannot bypass server-side caching.
    Indicates the I/O queue depth during testing. For example, -iodepth=1 means the maximum number of I/Os in an FIO control request is 1.
    Indicates the read/write strategy during testing. You can set it to:
    randwrite: random write
    randread: random read
    read: sequential read
    write: sequential write
    randrw: mixed random read and write
    Usually, during stress testing, random read/write are used. If sequential read/write performance metrics are required, parameters can be adjusted accordingly.
    Indicates which I/O engine FIO should use during testing. Usually libaio is chosen to ensure asynchronous issuance of data IO.
    If libaio is not chosen during stress testing, the performance bottleneck is mainly on the ioengine, not on the storage side.
    Indicates the block size of the I/O unit.
    Indicates the testing file size.
    FIO will read/write the specified file size in its entirety before stopping the test. Unless it is limited by other options (such as runtime).
    If this parameter is not specified, FIO will use the full size of the given file or device. The size can also be given as a percentage between 1 and 100. For example, if size=20% is specified, FIO will use 20% of the full size of the given file or device.
    Indicates the number of concurrent threads for the testing.
    Indicates the testing duration. It is the FIO execution duration.
    Indicates the testing results display mode.
    If this parameter is specified, the testing results will summarize the statistical information for each process, instead of for different tasks.
    Indicates the file system mount point to be tested.
    When this parameter is chosen, FIO will by default create files at this path, the number of which equals numjobs, for stress testing. This parameter is mandatory for storage stress testing, as specifying a filename directly targets a single file testing.
    Indicates the name of the testing task. It can be set according to actual needs.
    Conduct stress testing using multi-threading rather than multi-processing.
    The value is set to 1: After the specified file size has been fully read and written, I/O operations are automatically repeated until the time specified by the runtime parameter expires.
    The value is set to 0: Testing stops immediately upon completion of reading and writing the specified file size.
    Typically, the value is set to 1 during testing, which can ensure that the testing program runs continuously within the specified time period.
    For more parameters about FIO stress testing, see the FIO documentation.
    For testing across multiple machines, commands can be concurrently executed using pshell. Or see the FIO documentation to configure the cluster edition stress testing parameters.
    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support