【ONTAP管理操作】QoSのIOPS制限とIOサイズについて

## はじめに
共有Storage機器の利用するにあたって、パフォーマンス管理は重要な課題となりますが、**NetAppのONTAPではIOPS（Input/Output Operations Per Second）やMB/s(megabytes per second)に基づくパフォーマンスの上限値を設定**し、特定のVolumeやSVMでリソースが消費されてしまう事を避けることができる**Quality of Service（QoS）機能を利用する事ができます。**

しかし、IOPSを使って制限する際に、ファイルサイズによって発生するスループット(MB/s)が異なるため、IOPSによる設定では思わぬボトルネックを生む可能性があります。

**特に[前回の記事](https://qiita.com/s_yosh1d/items/2540d65716d58341b667)にあるようにElementOSからONTAPへ移行をする際には、今までIOPS指定で行っていたQoS設定を見直す必要が発生**しますので、本記事ではONTAPのQoS利用における注意点と、ファイルサイズがスループット(MB/s)に与える影響について記載します。

<img width="700" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/178c8457-052e-4e29-a7d7-e96abffa6b6c.png>


## 何をしたい？できる？
**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の設定を利用します。

<img width="300" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/093d599d-52ab-4f59-81ca-434d1cdc4b88.png>


## スループットと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を設定する事が推奨**されます。

:::note warn
IOPS/GBのようなAdaptive QoSを利用する場合は、I/Oサイズ指定が可能です
:::

## 記事における環境情報
本記事では、以下の環境で実施した内容となります。
**分かり易くするために、Network構成は単純化しています。
- ONTAP  : 9.16.1
- Windows Active Directory環境

<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/b023a3c9-b385-4f12-8863-3ab3dd6b80a9.png>


## 確認手順

:::note warn
本記事ではVolumeへのCIFSアクセスを設定が完了済の状態から開始します
:::

### 1. QoS設定をVolumeに適用

Element OSとQoS Policy Groupを作成し、Volumeに割り当てます。
**QoSの上限値について比較したいので、100IOPSといった小さい値で確認**します。

```bash:
# 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については、[別の方の書いている記事](https://qiita.com/kan_itani/items/f782c9b4c9ae67b81869)がありますので、参考になるかと思います


#### 2-1. サイズ4Kのファイルコピー
Windows Clientから4KB x1000ファイルのコピーを実施します。
<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/f7cfd828-34f9-4838-ae7e-42209b123f9d.png>


併せてONTAP側でVolumeのIOPSやサイズを確認します。
IOPSがBurstは発生するものの、100IOPの上限となっている事が確認できます。
```bash:
# 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ファイルのコピーを実施します。

<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/f3ee43dd-3353-4c9d-bed4-4983700fca6d.png>


併せてONTAP側でVolumeのIOPSやサイズを確認します。
IOPSが凡そ**100IOPの上限となっていますが、I/Oサイズ(Request Size)が大きいので、Throughputが4KBのファイルコピーより高い事が確認**できます。
```bash:
# 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のスループットが上昇するか確認**してみます。


```bash:
# 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を超えることが確認でき、それに伴いスループットも向上していることが確認できます。


<img width="350" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/74427221-c730-402d-be9a-608550628bf1.png>


```bash:
# 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](https://docs.netapp.com/us-en/ontap/performance-admin/guarantee-throughput-qos-task.html)

[What are IOPs?](https://kb.netapp.com/on-prem/ontap/Perf/Perf-KBs/What_are_IOPs)

[What operations are categorized under Other IOPS in ONTAP?](https://kb.netapp.com/on-prem/ontap/Perf/Perf-KBs/What_operations_are_categorized_under_Other_IOPS_in_ONTAP)

[qos policy-group create](https://docs.netapp.com/us-en/ontap-cli/qos-policy-group-create.html)

[ONTAPの性能の統計情報を簡単にログに残す方法](https://qiita.com/kan_itani/items/f782c9b4c9ae67b81869)