10.2. 入出力リソースの割り当て
このセクションでは、QoS 制御が予約、制限、重みの割り当てを実行して、内部でどのように機能するかを説明します。QoS 制御は、mClock プロファイルによって自動的に設定されるため、ユーザーが設定する必要はありません。制御のチューニングは、利用可能な mClock プロファイルを使用してのみ実行できます。
dmClock アルゴリズムは、重みに比例して Ceph クラスターの入出力 (I/O) リソースを割り当てます。サービスがリソースに対して公平に競合できるように、予約の下限と制限の上限を設定します。
現在、mclock_scheduler
操作キューは、I/O リソースが含まれる Ceph サービスを以下のバケットに分割します。
-
client op
: クライアントによって発行された 1 秒あたりの入出力操作数 (IOPS)。 -
pg deletion
: プライマリー Ceph OSD によって発行された IOPS。 -
snap trim
: スナップショットのトリミングに関連するリクエスト。 -
pg recovery
: リカバリー関連のリクエスト。 -
pg scrub
: スクラブ関連のリクエスト。
リソースは、次の 3 つのタグセットを使用して分割されます。つまり、各サービスタイプの共有は、これらの 3 つのタグによって制御されます。
- 予約
- Limit
- 重み
予約
サービスに割り当てられた最小 IOPS。サービスの予約が多いほど、必要に応じて、より多くのリソースを所有することが保証されます。
たとえば、予約が 0.1 (または 10%) に設定されているサービスには、常に OSD の IOPS 容量の 10% がそれ自体に割り当てられます。そのため、クライアントが大量の I/O リクエストを発行し始めても、すべての I/O リソースが枯渇することはなく、高負荷のクラスターでもサービスの動作が枯渇することはありません。
Limit
サービスに割り当てられた IOPS の上限。サービスは、それが必要なリクエストで、競合するサービスがない場合でも、設定された 1 秒あたりの対応数を超えてリクエストを取得することはありません。サービスが適用された制限を超えると、制限が復元されるまで操作は操作キューに残ります。
値が 0
(無効) に設定されている場合、サービスは制限設定による制限を受けず、他に競合する操作がない場合はすべてのリソースを使用できます。これは、mClock プロファイルでは "MAX" として表されます。
予約および制限パラメーターの割り当ては、Ceph OSD の下で、バッキングデバイスのタイプ (HDD または SSD) に基づきシャードごとに行われます。osd_op_num_shards_hdd
および osd_op_num_shards_ssd
パラメーターの詳細は、OSD オブジェクトストレージデーモンの設定オプション を参照してください。
重み
追加容量またはシステムが不十分な場合における容量の配分比。サービスの重みが競合するサービスよりも大きい場合、サービスは I/O リソースを多く使用できます。
サービスの予約値と制限値は、OSD の合計 IOPS 容量の割合に基づいて指定されます。この割合は、mClock プロファイルではパーセンテージとして表されます。重量にはありません。重みは相対的であるため、あるクラスのリクエストの重みが 9 で、別のクラスの重みが 1 である場合、リクエストは 9 対 1 の比率で実行されます。ただし、これは予約が満たされた場合にのみ実行され、その値には予約フェーズで実行された操作が含まれます。
重みが W
に設定されている場合、指定されたクラスのリクエストに対して、次に入力される重みタグは 1/W
と前の重みタグ、または現在時刻のいずれか大きい方になります。つまり、W
が大きく、そのために 1/W
が小さくなりすぎる場合、算出されるタグは現在時刻の値になり、割り当てられることはありません。
したがって、重みの値は、1 秒あたりに処理されると予想されるリクエストの数より小さくなければなりません。