はじめに
ONTAPにおけるQuality of Service(QoS)とは、特定アプリケーションによる過剰なリソース占有(いわゆるNoisy Neighbor問題)を防ぎ、サービスレベル合意(SLA)を保護する制御機構として動作する機能となってます。
従来のアーキテクチャでは、QoSはSVM、FlexVol、LUN、個別ファイルのいずれか単一のオブジェクトにのみ排他的に割り当てる仕様でしたが、ONTAP 9.18.1 で Nested QoS(階層型 QoS)が導入され、ONTAP 9.19.1 では従来固定だった短時間Burst値の挙動を管理者が調整できるようになっています。
本記事では、上記のNested QoSとBurst値の調整について記載いたします。
何をしたい?できる?
- SVMとVolumeの両方にQoSを設定する
- QoSのBurst値を調整する
Nested QoSについて
マニュアルに記載があるように、全オブジェクトへの設定がサポートされているのでは無く、以下の構成についてサポートされます。
(2026/9の段階ではLUNやFileはサポートされていない)
- SVMとFlexVolume or FlexGroup
- FlexVolume or FlexGroupとQtree
Nested QoSを利用することで、SVMで最大10000 IOPSを設定し、各Volumeの設定値の合計を20000 IOPSとなるようなパフォーマンスのオーバーコミットを設定しつつ、SVMに設定した最大値を超えさせないような設定が可能です。
もちろん、物理Nodeの最大値を超えることはできません。
Burst値の調整について
以前までは、上限を1秒間だけ50%引き上げるといった挙動となっていたのを
ONTAP9.19.1から割合や時間を調整できるようになってます。
調整できる項目は以下の通りです。
- burst-percent :増加率(%)
- burst duration:増加時間(秒)
- burst-iops :スループット上限を超える最大IOP数
Burst値を変更できるから設定というよりは、今までの1秒間だけ50%引き上げをbaselineとし、ワークロードに合わせて調整しながら割合や時間を延ばすといった使い方になるかと思います。
調整時の初回設定例
| ワークロード | 調整値 | 備考 |
|---|---|---|
| 低Latency向けのシステム用 | 10–25%の増加 / 1–2秒 | 隣接への影響は小さくする |
| DB startup | 25–50%の増加 / 1–5秒 | 初期化時間を改善 |
| VM boot / VDI login | 25–50%の増加 / 1–5秒 | 一時的 spike を吸収 |
また、Nested QoSと組み合わせることで「tenant(SVM)全体の性能予算」「volume毎の上限(ガードレール)」「未使用 Headroom の短時間活用」を柔軟に設計できるようになります。
記事における環境情報
本記事では、以下の環境で実施した内容となります。
- ONTAP: 9.19.1
環境のイメージとしては以下の通りです。
設定手順
1. Nest QoSの設定
1-1. QoS Policy Groupの作成
SVMへ設定するQoSについては、Shareが無効なPolicyを設定しようとするとエラーとなるので、Shareが有効なPolicyの作成を実行します。
# SVM用
> qos policy-group create -vserver nfs500 -policy-group qos_svm -is-shared true -max-throughput 80mb/s
# vol1用
> qos policy-group create -vserver nfs500 -policy-group qos_vol1 -is-shared false -max-throughput 60mb/s -min-throughput 30mb/s
# vol2用
> qos policy-group create -vserver nfs500 -policy-group qos_vol2 -is-shared false -max-throughput 50mb/s -min-throughput 25mb/s
# 設定値の確認
> qos policy-group show -vserver nfs500 -policy-group qos_* -fields max-throughput,min-throughput
policy-group max-throughput min-throughput
------------ -------------- --------------
qos_svm 80MB/s 0
qos_vol1 60MB/s 30MB/s
qos_vol2 50MB/s 25MB/s
3 entries were displayed.
1-2. QoS Policyの割り当て
# SVM用
> vserver modify -vserver nfs500 -qos-policy-group qos_svm
# vol1用
> volume modify -vserver nfs500 -volume vol1 -qos-policy-group qos_vol1
Volume modify successful on volume vol1 of Vserver nfs500.
# vol2用
> volume modify -vserver nfs500 -volume vol2 -qos-policy-group qos_vol2
Volume modify successful on volume vol2 of Vserver nfs500.
# SVMへのQoS割り当て確認
> vserver show -vserver nfs500 -fields qos-policy-group
vserver qos-policy-group
------- ----------------
nfs500 qos_svm
# VolumeへのQoS割り当て確認
> volume show -vserver nfs500 -volume vol* -fields qos-policy-group
vserver volume qos-policy-group
------- ------ ----------------
nfs500 vol1 qos_vol1
nfs500 vol2 qos_vol2
2 entries were displayed.
1-3. ClientからI/Oを掛けて挙動の確認
Linuxからmountされている状態を確認し、fioで負荷を掛けます。
# dfの確認
> df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/almalinux-root 190G 43G 148G 23% /
<中略>
172.16.21.140:/vol1 9.5G 7.2G 2.4G 76% /vol1
172.16.21.140:/vol2 9.5G 6.4G 3.2G 67% /vol2
# Linuxから実行
> fio --name=/vol1/random-write-test --ioengine=libaio --rw=randrw --bs=16k --size=1G --numjobs=4 --time_based --runtime=180s --group_reporting
vol1だけに負荷を掛けているので、total行とvolume行に約60MB/sの値が表示されているのが確認できます。
> qos statistics volume characteristics show -vserver nfs500 -volume vol1
Workload ID IOPS Throughput Request Size Read Concurrency
--------------- ------ -------- ---------------- ------------ ---- -----------
-total- - 0 0KB/s 0B 0% 0
-total- - 3279 51.09MB/s 16339B 99% 0
vol1-wid62675 62675 3279 51.09MB/s 16339B 99% 0
-total- - 4459 69.68MB/s 16384B 100% 1
vol1-wid62675 62675 4459 69.68MB/s 16384B 100% 1
-total- - 3830 59.84MB/s 16384B 100% 1
vol1-wid62675 62675 3830 59.84MB/s 16384B 100% 1
-total- - 3839 59.98MB/s 16384B 100% 3
vol1-wid62675 62675 3839 59.98MB/s 16384B 100% 3
-total- - 3866 60.41MB/s 16384B 100% 1
vol1-wid62675 62675 3866 60.41MB/s 16384B 100% 1
-total- - 3706 59.78MB/s 16914B 77% 3
vol1-wid62675 62675 3706 59.78MB/s 16914B 77% 3
-total- - 3417 60.11MB/s 18443B 1% 8
vol1-wid62675 62675 3417 60.11MB/s 18443B 1% 8
上記のvol1へ負荷が掛かっている状態でvol2にも負荷を掛けるとSVMへ設定したQoS値がガードレールとなり、total(SVM)としては約80MB/secで頭打ちになります。
vol1はvol2にも負荷が掛かっている為、vol1としては60MB/s以下で動作する点が確認できます。(vol1とvol2で合計80MB/sの負荷となった状態)
なお、1秒だけ高い値が出ているのはデフォルトBurst値の影響となります。
> qos statistics volume characteristics show -vserver nfs500 -volume vol1
Workload ID IOPS Throughput Request Size Read Concurrency
--------------- ------ -------- ---------------- ------------ ---- -----------
-total- - 9 0KB/s 0B 0% 0
vol1-wid62675 62675 9 0KB/s 0B 0% 0
-total- - 4750 74.22MB/s 16384B 100% 1
vol1-wid62675 62675 4750 74.22MB/s 16384B 100% 1
-total- - 3951 61.73MB/s 16384B 100% 1
vol1-wid62675 62675 3951 61.73MB/s 16384B 100% 1
-total- - 3854 60.22MB/s 16384B 100% 3
vol1-wid62675 62675 3854 60.22MB/s 16384B 100% 3
-total- - 3846 60.09MB/s 16384B 100% 1
vol1-wid62675 62675 3846 60.09MB/s 16384B 100% 1
-total- - 4654 72.59MB/s 16352B 99% 3
vol1-wid62675 62675 3688 57.63MB/s 16384B 100% 2
-total- - 6091 95.19MB/s 16386B 100% 3
vol1-wid62675 62675 3059 47.81MB/s 16389B 100% 1
-total- - 5104 79.73MB/s 16380B 100% 6
vol1-wid62675 62675 2557 39.94MB/s 16377B 100% 3
-total- - 5137 80.27MB/s 16384B 100% 3
vol1-wid62675 62675 2556 39.94MB/s 16384B 100% 1
-total- - 5103 79.73MB/s 16384B 100% 6
vol1-wid62675 62675 2575 40.23MB/s 16384B 100% 3
3. QoSへのBurst値の設定
3-1. QoS Policy Groupの編集
本記事では既にQoS Policy Groupを作成済なので、以下の内容でmodifyを実施します。
- burst-percentを50%
- burst-durationを10秒
# vol1用
> qos policy-group modify -policy-group qos_vol1 -max-throughput 50mb/s -burst-percent 50 -burst-duration 10
# 設定値の確認
> qos policy-group show -vserver nfs500 -policy-group qos_vol1 -instance
Policy Group Name: qos_vol1
Vserver: nfs500
Uuid: 4faa03e4-bbd8-11f1-ba79-d039ead56cfd
Policy Group Class: user-defined
Policy Group ID: 7341
Maximum Throughput: 50MB/s
Minimum Throughput: 30MB/s
Number of Workloads: 1
Throughput Policy: 30MB/s-50MB/s
Is Shared: false
Is Policy Auto Generated: -
Throughput burst percent: 50
Throughput burst IOPS Maximum: -
Throughput burst duration (sec): 10
3-2. クライアントから負荷を掛けて確認
# Linuxから実行
> fio --name=/vol1/random-write-test --ioengine=libaio --rw=randrw --bs=16k --size=1G --numjobs=4 --time_based --runtime=180s --group_reporting
本来は突発的に高負荷が発生する為の対策として利用されますが、
ツールの都合上、負荷を掛けた際に冒頭の10秒間はMaximum Throughputの50MB/sを超える負荷が掛かっている事を確認します。
# ONTAPから負荷確認
> qos statistics volume characteristics show -vserver nfs500 -volume vol1
Workload ID IOPS Throughput Request Size Read Concurrency
--------------- ------ -------- ---------------- ------------ ---- -----------
-total- - 0 0KB/s 0B 0% 0
-total- - 2071 32.14MB/s 16273B 99% 0
vol1-wid62675 62675 2071 32.14MB/s 16273B 99% 0
-total- - 4456 69.62MB/s 16384B 100% 1
vol1-wid62675 62675 4456 69.62MB/s 16384B 100% 1
-total- - 4493 70.20MB/s 16384B 100% 1
vol1-wid62675 62675 4493 70.20MB/s 16384B 100% 1
-total- - 4493 70.20MB/s 16384B 100% 1
vol1-wid62675 62675 4493 70.20MB/s 16384B 100% 1
-total- - 4441 69.39MB/s 16384B 100% 3
vol1-wid62675 62675 4441 69.39MB/s 16384B 100% 3
-total- - 4519 70.61MB/s 16384B 100% 1
vol1-wid62675 62675 4519 70.61MB/s 16384B 100% 1
-total- - 3835 69.42MB/s 18981B 1% 9
vol1-wid62675 62675 3835 69.42MB/s 18981B 1% 9
-total- - 4165 70.45MB/s 17737B 41% 7
vol1-wid62675 62675 4165 70.45MB/s 17737B 41% 7
-total- - 4454 69.59MB/s 16384B 100% 1
vol1-wid62675 62675 4454 69.59MB/s 16384B 100% 1
-total- - 4486 70.09MB/s 16384B 100% 1
vol1-wid62675 62675 4486 70.09MB/s 16384B 100% 1
-total- - 3952 61.75MB/s 16384B 100% 3
vol1-wid62675 62675 3952 61.75MB/s 16384B 100% 3
-total- - 2692 50.08MB/s 19505B 15% 6
vol1-wid62675 62675 2692 50.08MB/s 19505B 15% 6
-total- - 2556 50.10MB/s 20548B 1% 8
vol1-wid62675 62675 2556 50.10MB/s 20548B 1% 8
-total- - 2982 49.83MB/s 17521B 67% 3
vol1-wid62675 62675 2982 49.83MB/s 17521B 67% 3
参考及びリンク
Learn about ONTAP QoS throughput guarantee
