[Amazon FSx for NetApp ONTAP] QoSでIOPSとスループットの上限を絞ってみた

[Amazon FSx for NetApp ONTAP] QoSでIOPSとスループットの上限を絞ってみた

1つのFSxNファイルシステムにさまざまなワークロードを集約したい時に
Clock Icon2024.06.10

このボリュームへの書き込みを制御したいな

こんにちは、のんピ(@non____97)です。

皆さんは特定ボリュームへの書き込みを制御したいなと思ったことはありますか? 私はあります。

以下記事で紹介したように、Amazon FSx for NetApp ONTAP(以降FSxN)では一つのファイルシステム上に複数のSVM、ボリュームを用意することが可能です。

https://dev.classmethod.jp/articles/amazon-fsx-for-netapp-ontap-filesystem-svm-volume-qtree-partitioning/

適切にリソースを集約することで、コスト圧縮や管理コストを下げることが可能です。

ただし、そんな時に問題になるのがノイジーネイバーです。ノイジーネイバーとはリソースを共有している他のクライアントが原因により、他のクライアントの性能に悪影響を及ぼすことを指します。

例えば、1つのFSxNファイルシステム上に開発/検証/本番と複数のSVMが存在している場合、何もケアをしなければ開発環境上で高IOを出してしまうと、本番環境の性能にまでも影響を及ぼしてしまいます。

そんな時に役立つのはQoS(Quality of Service)です。

ONTAPでもQoSをかけることは可能です。FSxNのQoSはAWS Blogsでも紹介されています。

https://aws.amazon.com/jp/blogs/news/using-quality-of-service-in-amazon-fsx-for-netapp-ontap/

QoSをかける主なシチュエーションは以下が挙げられます。

  • ネットワーク機器の限界以上のIO、スループットがかかっており、ネットワーク機器を通る他の機器に影響を与えている
  • 他のSVM、ボリュームのIO、スループットが悪化している
  • NASアクセスによるCPU負荷を下げ、階層化を優先させる

実際に試してみます。

いきなりまとめ

  • QoSはIOPSとスループット、またはその両方を制限する
  • QoSは3種類
    • QoS Max : 上限を制限する
    • QoS Min : 下限を制限する
    • アダプティブQoS : ボリュームサイズもしくは使用量に合わせて自動的にQoSの値を調整する
  • QoS Minは2024/6/10時点では使用不可
  • QoSはボリュームだけでなく、SVM、qtreeにも設定可能

ONTAPにおけるQoSとは

概要

ONTAPにおけるQoSは以下NetApp公式ドキュメントにまとまっています。

https://docs.netapp.com/ja-jp/ontap/performance-admin/guarantee-throughput-qos-task.html

ONTAPのQoSではIOPSとスループット、またはその両方を制限できます。クライアントのIPアドレスや、プロトコルで優先度を変更するといった機能はありません。

QoSはネットワーク層で制御し、QoSがかかるとレイテンシーが増大します。

QoSをかける範囲は以下のとおりです。

  • SVM
  • ボリューム
  • qtree
    • 後述するアダプティブQoSは不可
  • ファイル
    • FlexCacheボリュームでは不可
  • LUN

大量のボリュームがある場合にSVM単位でかけられるのは運用が楽になりそうですね。また、qtreeやファイル、LUNとピンポイントで制限できるのも嬉しいです。

なお、SVMにQoSをかけて、さらにボリュームやqtreeに別のQoSをかけるといったことはできません。

下位のオブジェクトまたは子オブジェクトがポリシーグループに属している場合は、そのストレージオブジェクトをポリシーグループに割り当てることはできません。

QoS を使用してスループットの上限を設定する

QoSのかけ方は以下の3種類があります。

  • QoS Max
  • QoS Min
  • アダプティブQoS

以降、それぞれについて紹介します。

QoS Max

QoSとしてイメージしやすいのがQoS Maxではないでしょうか。

QoS MaxはIOPSとスループットの上限を制限するものです。IOPSとスループットの両方を指定した場合、先に上限に達した方が適用されます。

また、一時的にバーストし、上限以上の性能を出すことができるようです。

ワークロードのスループットは、特にスループットが急激に変化した場合、指定された上限を 10% までは超過することができます。バースト時には、上限を 50% まで超過することができます。バーストは、トークンが 150% まで累積した場合に単一ノードで発生します

QoS の概要を使用してスループットを保証

QoS Maxでは同じQoSポリシーグループ内のストレージオブジェクト内の性能の合算値を上限とするか選択することが可能です。複数ボリュームの合計スループットの上限を被せたい場合に便利です。

詳細な設定手順は以下NetApp公式ドキュメントにまとまっています。

https://docs.netapp.com/ja-jp/ontap/performance-admin/set-throughput-ceiling-qos-task.html

QoS Min

QoS MinはIOPSとスループットの下限を設定するものです。

QoS Minを使用することで、割り当てられたストレージオブジェクトのIOPSとスループットを優先させることが可能です。これにより間接的に他のストレージオブジェクトのIOPSとスループットが調整されます。

一見便利そうですが、注意点としてFabricPoolでTiering Policyがnone以外の場合では使用できないという点があります。

FabricPool and quality of service minimums (QoS Min) goals are mutually exclusive; QoS Min provides performance minimums, whereas FabricPool sends blocks to an object store and decreasing performance. QoS Min must be turned off on volumes in FabricPool local tiers. Alternatively, tiering must be turned off (-tiering-policy none) on volumes that require QoS Min

FabricPool best practices _ TR-4598 | NetApp

詳細な設定手順は以下NetApp公式ドキュメントに記載されています。

https://docs.netapp.com/ja-jp/ontap/performance-admin/set-throughput-floor-qos-task.html

アダプティブQoS

アダプティブQoSはボリュームサイズもしくは使用量に合わせて自動的にQoSの値を調整する仕組みです。

https://kb-ja.netapp.com/on-prem/ontap/Perf/Perf-KBs/What_is_Adaptive_QoS_and_how_does_it_work

事前にGBあたり or TBあたりのIOPSを指定することで、その比率を維持してくれます。

ボリュームの自動拡張を有効化しており、サイズに応じてIOPSを自動で調整したい場合は役立ちそうです。

ただし、FabricPoolでは使用できないようです。

Resource or feature Throughput ceiling Throughput floor Throughput floor v2 Adaptive QoS
ONTAP 9 version All 9.2 and later 9.7 and later 9.3 and later
Platforms All AFF

C190 *

ONTAP Select premium with SSD *
AFF

C190

