はじめに
共有Storage機器の利用するにあたって、パフォーマンス管理は重要な課題となりますが、NetAppのONTAPではIOPS(Input/Output Operations Per Second)やMB/s(megabytes per second)に基づくパフォーマンスの上限値を設定し、特定のVolumeやSVMでリソースが消費されてしまう事を避けることができるQuality of Service(QoS)機能を利用する事ができます。
しかし、IOPSを使って制限する際に、ファイルサイズによって発生するスループット(MB/s)が異なるため、IOPSによる設定では思わぬボトルネックを生む可能性があります。
特に前回の記事にあるようにElementOSからONTAPへ移行をする際には、今までIOPS指定で行っていたQoS設定を見直す必要が発生しますので、本記事ではONTAPのQoS利用における注意点と、ファイルサイズがスループット(MB/s)に与える影響について記載します。

何をしたい?できる?
CIFS用VolumeにQoS Policy group制約を設定
QoS設定済VolumeにI/Oサイズの違うWriteを実行し、発生するIOPS比較
ElementOSにおけるQoS policy Groupの設定
Element OSの場合、IOサイズが4Kの場合のIOPS値を使って設定しますが、
GUIで設定する際にI/Oサイズが異なる際のIOPS上限やMB/sへの換算値を確認することができます。
同様の設定をONTAP上で行う場合は、ONTAPのQoS Policy Groupの設定を利用します。

スループットとIOPSについて
スループット(MB/S)は、I/OサイズとIOPSを掛けて算出できます。
例えば、32KBのI/Oサイズで6144 IOPSの場合
32 x 6144 = 190MB/S (196608/1024)になります。
本記事のように、Element OSの設定を引き継ぎたい場合は、I/Oサイズが一定とならない事を鑑みてスループット(MB/S)でQoSを設定する事が推奨されます。
IOPS/GBのようなAdaptive QoSを利用する場合は、I/Oサイズ指定が可能です
記事における環境情報
本記事では、以下の環境で実施した内容となります。
**分かり易くするために、Network構成は単純化しています。
- ONTAP : 9.16.1
- Windows Active Directory環境

確認手順
本記事ではVolumeへのCIFSアクセスを設定が完了済の状態から開始します
1. QoS設定をVolumeに適用
Element OSとQoS Policy Groupを作成し、Volumeに割り当てます。
QoSの上限値について比較したいので、100IOPSといった小さい値で確認します。
# QoS PolicyGroupの作成と確認
> qos policy-group create -policy-group policy01 -vserver cifs02 -is-shared false -max-throughput 100iops
> qos policy-group show -vserver cifs02 -policy-group policy01
Policy Group Name: policy01
Vserver: cifs02
Uuid: b6cfd60e-15ec-11f0-a306-d039ea5905a2
Policy Group Class: user-defined
Policy Group ID: 3335
Maximum Throughput: 100IOPS
Minimum Throughput: 0
Number of Workloads: 1
Throughput Policy: 0-100IOPS
Is Shared: false
Is Policy Auto Generated: -
# VolumeへのQoS Policy割り当てと確認
> volume modify -vserver cifs02 -volume vol100 -qos-policy-group policy01
Volume modify successful on volume vol100 of Vserver cifs02.
> vol show -vserver cifs02 -volume vol100 -fields qos-policy-group
vserver volume qos-policy-group
------- ------ ----------------
cifs02 vol100 policy01
2. ファイルコピー時のI/Oサイズ測定
サイズの異なるファイルをVolumeにコピーしてI/Oサイズの違いとQoSの制約について確認します。なお、Volumeに発生している秒間のI/Qサイズはqos statistics volume characteristics showで確認することができます。
Node単位やそれ以外の統計情報に関するCLIについては、別の方の書いている記事がありますので、参考になるかと思います
2-1. サイズ4Kのファイルコピー
Windows Clientから4KB x1000ファイルのコピーを実施します。
併せてONTAP側でVolumeのIOPSやサイズを確認します。
IOPSがBurstは発生するものの、100IOPの上限となっている事が確認できます。
# Volume単位のIOPSやスループット、I/Oサイズの確認
> qos statistics volume characteristics show -vserver cifs02 -volume vol100
Workload ID IOPS Throughput Request Size Read Concurrency
--------------- ------ -------- ---------------- ------------ ---- -----------
-total- - 121 32.00KB/s 270B 0% 2
vol100-wid7735 7735 121 32.00KB/s 270B 0% 2
-total- - 109 48.00KB/s 450B 0% 1
vol100-wid7735 7735 108 48.00KB/s 455B 0% 1
-total- - 100 56.00KB/s 573B 0% 1
vol100-wid7735 7735 100 56.00KB/s 573B 0% 1
-total- - 111 44.00KB/s 405B 0% 3
vol100-wid7735 7735 111 44.00KB/s 405B 0% 3
-total- - 105 52.00KB/s 507B 0% 2
vol100-wid7735 7735 105 52.00KB/s 507B 0% 2
(中略)
2-2. サイズ1Mのファイルコピー
Windows Clientから1MB x1000ファイルのコピーを実施します。

