第4章 コントロールグループの適用例
この章では、cgroup 機能を利用するアプリケーションの例を示します。
4.1. データベース I/O の優先順位付け
専用の仮想ゲスト内でデータベースサーバーの各インスタンスを実行すると、優先度に基づいてデータベースごとにリソースを割り当てることができます。次の例を考えてみましょう。システムは、2 つの KVM ゲスト内で 2 つのデータベースサーバーを実行しています。データベースの 1 つは優先度の高いデータベースで、もう 1 つは優先度の低いデータベースです。両方のデータベースサーバーを同時に実行すると、I/O スループットが低下し、両方のデータベースからの要求を均等に処理できます。図4.1「リソース割り当てなしの I/O スループット」はこのシナリオを示しています。優先度の低いデータベースが開始されると (時間 45 頃)、I/O スループットは両方のデータベースサーバーで同じになります。
図4.1 リソース割り当てなしの I/O スループット
[D]
優先度の高いデータベースサーバーに優先順位を付けるには、予約済み I/O 操作の数が多い cgroup に割り当てることができます。一方、優先度の低いデータベースサーバーは、予約済み I/O 操作の数が少ない cgroup に割り当てることができます。これを行うには、次の手順に従います。手順4.1「I/O スループットの優先順位付け」、これらはすべてホストシステムで実行されます。
手順4.1 I/O スループットの優先順位付け
- 両方のサービスでリソースアカウンティングがオンになっていることを確認します。
~]# systemctl
set-property
db1.service
BlockIOAccounting
=true
~]# systemctlset-property
db2.service
BlockIOAccounting
=true
- 高優先度サービスと低優先度サービスの比率を 10:1 に設定します。これらのサービスユニットで実行されているプロセスは、使用可能なリソースのみを使用します。
~]# systemctl
set-property
db1.service
BlockIOWeight
=1000
~]# systemctlset-property
db2.service
BlockIOWeight
=100
図4.2「リソース割り当てによる I/O スループット」 は、優先度の低いデータベースを制限し、優先度の高いデータベースを優先した結果を示しています。データベースサーバーが適切な cgroup に移動されるとすぐに (時間 75 前後)、I/O スループットは両方のサーバー間で 10:1 の比率で分割されます。
図4.2 リソース割り当てによる I/O スループット
[D]
または、ブロックデバイス I/O スロットリングを優先度の低いデータベースに使用して、読み取りおよび書き込み操作の数を制限することもできます。詳細については、
blkio
コントローラーの説明を参照してください。コントローラー固有のカーネルドキュメント .