ONTAP Select premium with SSD
All
Protocols All All All All
FabricPool Yes Yes, if the tiering policy is set to "none" and no blocks are in the cloud. Yes, if the tiering policy is set to "none" and no blocks are in the cloud. No
SnapMirror Synchronous Yes No No Yes

Guarantee throughput with QoS overview

詳細な設定手順は以下NetApp公式ドキュメントに記載されています。

https://docs.netapp.com/ja-jp/ontap/performance-admin/adaptive-qos-policy-groups-task.html

やってみた

デフォルトのQoSポリシーグループの確認

実際に試してみます。

まず、デフォルトのQoSポリシーグループの確認をします。

::> set diag

Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y

::*> qos ?
  adaptive-policy-group>      The adaptive-policy-group directory
  policy-group>               The policy-group directory
  settings>                   QoS settings
  statistics>                 QoS statistics
  workload>                   QoS workload settings

::*> qos policy-group ?
  create                      Create a policy group
  delete                      Delete an existing QoS Policy Group
  modify                      Modify a policy group
  rename                      Rename a policy group
  show                        Display a list of policy groups

::*> qos policy-group show
Name             Vserver     Class        Wklds Throughput   Is Shared
---------------- ----------- ------------ ----- ------------ ---------
extreme-fixed    FsxId02ac680b159bfea94
                             user-defined 0     0-50000IOPS,1.53GB/s
                                                             false
performance-fixed
                 FsxId02ac680b159bfea94
                             user-defined 0     0-30000IOPS,937.5MB/s
                                                             false
value-fixed      FsxId02ac680b159bfea94
                             user-defined 0     0-15000IOPS,468.8MB/s
                                                             false
3 entries were displayed.

::*> qos policy-group show -instance

              Policy Group Name: extreme-fixed
                        Vserver: FsxId02ac680b159bfea94
                           Uuid: b7189398-e572-48ab-8f69-82cd46580812
             Policy Group Class: user-defined
                Policy Group ID: 661
             Maximum Throughput: 50000IOPS,1.53GB/s
             Minimum Throughput: 0
            Number of Workloads: 0
              Throughput Policy: 0-50000IOPS,1.53GB/s
                      Is Shared: false
       Is Policy Auto Generated: -

              Policy Group Name: performance-fixed
                        Vserver: FsxId02ac680b159bfea94
                           Uuid: e7e784fd-ad09-41f3-9cc9-a75cb1fb35fa
             Policy Group Class: user-defined
                Policy Group ID: 5284
             Maximum Throughput: 30000IOPS,937.5MB/s
             Minimum Throughput: 0
            Number of Workloads: 0
              Throughput Policy: 0-30000IOPS,937.5MB/s
                      Is Shared: false
       Is Policy Auto Generated: -

              Policy Group Name: value-fixed
                        Vserver: FsxId02ac680b159bfea94
                           Uuid: 098587a4-24f3-480d-8577-258a4d324dec
             Policy Group Class: user-defined
                Policy Group ID: 1570
             Maximum Throughput: 15000IOPS,468.8MB/s
             Minimum Throughput: 0
            Number of Workloads: 0
              Throughput Policy: 0-15000IOPS,468.8MB/s
                      Is Shared: false
       Is Policy Auto Generated: -
3 entries were displayed.

3つほどありますね。設定されているIOPSとスループットからして、いずれもかなり大きめのワークロードで使うようなポリシーのようです。

アダプティブQoSポリシーグループも確認します。

::*> qos adaptive-policy-group show
                            Expected    Peak         Minimum Block
Name         Vserver Wklds  IOPS        IOPS         IOPS    Size
------------ ------- ------ ----------- ------------ ------- -----
extreme      FsxId02ac680b159bfea94
                     0      6144IOPS/TB 12288IOPS/TB 1000IOPS
                                                             ANY
performance  FsxId02ac680b159bfea94
                     0      2048IOPS/TB 4096IOPS/TB  500IOPS ANY
value        FsxId02ac680b159bfea94
                     0      128IOPS/TB  512IOPS/TB   75IOPS  ANY
3 entries were displayed.

::*> qos adaptive-policy-group show -instance

                    Name: extreme
                 Vserver: FsxId02ac680b159bfea94
                    Uuid: 7fe8f60e-1585-11e7-8735-0050568206af
                      ID: 744
           Expected IOPS: 6144IOPS/TB
               Peak IOPS: 12288IOPS/TB
   Absolute Minimum IOPS: 1000IOPS
Expected IOPS Allocation: allocated-space
    Peak IOPS Allocation: used-space
              Block Size: ANY
     Number of Workloads: 0

                    Name: performance
                 Vserver: FsxId02ac680b159bfea94
                    Uuid: 80ec96d2-1585-11e7-8f7b-0050568206af
                      ID: 319
           Expected IOPS: 2048IOPS/TB
               Peak IOPS: 4096IOPS/TB
   Absolute Minimum IOPS: 500IOPS
Expected IOPS Allocation: allocated-space
    Peak IOPS Allocation: used-space
              Block Size: ANY
     Number of Workloads: 0

                    Name: value
                 Vserver: FsxId02ac680b159bfea94
                    Uuid: 8192969a-1585-11e7-b11f-0050568206af
                      ID: 13757
           Expected IOPS: 128IOPS/TB
               Peak IOPS: 512IOPS/TB
   Absolute Minimum IOPS: 75IOPS
Expected IOPS Allocation: allocated-space
    Peak IOPS Allocation: used-space
              Block Size: ANY
     Number of Workloads: 0
3 entries were displayed.

こちらも3つ設定されていました。SSD IOPSは3IOPS/GiBなので、ここを意識して使用するとよさそうです。

ちなみにボリュームはデフォルトではQoSポリシーグループ、アダプティブQoSポリシーグループはアタッチされていません。

::*> volume show -fields qos-policy-group, qos-adaptive-policy-group
vserver volume   qos-policy-group qos-adaptive-policy-group
------- -------- ---------------- -------------------------
svm     svm_root -                -
svm     vol1     -                -
2 entries were displayed.

QoSポリシーグループの作成

qos policy-group createでQoSポリシーグループの作成をします。

10MBps、100IOPSとQoS Maxで絞ります。また、-is-shared trueで共有QoSポリシーグループにしています。

::*> qos policy-group create -policy-group qos-policy -vserver svm -is-shared true -max-throughput 10MB/s,100iops

::*> qos policy-group show -policy-group qos-policy -instance

              Policy Group Name: qos-policy
                        Vserver: svm
                           Uuid: a1ed80ff-2624-11ef-9008-7b6bd20c863b
             Policy Group Class: user-defined
                Policy Group ID: 834
             Maximum Throughput: 10MB/s,100IOPS
             Minimum Throughput: 0
            Number of Workloads: 0
              Throughput Policy: 0-10MB/s,100IOPS
                      Is Shared: true
       Is Policy Auto Generated: -

