测试实例性能

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

概览

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

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

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

前期准备

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

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

层级 容量 连接数
区域、可用区 1-9.75 TiB nconnect=2
区域、可用区 10-100 TiB 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 TB 的实例,我们建议每 1 TB 使用 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. 创建一个包含 fio 客户端虚拟机的 IP 地址或 DNS 名称的 hosts.list 文件:

    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}