測試執行個體效能

本頁面說明如何對 Filestore 執行個體進行效能測試。

總覽

如果您使用 Linux,可以透過 彈性 IO 測試工具 (fio),對基本、區域、可用區和企業級層級執行個體的讀取總處理量、寫入總處理量、讀取 IOPS 和寫入 IOPS 進行基準測試。

您可以使用單一用戶端 VM 測試基本執行個體的效能。我們不建議使用單一用戶端 VM 測試區域、可用區或企業執行個體,因為擴充服務層級已針對多個用戶端 VM 進行效能最佳化,單一用戶端通常無法達到叢集 IOPS 或輸送量的上限。

詳情請參閱「單一和多個用戶端 VM 效能」。

事前準備

在所有用戶端 VM 中掛接要測試的 Filestore 檔案共用區。視服務層級而定,這可能是一或多個用戶端 VM。如需詳細的操作說明和掛接選項,請參閱「在 Compute Engine 用戶端掛接檔案共用區」。

請務必指定 nconnect 掛接選項,以提升 NFS 效能。對於特定服務層級,我們建議在用戶端與伺服器之間指定下列連線數:

級別 容量 連線數量
區域、可用區 1 至 9.75 TiB nconnect=2
區域、可用區 10 至 100 TiB nconnect=7
Enterprise - nconnect=2
高可擴充性固態硬碟 - nconnect=7

您可以調整 read_ahead_kb 參數值,最佳化 NFS 讀取輸送量。詳情請參閱「使用 read_ahead_kb 參數最佳化 NFS 讀取輸送量」。

使用單一用戶端 VM 測試效能

請使用下列情境對基本執行個體執行測試。您可以直接從指令列執行指令。

  • 容量小於 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
    

使用多個用戶端 VM 測試效能

如要讓可用區、區域和企業執行個體達到最高效能,請使用多個用戶端 VM。

如果執行個體介於 1 到 9.75 TiB,建議每 1 TiB 使用八個用戶端 VM。如果執行個體介於 10 到 100 TiB 之間,每 10 TiB 使用八個用戶端 VM。

  1. 在所有用戶端 VM 上啟動 fio 伺服器。Fio 使用通訊埠 8765 進行通訊,因此必須在防火牆政策中開啟這個通訊埠。

    fio --server
    
  2. 選取一個用戶端 VM,用來協調 fio 執行作業。在該用戶端 VM 上建立 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 用戶端 VM 的 IP 位址或 DNS 名稱:

    cat << EOL > /tmp/hosts.list
    <Client 1 IP/DNS>
    <Client 2 IP/DNS>
    ...
    <Client N IP/DNS>
    EOL
    
  4. 在您建立工作檔案的用戶端 VM 暫存目錄中,建立下列資料集:

    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. 使用您為工作檔案建立的用戶端 VM 執行基準測試:

    • 讀取處理量上限
    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. 測試完成後,請停止所有用戶端 VM 上的 fio 伺服器,並刪除臨時目錄:

    rm -rf ${TMP_DIR}