fio実行中にQoSポリシーグループをボリュームに割り当て

fio実行中にQoSポリシーグループをボリュームに割り当てたときの挙動を確認します。

vol1というボリュームをマウントして、fioを実行します。

$ sudo mkdir -p /mnt/fsxn/vol1
$ sudo mount -t nfs svm-029e0cdfb5f77da7c.fs-02ac680b159bfea94.fsx.us-east-1.amazonaws.com:/vol1 /mnt/fsxn/vol1
$ df -hT -t nfs4
Filesystem                                                                   Type  Size  Used Avail Use% Mounted on
svm-029e0cdfb5f77da7c.fs-02ac680b159bfea94.fsx.us-east-1.amazonaws.com:/vol1 nfs4   61G  384K   61G   1% /mnt/fsxn/vol1

$ sudo dnf install fio -y
Last metadata expiration check: 0:03:16 ago on Sun Jun  9 05:57:32 2024.
Dependencies resolved.
==========================================================================================================
 Package                     Architecture      Version                        Repository             Size
==========================================================================================================
Installing:
 fio                         aarch64           3.32-2.amzn2023.0.3            amazonlinux           5.2 M
Installing dependencies:
 librdmacm                   aarch64           48.0-1.amzn2023.0.1            amazonlinux            73 k
Installing weak dependencies:
 fio-engine-http             aarch64           3.32-2.amzn2023.0.3            amazonlinux            20 k
 fio-engine-libaio           aarch64           3.32-2.amzn2023.0.3            amazonlinux            18 k
 fio-engine-rdma             aarch64           3.32-2.amzn2023.0.3            amazonlinux            22 k

Transaction Summary
==========================================================================================================
Install  5 Packages

Total download size: 5.3 M
Installed size: 9.0 M
Downloading Packages:
(1/5): fio-engine-libaio-3.32-2.amzn2023.0.3.aarch64.rpm                  330 kB/s |  18 kB     00:00
(2/5): fio-engine-http-3.32-2.amzn2023.0.3.aarch64.rpm                    252 kB/s |  20 kB     00:00
.
.
(中略)
.
.
Installed:
  fio-3.32-2.amzn2023.0.3.aarch64                      fio-engine-http-3.32-2.amzn2023.0.3.aarch64
  fio-engine-libaio-3.32-2.amzn2023.0.3.aarch64        fio-engine-rdma-3.32-2.amzn2023.0.3.aarch64
  librdmacm-48.0-1.amzn2023.0.1.aarch64

Complete!

$ sudo fio \
  --directory=/mnt/fsxn/vol1/ \
  --name fio_rw_4MiB_block_16GiB_32jobs \
  --ioengine=psync \
  --direct=1 \
  --rw=randwrite \
  --bs=4M \
  --size=16G \
  --numjobs=32 \
  --runtime=300 \
  --eta-newline=5 \
  --time_based=1 \
  --group_reporting \
  --norandommap
fio_rw_4MiB_block_16GiB_32jobs: (g=0): rw=randwrite, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=psync, iodepth=1
...
fio-3.32
Starting 32 processes
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
.
.
(中略)
.
.
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
Jobs: 32 (f=32): [w(32)][2.3%][w=136MiB/s][w=34 IOPS][eta 04m:53s]
Jobs: 32 (f=32): [w(32)][4.3%][w=136MiB/s][w=34 IOPS][eta 04m:47s]
Jobs: 32 (f=32): [w(32)][6.3%][w=148MiB/s][w=37 IOPS][eta 04m:41s]
Jobs: 32 (f=32): [w(32)][8.0%][w=132MiB/s][w=33 IOPS][eta 04m:36s]
.
.
(以下略)
.
.

qos statistics volume performance showで、ボリューム単位のパフォーマンスを確認します。

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     2377       148.56MB/s    26.97ms
vol1-wid7268      7268     2377       148.56MB/s    26.97ms
-total-              -     2423       151.44MB/s    26.92ms
vol1-wid7268      7268     2423       151.44MB/s    26.92ms
-total-              -     2328       145.50MB/s    27.20ms
vol1-wid7268      7268     2328       145.50MB/s    27.20ms
-total-              -     2408       150.50MB/s    26.90ms
vol1-wid7268      7268     2408       150.50MB/s    26.90ms
-total-              -     2360       147.50MB/s    26.96ms
vol1-wid7268      7268     2360       147.50MB/s    26.96ms
-total-              -     2426       151.62MB/s    27.04ms
vol1-wid7268      7268     2426       151.62MB/s    27.04ms
-total-              -     2399       149.94MB/s    26.90ms
vol1-wid7268      7268     2399       149.94MB/s    26.90ms
-total-              -     2397       149.81MB/s    27.12ms
vol1-wid7268      7268     2397       149.81MB/s    27.12ms
-total-              -     2311       144.44MB/s    27.45ms
vol1-wid7268      7268     2311       144.44MB/s    27.45ms
-total-              -     2432       152.00MB/s    26.68ms
vol1-wid7268      7268     2432       152.00MB/s    26.68ms
-total-              -     2402       150.12MB/s    26.98ms
vol1-wid7268      7268     2402       150.12MB/s    26.98ms
.
.
(以下略)
.
.

おおよそ150MBps、2300IOPS程度で安定しています。

vol1に作成したQoSポリシーグループをアタッチします。

::*> volume modify -volume vol1 -qos-policy-group qos-policy
Volume modify successful on volume vol1 of Vserver svm.

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     1187        74.19MB/s    44.81ms
vol1-wid7268      7268     1187        74.19MB/s    44.81ms
-total-              -      112         7.00MB/s   216.42ms
vol1-wid7268      7268      112         7.00MB/s   216.42ms
-total-              -      103         6.44MB/s   155.60ms
vol1-wid7268      7268      103         6.44MB/s   155.60ms
-total-              -      105         6.56MB/s   156.06ms
vol1-wid7268      7268      105         6.56MB/s   156.06ms
-total-              -      104         6.50MB/s   156.19ms
vol1-wid7268      7268      104         6.50MB/s   156.19ms
-total-              -      104         6.50MB/s   150.58ms
vol1-wid7268      7268      104         6.50MB/s   150.58ms
-total-              -      104         6.50MB/s   142.30ms
vol1-wid7268      7268      104         6.50MB/s   142.30ms
-total-              -      103         6.44MB/s   143.78ms
vol1-wid7268      7268      103         6.44MB/s   143.78ms
-total-              -      103         6.44MB/s   144.19ms
vol1-wid7268      7268      103         6.44MB/s   144.19ms
-total-              -      104         6.50MB/s   145.07ms
vol1-wid7268      7268      104         6.50MB/s   145.07ms
-total-              -      104         6.50MB/s   144.41ms
vol1-wid7268      7268      104         6.50MB/s   144.41ms
.
.
(以下略)
.
.