併せてONTAP側でVolumeのIOPSやサイズを確認します。
IOPSが凡そ100IOPの上限となっていますが、I/Oサイズ(Request Size)が大きいので、Throughputが4KBのファイルコピーより高い事が確認できます。
# Volume単位のIOPSやスループット、I/Oサイズの確認
> qos statistics volume characteristics show -vserver cifs02 -volume vol100
Workload ID IOPS Throughput Request Size Read Concurrency
--------------- ------ -------- ---------------- ------------ ---- -----------
-total- - 136 10.75MB/s 82883B 0% 0
vol100-wid7735 7735 136 10.75MB/s 82883B 0% 0
-total- - 121 5.50MB/s 47662B 0% 2
vol100-wid7735 7735 121 5.50MB/s 47662B 0% 2
-total- - 113 7.75MB/s 71915B 0% 2
vol100-wid7735 7735 113 7.75MB/s 71915B 0% 2
-total- - 115 7.00MB/s 63826B 0% 1
vol100-wid7735 7735 115 7.00MB/s 63826B 0% 1
-total- - 109 7.00MB/s 67339B 0% 2
vol100-wid7735 7735 109 7.00MB/s 67339B 0% 2
-total- - 120 7.25MB/s 63351B 0% 1
vol100-wid7735 7735 118 7.25MB/s 64425B 0% 1
-total- - 115 7.00MB/s 63826B 0% 1
(中略)
(参考) Adaptive QoS利用でI/Oサイズ固定とした場合
今までは、Adaptive QoSでいう所のI/OサイズをANYに設定したのと類似の挙動となっています。もし、Adaptive QoSを利用してI/Oサイズを64KBにして100IOPS/GBのような設定を実施した場合に、小さいサイズのI/Oのスループットが上昇するか確認してみます。
# Adaptive QoSをBlock Size(I/Oサイズ)64Kで作成と確認
> qos adaptive-policy-group create -policy-group policy02 -expected-iops 100iops/GB -absolute-min-iops 100iops -peak-iops 220iops/GB -Block-size 64K
> qos adaptive-policy-group show -vserver cifs02 -policy-group policy02
Name: policy02
Vserver: cifs02
Uuid: b7320d7a-18e4-11f0-a306-d039ea5905a2
ID: 10648
Expected IOPS: 100IOPS/GB
Peak IOPS: 220IOPS/GB
Absolute Minimum IOPS: 100IOPS
Expected IOPS Allocation: allocated-space
Peak IOPS Allocation: used-space
Block Size: 64K
Number of Workloads: 0
# VolumeへのQoS Policy割り当てと確認
> volume modify -vserver cifs02 -volume vol100 -qos-adaptive-policy-group policy02
Volume modify successful on volume vol100 of Vserver cifs02.
> vol show -vserver cifs02 -volume vol100 -fields size,qos-adaptive-policy-group
vserver volume size qos-adaptive-policy-group
------- ------ ---- -------------------------
cifs02 vol100 20GB policy02
実際に4Kサイズのファイルへの書き込みを行うと、IOPSが100を超えることが確認でき、それに伴いスループットも向上していることが確認できます。

# Volume単位のIOPSやスループット、I/Oサイズの確認
> qos statistics volume characteristics show -vserver cifs02 -volume vol100
Workload ID IOPS Throughput Request Size Read Concurrency
-total- - 0 0KB/s 0B 0% 0
-total- - 733 408.00KB/s 569B 0% 0
vol100-wid7735 7735 733 408.00KB/s 569B 0% 0
-total- - 2058 836.00KB/s 415B 0% 0
vol100-wid7735 7735 2058 836.00KB/s 415B 0% 0
-total- - 2693 820.00KB/s 311B 0% 0
vol100-wid7735 7735 2693 820.00KB/s 311B 0% 0
-total- - 2696 840.00KB/s 319B 0% 0
vol100-wid7735 7735 2696 840.00KB/s 319B 0% 0
-total- - 2318 604.00KB/s 266B 0% 1
vol100-wid7735 7735 2318 604.00KB/s 266B 0% 1
-total- - 1798 492.00KB/s 280B 0% 0
(中略)
参考及びリンク
Guarantee throughput with QoS overview in ONTAP