tencent cloud

文档反馈

文件存储性能测试

最后更新时间:2024-05-23 16:40:15
    本文主要介绍如何通过合理的方式对 CFS 云文件系统进行性能测试。

    性能关键指标说明

    时延:处理读写请求的耗时,单位ms。通常基于1MB的文件,采用单流(单线程)的4K 小 IO 进行时延的基准测试。
    IOPS:每秒读写数据块的数量,单位个/s。业内通常基于100MB 的文件,采用并发(多机多线程)的4K 小 IO 进行 IOPS 的基准测试。
    吞吐:每秒读写数据量的大小,单位GiB/s或MiB/s。通常基于100MB 的文件,采用并发(多机多线程)的1M 大 IO 进行吞吐的基准测试。

    注意事项

    CFS 云文件存储所提供的 性能规格,除时延参数外,均需要一定规模和核心数机器进行并发压测才能达到最大值。通常压测时准备16台32C 以上的云服务器作为客户端,可满足大部分场景的压测需求。其他压测需求,可根据实际情况配置对应的云服务器。
    压测 CFS 通用标准型和通用性能型时,因服务端缓存加速的特性,在命中缓存时,读性能会超过标准值,此现象符合预期。
    进行性能压测时,尤其是时延测试,需要保证云服务器(客户端)和 CFS 处于同可用区。跨可用区测试的性能结果会和标准值有较大差异,需尽可能避免。

    操作步骤

    安装压测软件

    CentOs/Tlinux:
    sudo yum install fio
    Ubuntu/Debian
    sudo apt-get install fio

    读时延测试

    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

    写时延测试

    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

    读 IOPS 测试

    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

    写 IOPS 测试

    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

    读吞吐测试

    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

    写吞吐测试

    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 参数说明

    参数
    参数说明
    direct
    表示是否使用 direct I/O。默认值:1。
    值为1:表示使用 direct I/O,忽略客户端 I/O 缓存,数据直写或直读。
    值为0:表示不使用 direct I/O。
    注意:
    此参数无法穿透服务端缓存。
    iodepth
    表示测试时的 IO 队列深度。例如 -iodepth=1表示 FIO 控制请求中的 I/O 最大个数为1。
    rw
    表示测试时的读写策略。您可以设置为:
    randwrite:随机写。
    randread:随机读。
    read:顺序读。
    write:顺序写。
    randrw:混合随机读写。
    说明:
    通常压力测试时,都是基于随机读写。如果需要顺序读写的性能值,可根据需要调整参数。
    ioengine
    表示测试时 FIO 选择哪种 I/O 引擎,通常选择 libaio,保证数据 IO 的异步下发。
    注意:
    压测时如不选择 libaio,其性能瓶颈主要在于 ioengine 上,非存储侧瓶颈。
    bs
    表示 I/O 单元的块大小(block size)。
    size
    表示测试文件大小。
    FIO 会将指定的文件大小全部读/写完成,然后才停止测试,除非受到其他选项(例如运行时)的限制。
    如果未指定该参数,FIO 将使用给定文件或设备的完整大小。也可以将大小作为1到100之间的百分比给出,例如指定 size=20%,FIO 将使用给定文件或设备完整大小的20%空间。
    numjobs
    表示测试的并发线程数。
    runtime
    表示测试时间,即 FIO 运行时长。
    group_reporting
    表示测试结果显示模式。
    如果指定该参数,测试结果会汇总每个进程的统计信息,而不是以不同任务来统计信息。
    directory
    表示待测试的文件系统挂载路径。
    说明:
    选择此参数,FIO 将默认从此路径创建出 numjobs 数量的文件进行压测。存储压测时一定要选择此参数,如果直接指定 filename 是对单个文件进行压测。
    name
    表示测试任务名称,可以根据实际需要设定。
    thread
    使用多线程的方式进行压测,而非多进程。
    time_based
    值为1: 当指定的文件大小读写完之后,自动重复 IO,直到 runtime 参数指定的时间。
    值为0:当指定的文件大小写完之后,立即停止。
    说明:
    通常测试时指定为1,能保证测试程序在指定的时间范围内持续运行。
    说明:
    更多的关于 FIO 压测的参数,可以参考 FIO 文档
    如果需要多机测试,可通过 pshell 同时执行指令即可,或者参考 FIO 文档 配置集群版的压测参数。
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持