アタッチした途端にIOPSとスループットが抑えられ、レイテンシーが増加しました。

しばらくするとfioが完了しました。fioの実行結果は以下のとおりです。

.
.
(中略)
.
.
Jobs: 32 (f=32): [w(32)][64.3%][w=160MiB/s][w=40 IOPS][eta 01m:47s]
Jobs: 32 (f=32): [w(32)][66.3%][w=144MiB/s][w=36 IOPS][eta 01m:41s]
Jobs: 32 (f=32): [w(32)][68.3%][w=136MiB/s][w=34 IOPS][eta 01m:35s]
Jobs: 32 (f=32): [w(32)][70.3%][w=140MiB/s][w=35 IOPS][eta 01m:29s]
Jobs: 32 (f=32): [w(32)][72.3%][w=12.0MiB/s][w=3 IOPS][eta 01m:23s]
Jobs: 32 (f=32): [w(32)][74.3%][eta 01m:17s]
Jobs: 32 (f=32): [w(32)][76.3%][w=20.0MiB/s][w=5 IOPS][eta 01m:11s]
Jobs: 32 (f=32): [w(32)][78.3%][w=4096KiB/s][w=1 IOPS][eta 01m:05s]
Jobs: 32 (f=32): [w(32)][80.3%][eta 00m:59s]
Jobs: 32 (f=32): [w(32)][82.3%][w=8200KiB/s][w=2 IOPS][eta 00m:53s]
Jobs: 32 (f=32): [w(32)][84.3%][w=8200KiB/s][w=2 IOPS][eta 00m:47s]
Jobs: 32 (f=32): [w(32)][86.3%][w=4100KiB/s][w=1 IOPS][eta 00m:41s]
Jobs: 32 (f=32): [w(32)][88.3%][w=4096KiB/s][w=1 IOPS][eta 00m:35s]
Jobs: 32 (f=32): [w(32)][90.3%][w=8200KiB/s][w=2 IOPS][eta 00m:29s]
Jobs: 32 (f=32): [w(32)][92.3%][w=16.0MiB/s][w=4 IOPS][eta 00m:23s]
Jobs: 32 (f=32): [w(32)][94.3%][w=8200KiB/s][w=2 IOPS][eta 00m:17s]
Jobs: 32 (f=32): [w(32)][96.3%][eta 00m:11s]
Jobs: 32 (f=32): [w(32)][98.3%][w=4100KiB/s][w=1 IOPS][eta 00m:05s]
Jobs: 32 (f=32): [w(6),f(1),w(25)][5.9%][w=4096KiB/s][w=1 IOPS][eta 01h:20m:14s]
Jobs: 28 (f=28): [w(4),f(1),_(3),w(1),_(1),w(22)][20.3%][w=4096KiB/s][w=1 IOPS][eta 20m:06s]
Jobs: 24 (f=24): [w(1),E(1),w(1),_(5),w(1),_(1),f(2),_(1),f(1),w(14),f(1),w(3)][12.7%][w=20.0MiB/s][w=5 IOJobs: 19 (f=19): [f(1),_(1),w(1),_(5),w(1),_(5),w(6),f(1),w(5),_(1),w(1),_(1),w(3)][7.2%][w=12.0MiB/s][w=3Jobs: 17 (f=17): [_(2),w(1),_(5),f(1),_(5),w(3),f(1),w(2),_(1),w(2),f(1),w(1),f(1),_(1),w(1),_(1),w(3)][6.Jobs: 12 (f=12): [_(2),w(1),_(11),w(1),_(1),f(1),_(1),w(1),f(1),_(1),f(1),w(1),_(1),f(1),_(2),w(1),_(1),w(1),f(1),w(1)][5.9%][w=24.0MiB/s][w=6 IOPS][eta 01h:23m:26s]
fio_rw_4MiB_block_16GiB_32jobs: (groupid=0, jobs=32): err= 0: pid=8996: Sun Jun  9 06:06:06 2024
  write: IOPS=24, BW=98.9MiB/s (104MB/s)(30.3GiB/313204msec); 0 zone resets
    clat (msec): min=19, max=20540, avg=1280.04, stdev=2631.80
     lat (msec): min=19, max=20540, avg=1280.17, stdev=2631.79
    clat percentiles (msec):
     |  1.00th=[  885],  5.00th=[  894], 10.00th=[  902], 20.00th=[  902],
     | 30.00th=[  902], 40.00th=[  902], 50.00th=[  902], 60.00th=[  902],
     | 70.00th=[  911], 80.00th=[  911], 90.00th=[  911], 95.00th=[  919],
     | 99.00th=[17113], 99.50th=[17113], 99.90th=[17113], 99.95th=[17113],
     | 99.99th=[17113]
   bw (  KiB/s): min=262076, max=303472, per=100.00%, avg=262326.17, stdev=208.49, samples=7710
   iops        : min=   60, max=   74, avg=64.02, stdev= 0.06, samples=7710
  lat (msec)   : 20=0.01%, 250=0.32%, 500=0.37%, 750=0.14%, 1000=96.94%
  lat (msec)   : 2000=0.05%, >=2000=2.16%
  cpu          : usr=0.01%, sys=0.03%, ctx=7854, majf=0, minf=284
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,7747,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=98.9MiB/s (104MB/s), 98.9MiB/s-98.9MiB/s (104MB/s-104MB/s), io=30.3GiB (32.5GB), run=313204-313204msec

72.3%が完了した頃からスループットとIOPSに制限がかかっていることが読み取れますね。

vol1のCloudWatchメトリクスも確認しましょう。

QoS Maxを途中からかけた場合

途中から急激にスループット、IOPSが低下し、レイテンシーが増加していることが分かります。

fioの途中でQoS Maxの値を変更する

fioの途中でQoS Maxの値を変更した場合の挙動も確認します。

fioを実行します。

$ sudo fio \ 
  --directory=/mnt/fsxn/vol1/ \ 
  --name fio_rw_4MiB_block_16GiB_32jobs \
  --ioengine=psync \
  --direct=1 \
  --rw=randwrite \
  --bs=4M \
  --size=16G \
  --numjobs=32 \
  --runtime=300 \
  --eta-newline=5 \
  --time_based=1 \
  --group_reporting \
  --norandommap
fio_rw_4MiB_block_16GiB_32jobs: (g=0): rw=randwrite, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=psync, iodepth=1
...
fio-3.32
Starting 32 processes
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
.
.
(中略)
.
.
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
Jobs: 32 (f=30): [w(32)][2.3%][eta 04m:54s]
Jobs: 32 (f=32): [w(32)][4.0%][eta 04m:49s]
Jobs: 32 (f=32): [w(32)][5.6%][w=4096KiB/s][w=1 IOPS][eta 04m:44s]
Jobs: 32 (f=32): [w(32)][7.3%][w=8192KiB/s][w=2 IOPS][eta 04m:39s]
Jobs: 32 (f=32): [w(32)][9.0%][w=24.0MiB/s][w=6 IOPS][eta 04m:34s]
Jobs: 32 (f=32): [w(32)][9.0%][w=24.0MiB/s][w=6 IOPS][eta 04m:34s]
Jobs: 32 (f=32): [w(32)][10.6%][eta 04m:29s]
Jobs: 32 (f=32): [w(32)][12.3%][w=8200KiB/s][w=2 IOPS][eta 04m:24s]
Jobs: 32 (f=32): [w(32)][14.3%][w=8200KiB/s][w=2 IOPS][eta 04m:18s]
Jobs: 32 (f=32): [w(32)][16.3%][w=8192KiB/s][w=2 IOPS][eta 04m:12s]
Jobs: 32 (f=32): [w(32)][18.3%][eta 04m:06s]
Jobs: 32 (f=32): [w(32)][20.3%][w=4100KiB/s][w=1 IOPS][eta 04m:00s]
Jobs: 32 (f=32): [w(32)][22.3%][w=16.0MiB/s][w=4 IOPS][eta 03m:54s]
Jobs: 32 (f=32): [w(32)][24.3%][eta 03m:48s]
Jobs: 32 (f=32): [w(32)][26.2%][w=8200KiB/s][w=2 IOPS][eta 03m:42s]
Jobs: 32 (f=32): [w(32)][28.2%][w=12.0MiB/s][w=3 IOPS][eta 03m:36s]
Jobs: 32 (f=32): [w(32)][30.2%][eta 03m:30s]
Jobs: 32 (f=32): [w(32)][32.2%][w=8200KiB/s][w=2 IOPS][eta 03m:24s]
Jobs: 32 (f=32): [w(32)][34.2%][eta 03m:18s]
Jobs: 32 (f=32): [w(32)][36.2%][w=24.0MiB/s][w=6 IOPS][eta 03m:12s]
Jobs: 32 (f=32): [w(32)][38.2%][eta 03m:06s]
Jobs: 32 (f=32): [w(32)][40.2%][w=8192KiB/s][w=2 IOPS][eta 03m:00s]
Jobs: 32 (f=32): [w(32)][42.2%][w=12.0MiB/s][w=3 IOPS][eta 02m:54s]
Jobs: 32 (f=32): [w(32)][44.2%][eta 02m:48s]
Jobs: 32 (f=32): [w(32)][46.2%][w=8192KiB/s][w=2 IOPS][eta 02m:42s]
Jobs: 32 (f=32): [w(32)][48.2%][w=8192KiB/s][w=2 IOPS][eta 02m:36s]
.
.
(以下略)
.
.

IOPSとスループット、レイテンシーを確認します。

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -      104         6.50MB/s   144.74ms
vol1-wid7268      7268      104         6.50MB/s   144.74ms
-total-              -      103         6.44MB/s   144.06ms
vol1-wid7268      7268      103         6.44MB/s   144.06ms
-total-              -      103         6.44MB/s   142.22ms
vol1-wid7268      7268      103         6.44MB/s   142.22ms
-total-              -      103         6.44MB/s   143.10ms
vol1-wid7268      7268      103         6.44MB/s   143.10ms
-total-              -      103         6.44MB/s   143.21ms
vol1-wid7268      7268      103         6.44MB/s   143.21ms
-total-              -      105         6.56MB/s   142.14ms
vol1-wid7268      7268      105         6.56MB/s   142.14ms
-total-              -      104         6.50MB/s   144.64ms
vol1-wid7268      7268      104         6.50MB/s   144.64ms

この状態でスループットを80MBps、IOPSを1,800IOPSに変更します。

::*> qos policy-group modify -policy-group qos-policy -max-throughput 80MB/s,1800IOPS

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -      270        16.88MB/s    55.32ms
vol1-wid7268      7268      270        16.88MB/s    55.32ms
-total-              -      270        16.88MB/s    55.32ms
vol1-wid7268      7268      270        16.88MB/s    55.32ms
-total-              -     1332        83.25MB/s     8.49ms
vol1-wid7268      7268     1332        83.25MB/s     8.49ms
-total-              -     1349        84.31MB/s    10.87ms
vol1-wid7268      7268     1349        84.31MB/s    10.87ms
-total-              -     1327        82.94MB/s    11.32ms
vol1-wid7268      7268     1327        82.94MB/s    11.32ms
-total-              -     1319        82.44MB/s    11.51ms
vol1-wid7268      7268     1319        82.44MB/s    11.51ms
-total-              -     1318        82.38MB/s    12.20ms
vol1-wid7268      7268     1318        82.38MB/s    12.20ms
-total-              -     1307        81.69MB/s    14.08ms
vol1-wid7268      7268     1307        81.69MB/s    14.08ms
-total-              -     1356        84.75MB/s    11.94ms
vol1-wid7268      7268     1356        84.75MB/s    11.94ms
.
.
(以下略)
.
.

数秒待つと、設定した値でQoSがかかっていることが分かります。レイテンシーも減少していますね。

vol1のCloudWatchメトリクスも確認しましょう。

QoS Maxを途中から変更した場合

スループットとIOPSの2つ目の山がQoS Maxの値を変えたタイミングです。CloudWatchメトリクスにも反映されていますね。

2つのボリュームへのfio実行中に共有QoSポリシーグループを割り当てる

次に2つのボリュームへのfio実行中に共有QoSポリシーグループを割り当ててみます。

vol2というボリュームを用意し、マウントします。この時点ではvol2にQoSポリシーグループはアタッチしていません。

::*> volume show -fields qos-policy-group
vserver volume   qos-policy-group
------- -------- ----------------
svm     svm_root -
svm     vol1     qos-policy
svm     vol2     -
3 entries were displayed.
$ sudo mkdir -p /mnt/fsxn/vol2
sh-5.2$ sudo mount -t nfs svm-029e0cdfb5f77da7c.fs-02ac680b159bfea94.fsx.us-east-1.amazonaws.com:/vol2 /mnt/fsxn/vol2
sh-5.2$ df -hT -t nfs4
Filesystem                                                                   Type  Size  Used Avail Use% Mounted on
svm-029e0cdfb5f77da7c.fs-02ac680b159bfea94.fsx.us-east-1.amazonaws.com:/vol1 nfs4   61G   14G   48G  23% /mnt/fsxn/vol1
svm-029e0cdfb5f77da7c.fs-02ac680b159bfea94.fsx.us-east-1.amazonaws.com:/vol2 nfs4   61G  320K   61G   1% /mnt/fsxn/vol2

vol1vol2それぞれに対してfioを叩きます。

vol1
$ sudo fio \
  --directory=/mnt/fsxn/vol1/ \
  --name fio_rw_4MiB_block_16GiB_32jobs \
  --ioengine=psync \
  --direct=1 \
  --rw=randwrite \
  --bs=4M \
  --size=16G \
  --numjobs=32 \
  --runtime=300 \
  --eta-newline=5 \
  --time_based=1 \
  --group_reporting \
  --norandommap
fio_rw_4MiB_block_16GiB_32jobs: (g=0): rw=randwrite, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=psync, iodepth=1
...
fio-3.32
Starting 32 processes
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
.
.
(中略)
.
.
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
Jobs: 32 (f=32): [w(32)][2.3%][w=60.0MiB/s][w=15 IOPS][eta 04m:54s]
Jobs: 32 (f=32): [w(32)][4.0%][w=72.0MiB/s][w=18 IOPS][eta 04m:49s]
Jobs: 32 (f=32): [w(32)][5.6%][w=24.0MiB/s][w=6 IOPS][eta 04m:44s]
Jobs: 32 (f=32): [w(32)][7.3%][w=60.0MiB/s][w=15 IOPS][eta 04m:39s]
Jobs: 32 (f=32): [w(32)][9.0%][w=108MiB/s][w=27 IOPS][eta 04m:34s]
Jobs: 32 (f=32): [w(32)][10.6%][w=112MiB/s][w=28 IOPS][eta 04m:29s]
Jobs: 32 (f=32): [w(32)][12.3%][w=32.0MiB/s][w=8 IOPS][eta 04m:24s]
Jobs: 32 (f=32): [w(32)][14.0%][w=32.0MiB/s][w=8 IOPS][eta 04m:19s]
Jobs: 32 (f=32): [w(32)][15.7%][w=100MiB/s][w=25 IOPS][eta 04m:13s]
Jobs: 32 (f=32): [w(32)][17.3%][w=128MiB/s][w=32 IOPS][eta 04m:08s]
Jobs: 32 (f=32): [w(32)][19.0%][w=40.0MiB/s][w=10 IOPS][eta 04m:03s]
.
.
(以下略)
.
.
vol2
$ sudo fio \
  --directory=/mnt/fsxn/vol2/ \
  --name fio_rw_4MiB_block_16GiB_32jobs \
  --ioengine=psync \
  --direct=1 \
  --rw=randwrite \
  --bs=4M \
  --size=16G \
  --numjobs=32 \
  --runtime=300 \
  --eta-newline=5 \
  --time_based=1 \
  --group_reporting \
  --norandommap
fio_rw_4MiB_block_16GiB_32jobs: (g=0): rw=randwrite, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=psync, iodepth=1
...
fio-3.32
Starting 32 processes
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
.
.
(中略)
.
.
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
fio_rw_4MiB_block_16GiB_32jobs: Laying out IO file (1 file / 16384MiB)
Jobs: 32 (f=32): [w(32)][1.7%][eta 04m:55s]
Jobs: 32 (f=32): [w(32)][3.3%][eta 04m:50s]
Jobs: 32 (f=32): [w(32)][5.0%][w=128MiB/s][w=32 IOPS][eta 04m:45s]
Jobs: 32 (f=32): [w(32)][6.7%][w=128MiB/s][w=32 IOPS][eta 04m:40s]
Jobs: 32 (f=32): [w(32)][8.3%][w=80.0MiB/s][w=20 IOPS][eta 04m:35s]
Jobs: 32 (f=32): [w(32)][10.0%][eta 04m:30s]
Jobs: 32 (f=32): [w(32)][11.7%][w=100MiB/s][w=25 IOPS][eta 04m:25s]
Jobs: 32 (f=32): [w(32)][13.7%][eta 04m:19s]
Jobs: 32 (f=32): [w(32)][15.7%][w=128MiB/s][w=32 IOPS][eta 04m:13s]
Jobs: 32 (f=32): [w(32)][17.7%][w=124MiB/s][w=31 IOPS][eta 04m:07s]
Jobs: 32 (f=32): [w(32)][19.7%][eta 04m:01s]
Jobs: 32 (f=32): [w(32)][21.7%][w=128MiB/s][w=32 IOPS][eta 03m:55s]
Jobs: 32 (f=32): [w(32)][23.7%][w=128MiB/s][w=32 IOPS][eta 03m:49s]
.
.
(以下略)
.
.

この段階でのスループット、IOPS、レイテンシーは以下のとおりです。

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     2700       168.75MB/s    22.86ms
vol2-wid73514    73514     1359        84.94MB/s     2.22ms
vol1-wid7268      7268     1341        83.81MB/s    43.77ms
-total-              -     2854       178.38MB/s    22.29ms
vol2-wid73514    73514     1497        93.56MB/s     2.82ms
vol1-wid7268      7268     1357        84.81MB/s    43.78ms
-total-              -     2871       179.44MB/s    21.55ms
vol2-wid73514    73514     1538        96.12MB/s   909.00us
vol1-wid7268      7268     1333        83.31MB/s    45.36ms
-total-              -     2487       155.44MB/s    27.24ms
vol1-wid7268      7268     1289        80.56MB/s    37.93ms
vol2-wid73514    73514     1198        74.88MB/s    15.73ms
-total-              -     2378       148.62MB/s    27.06ms
vol2-wid73514    73514     1201        75.06MB/s    27.05ms
vol1-wid7268      7268     1177        73.56MB/s    27.07ms
-total-              -     2382       148.88MB/s    27.10ms
vol1-wid7268      7268     1208        75.50MB/s    27.13ms
vol2-wid73514    73514     1174        73.38MB/s    27.07ms
.
.
(以下略)
.
.

全体約150MBpsのところにvol1に80MBpsのQoSがかかっているので、どちらも同じ程度のスループットが出ています。

vol2vol1と同じQoSポリシーグループを割り当てます。

::*> volume modify -volume vol2 -qos-policy-group qos-policy
Volume modify successful on volume vol2 of Vserver svm.

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     2432       152.00MB/s    27.14ms
vol2-wid73514    73514     1221        76.31MB/s    27.19ms
vol1-wid7268      7268     1211        75.69MB/s    27.09ms
-total-              -     1862       116.38MB/s    34.13ms
vol1-wid7268      7268      947        59.19MB/s    33.88ms
vol2-wid73514    73514      915        57.19MB/s    34.39ms
-total-              -     1862       116.38MB/s    34.13ms
vol1-wid7268      7268      947        59.19MB/s    33.88ms
vol2-wid73514    73514      915        57.19MB/s    34.39ms
-total-              -     1345        84.06MB/s    49.73ms
vol2-wid73514    73514      686        42.88MB/s    49.39ms
vol1-wid7268      7268      659        41.19MB/s    50.08ms
-total-              -     1331        83.19MB/s    49.35ms
vol1-wid7268      7268      667        41.69MB/s    51.18ms
vol2-wid73514    73514      664        41.50MB/s    47.52ms
-total-              -     1331        83.19MB/s    49.78ms
vol1-wid7268      7268      675        42.19MB/s    49.06ms
vol2-wid73514    73514      656        41.00MB/s    50.52ms
-total-              -     1360        85.00MB/s    49.55ms
vol2-wid73514    73514      692        43.25MB/s    48.44ms
vol1-wid7268      7268      668        41.75MB/s    50.70ms
.
.
(以下略)
.
.

2つのボリュームの合計スループットが80MBpsになりました。複数ボリュームに対してまとめて制限をかけたい場合に便利ですね。

vol1vol2のCloudWatchメトリクスも確認しましょう。

vol1

vol1_QoS Max share

vol2

vol2_QoS_Max_share

いずれのメトリクスについても、おおよそ同じような値であることが分かります。(書き込み操作のレイテンシーは大きな差がありそうですが)

2つのボリュームに非共有QoSポリシーグループを割り当てる

2つのボリュームに非共有QoSポリシーグループを割り当てた場合の挙動も確認します。

共有QoSポリシーグループから非共有QoSポリシーグループへの切り替え、またはその逆は行うことはできません。

非共有QoSポリシーグループを新規作成します。

::*> qos policy-group create -policy-group qos-policy-no-share -vserver svm -is-shared false -max-throughput 50MB/s,500IOPS

::*> qos policy-group show qos-policy-no-share -instance

              Policy Group Name: qos-policy-no-share
                        Vserver: svm
                           Uuid: 7be3cb4a-262a-11ef-9008-7b6bd20c863b
             Policy Group Class: user-defined
                Policy Group ID: 4028
             Maximum Throughput: 50MB/s,500IOPS
             Minimum Throughput: 0
            Number of Workloads: 0
              Throughput Policy: 0-50MB/s,500IOPS
                      Is Shared: false
       Is Policy Auto Generated: -

vol1vol2に fioを叩いてアクセスします。

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     1323        82.69MB/s    27.90ms
vol2-wid73514    73514      673        42.06MB/s    27.68ms
vol1-wid7268      7268      650        40.62MB/s    28.13ms
-total-              -     1323        82.69MB/s    27.90ms
vol2-wid73514    73514      673        42.06MB/s    27.68ms
vol1-wid7268      7268      650        40.62MB/s    28.13ms
-total-              -     1344        84.00MB/s    26.57ms
vol1-wid7268      7268      675        42.19MB/s    26.48ms
vol2-wid73514    73514      669        41.81MB/s    26.65ms
-total-              -     1345        84.06MB/s    26.98ms
vol1-wid7268      7268      683        42.69MB/s    26.58ms
vol2-wid73514    73514      662        41.38MB/s    27.40ms
.
.
(以下略)
.
.

vol1vol2のQoSポリシーグループを非共有グループのものに変更します。

::*> volume modify -volume vol* -qos-policy-group qos-policy-no-share
Volume modify successful on volume vol1 of Vserver svm.
Volume modify successful on volume vol2 of Vserver svm.
2 entries were modified.

::*> volume show -volume vol* -fields qos-policy-group
vserver volume qos-policy-group
------- ------ -------------------
svm     vol1   qos-policy-no-share
svm     vol2   qos-policy-no-share
2 entries were displayed.

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     1026        64.12MB/s    47.61ms
vol1-wid7268      7268      513        32.06MB/s    39.44ms
vol2-wid73514    73514      513        32.06MB/s    55.78ms
-total-              -     1050        65.62MB/s    45.46ms
vol1-wid7268      7268      525        32.81MB/s    51.65ms
vol2-wid73514    73514      525        32.81MB/s    39.28ms
-total-              -     1050        65.62MB/s    44.01ms
vol1-wid7268      7268      525        32.81MB/s    40.03ms
vol2-wid73514    73514      525        32.81MB/s    47.99ms
-total-              -     1030        64.38MB/s    36.47ms
vol1-wid7268      7268      515        32.19MB/s    20.47ms
vol2-wid73514    73514      515        32.19MB/s    52.48ms
-total-              -     1032        64.50MB/s    37.43ms
vol1-wid7268      7268      516        32.25MB/s    31.44ms
vol2-wid73514    73514      516        32.25MB/s    43.42ms
.
.
(以下略)
.
.

IOPSがそれぞれ700弱ほどだったのが、500ほどに変わりました。Qos Maxで設定した合計ではなく、設定した値で各ボリュームにQoSがかかっていることが分かります。

vol1vol2のCloudWatchメトリクスは以下のとおりです。

vol1

vol1_QoS Max no share

vol2

vol2_QoS Max no share

QoS Min

QoS Minも試してみましょう。

Tiering PolicyはNoneにしていますが、どうでしょうか。

QoS Minを設定したQoSポリシーグループを作成します。

::*> qos policy-group create -policy-group qos-policy-min -vserver svm -is-shared false -min-throughput 110MB/s,2000IOPS

::*> qos policy-group show -policy-group qos-policy-min -instance

              Policy Group Name: qos-policy-min
                        Vserver: svm
                           Uuid: caadefc0-262b-11ef-9008-7b6bd20c863b
             Policy Group Class: user-defined
                Policy Group ID: 9688
             Maximum Throughput: INF
             Minimum Throughput: 110MB/s,2000IOPS
            Number of Workloads: 0
              Throughput Policy: 110MB/s,2000IOPS-INF
                      Is Shared: false
       Is Policy Auto Generated: -
::*> volume modify -volume vol1 -qos-policy-group qos-policy-min

Error: command failed: Invalid QoS policy group specified "qos-policy-min". The specified QoS policy group has a min-throughput value set, and the workload being assigned resides on a platform that does not support
       min-throughput or the cluster is in a mixed version state and the effective cluster version of ONTAP does not support min-throughput on this platform.

::*> version
NetApp Release 9.13.1P9: Fri Apr 19 17:13:02 UTC 2024

どうやら現状のFSxNではQoS MinのQoSポリシーグループを割り当てできないようです。

エラーメッセージで検索したところ、NetAppのKBに以下のような記載がありました。

最小スループットのQoSポリシーは、ボリュームがAFF、C190、またはONTAP Selectプレミアムプラットフォーム上にある場合にのみ許可されます。

サポートされていないプラットフォームでスループットの下限を設定できません - NetApp

SVMへQoSポリシーグループへの割り当て

SVMへのQoSポリシーグループへの割り当てをした時の挙動を確認します。

SVMに割り当てるにあたって、子のストレージオブジェクトであるボリュームのQoSポリシーグループは外しておきます。

::*> volume modify -volume vol* -qos-policy-group -
Volume modify successful on volume vol1 of Vserver svm.
Volume modify successful on volume vol2 of Vserver svm.
2 entries were modified.

::*> volume show -volume vol* -fields qos-policy-group
vserver volume qos-policy-group
------- ------ ----------------
svm     vol1   -
svm     vol2   -
2 entries were displayed.

SVMにQoSポリシーグループを割り当てます。

::*> vserver modify -vserver svm -qos-policy-group qos-policy

::*> vserver show -vserver svm -fields qos-policy-group
vserver qos-policy-group
------- ----------------
svm     qos-policy

::*> volume show -volume vol* -fields qos-policy-group
vserver volume qos-policy-group
------- ------ ----------------
svm     vol1   -
svm     vol2   -
2 entries were displayed.

この状態でvol1vol2にfioでアクセスします。

fio実行中のスループット、IOPS、レイテンシーは以下のとおりです。

::*> qos statistics volume performance show
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     1375        85.00MB/s    47.50ms
vol1-wid7268      7268     1360        85.00MB/s    47.51ms
vol2-wid73514    73514       15            0KB/s    46.51ms
-total-              -     1356        84.00MB/s    46.07ms
vol1-wid7268      7268     1344        84.00MB/s    45.87ms
vol2-wid73514    73514       12            0KB/s    68.13ms
-total-              -     1364        84.38MB/s    45.82ms
vol1-wid7268      7268     1350        84.38MB/s    45.81ms
vol2-wid73514    73514       14            0KB/s    46.23ms
-total-              -     1364        84.50MB/s    46.55ms
vol1-wid7268      7268     1352        84.50MB/s    46.43ms
vol2-wid73514    73514       12            0KB/s    60.66ms
-total-              -     1366        84.44MB/s    44.95ms
vol1-wid7268      7268     1351        84.44MB/s    44.88ms
vol2-wid73514    73514       15            0KB/s    51.55ms
-total-              -     1348        83.50MB/s    48.89ms
vol1-wid7268      7268     1336        83.50MB/s    48.72ms
vol2-wid73514    73514       12            0KB/s    68.05ms
-total-              -     1374        84.81MB/s    44.96ms
vol1-wid7268      7268     1357        84.81MB/s    44.99ms
vol2-wid73514    73514       17            0KB/s    42.17ms
Workload            ID     IOPS       Throughput    Latency
--------------- ------ -------- ---------------- ----------
-total-              -     1368        84.19MB/s    46.11ms
vol1-wid7268      7268     1347        84.19MB/s    46.43ms
vol2-wid73514    73514       21            0KB/s    25.86ms
-total-              -     1368        84.19MB/s    46.11ms
vol1-wid7268      7268     1347        84.19MB/s    46.43ms
vol2-wid73514    73514       21            0KB/s    25.86ms
-total-              -     1367        84.12MB/s    43.49ms
vol1-wid7268      7268     1346        84.12MB/s    43.74ms
vol2-wid73514    73514       21            0KB/s    27.78ms
-total-              -     1370        84.94MB/s    48.37ms
vol1-wid7268      7268     1359        84.94MB/s    48.20ms
vol2-wid73514    73514       11            0KB/s    70.04ms
-total-              -     1383        84.38MB/s    46.32ms
vol1-wid7268      7268      979        61.19MB/s    44.02ms
vol2-wid73514    73514      404        23.19MB/s    51.88ms
-total-              -     1350        84.38MB/s    40.29ms
vol2-wid73514    73514      689        43.06MB/s    39.52ms
vol1-wid7268      7268      661        41.31MB/s    41.10ms
-total-              -     1339        83.69MB/s    41.20ms
vol2-wid73514    73514      679        42.44MB/s    41.42ms
vol1-wid7268      7268      660        41.25MB/s    40.97ms
.
.
(以下略)
.
.

ボリュームの合計スループットがQoSポリシーグループで設定した80MBpsほどになっています。

SVMにQoSポリシーグループを割り当てている状態で、ボリュームにQoSポリシーグループを割り当てようとしてみます。

::*> volume modify -volume vol1 -qos-policy-group qos-policy-no-share

Error: command failed: Volume "vol1" cannot be in a QoS policy group because its parent Vserver "svm" already has a policy group.  Either modify Vserver "svm" to set its QoS policy group to "none" or do not assign a policy
       group to Volume "vol1". Use the "qos workload show" command to view all QoS workloads.

::*> volume show -volume vol* -fields qos-policy-group
vserver volume qos-policy-group
------- ------ ----------------
svm     vol1   -
svm     vol2   -
2 entries were displayed.

はい、意図したとおり拒否されました。

続いて、SVMに非共有QoSポリシーグループを割り当てようとしてみます。

::*> vserver modify -vserver svm -qos-policy-group qos-policy-no-share

Error: command failed: Invalid QoS policy group "qos-policy-no-share" specified. The specified QoS policy group is a non-shared policy. Data Vservers are not supported by a non-shared policy group.

::*> vserver show -vserver svm -fields qos-policy-group
vserver qos-policy-group
------- ----------------
svm     qos-policy

非共有QoSポリシーグループはSVMに割り当てられないようです。

1つのFSxNファイルシステムにさまざまなワークロードを集約したい時に

Amazon FSx for NetApp ONTAPにてQoSでIOPSとスループットの上限を絞ってみました。

QoSは1つのFSxNファイルシステムにさまざまなワークロードを集約したい時には必須だと思います。まずはSVM単位で絞ってみてはいかがでしょうか。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.