测试实例性能

本页面介绍了 Filestore 实例的性能测试。

概览

如果您使用的是 Linux,则可以使用 Flexible IO Tester (fio) 工具来对基本层级、区域级、可用区级和企业 层级 实例的读取吞吐量、写入吞吐量、读取 IOPS 和写入 IOPS 进行基准化分析。

您可以使用单个客户端虚拟机测试基本实例的性能。 我们不建议使用单个客户端虚拟机来测试区域级、可用区级或企业层级实例,因为扩容服务层级针对多个客户端虚拟机进行了性能优化,而单个客户端通常无法实现集群 IOPS 或吞吐量的上限。

如需了解详情,请参阅单个和多个客户端虚拟机的性能

前期准备

在所有客户端虚拟机上装载要测试的 Filestore 文件共享。客户端虚拟机的数量可能是一个或多个,具体取决于服务层级。如需了解详细说明和装载选项,请参阅在 Compute Engine 客户端上装载文件共享

请务必指定 nconnect 装载选项,以提高 NFS 性能。对于特定服务层级,我们建议指定客户端与服务器之间的以下连接数:

层级 容量 连接数
区域级、可用区级 1-9.75 TiB nconnect=2
区域级、可用区级 10-100 TiB nconnect=7
基本 SSD - nconnect=7
企业 - nconnect=2
大规模 SSD - nconnect=7

您可以通过调整 read_ahead_kb 参数值来优化 NFS 读取吞吐量。如需了解详情,请参阅使用 read_ahead_kb 参数优化 NFS 读取吞吐量

使用单个客户端虚拟机测试性能

使用以下场景对基本实例执行测试。您可以直接从命令行运行这些命令。

  • 小于 1 TiB 的基本实例的最大写入吞吐量:

    fio --ioengine=libaio --filesize=4G --ramp_time=2s
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0
    --group_reporting --directory=/mnt/nfs
    --name=write --blocksize=1m --iodepth=64 --readwrite=write
    
  • 最大读取吞吐量:

    fio --ioengine=libaio --filesize=32G --ramp_time=2s \
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
    --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \
    --name=read --blocksize=1m --iodepth=64 --readwrite=read
    
  • 最大写入吞吐量:

    fio --ioengine=libaio --filesize=32G --ramp_time=2s \
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
    --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \
    --name=write --blocksize=1m --iodepth=64 --readwrite=write
    
  • 最大读取 IOPS:

    fio --ioengine=libaio --filesize=32G --ramp_time=2s \
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
    --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \
    --name=randread --blocksize=4k --iodepth=256 --readwrite=randread
    
  • 最大写入 IOPS:

    fio --ioengine=libaio --filesize=32G --ramp_time=2s \
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
    --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \
    --name=randwrite --blocksize=4k --iodepth=256 --readwrite=randwrite
    

使用多个客户端虚拟机测试性能

如需实现可用区级、区域级和企业层级实例的最大性能,请使用多个客户端虚拟机。

对于容量介于 1 到 9.75 TiB 之间的实例,我们建议每 1 TiB 使用 8 个客户端虚拟机。对于容量介于 10 到 100 TiB 之间的实例,我们建议每 10 TiB 使用 8 个客户端虚拟机。

  1. 在所有客户端虚拟机上启动 fio 服务器。Fio 使用端口 8765 进行通信,因此必须在防火墙政策中打开此端口。

    fio --server
    
  2. 选择一个将编排 fio 运行的客户端虚拟机。在该客户端虚拟机上创建 fio 作业文件

    cat << EOL > /tmp/fio_job.conf
    [global]
    ioengine=libaio
    ramp_time=2s
    runtime=3m
    time_based
    direct=1
    verify=0
    randrepeat=0
    group_reporting
    buffer_compress_percentage=50
    directory=\${TMP_DIR}
    create_only=\${CREATE_ONLY}
    
    [read-throughput]
    blocksize=1048576
    numjobs=8
    readwrite=read
    filesize=100M
    
    [write-throughput]
    blocksize=1048576
    numjobs=8
    readwrite=write
    filesize=100M
    
    [read-iops]
    blocksize=4k
    iodepth=64
    readwrite=randread
    filesize=1GB
    
    [write-iops]
    blocksize=4k
    iodepth=64
    readwrite=randwrite
    filesize=1GB
    
    EOL
    
  3. 创建一个 hosts.list 文件,其中包含 fio 客户端虚拟机的 IP 地址或 DNS 名称:

    cat << EOL > /tmp/hosts.list
    <Client 1 IP/DNS>
    <Client 2 IP/DNS>
    ...
    <Client N IP/DNS>
    EOL
    
  4. 在您为其创建作业文件的客户端虚拟机的临时目录中创建以下数据集:

    export TMP_DIR=$(mktemp -d MOUNT_POINT_DIRECTORY/XXXXX)
    chmod 777 ${TMP_DIR}
    export CREATE_ONLY=1
    fio --client=/tmp/hosts.list \
    --section=read-throughput --section=read-iops /tmp/fio_job.conf
    
  5. 使用您为其创建作业文件的客户端虚拟机运行基准化分析:

    • 最大读取吞吐量
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=read-throughput /tmp/fio_job.conf
    
    • 最大写入吞吐量
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=write-throughput /tmp/fio_job.conf
    
    • 最大读取 IOPS
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=read-iops /tmp/fio_job.conf
    
    • 最大写入 IOPS
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=write-iops /tmp/fio_job.conf
    
  6. 完成测试后,停止所有客户端虚拟机上的 fio 服务器并删除其 临时目录:

    rm -rf ${TMP_DIR}