第4章 ユースケースシナリオ
本章には、cgroup の機能性を活用したユースケースシナリオを記載します。
4.1. データベース I/O の優先
独自の専用仮想ゲスト内でデータベースサーバーの各インスタンスを実行することにより、優先度に基づいてデータベースごとにリソースを割り当てることができます。次の例を検討してください: システムが 2 台の KVM ゲスト内で 2 つのデータベースを実行しています。一方のデータベースは優先度が高く、もう一方は優先度の低いデータベースです。両方のデータベースサーバーが同時に稼働すると、I/O スループットが低減し、両データベースからの要求に同等に対応します。図4.1「リソース割り当てを使用しない I/O スループット」 は、このシナリオを示しています。— 優先度の低いデータベースが起動されると (時間軸 45 前後)、I/O スループットが両データベースサーバーで同じとなっています。
図4.1 リソース割り当てを使用しない I/O スループット
優先度の高いデータベースサーバーを優先するには、予約済みの I/O 操作の高い数値を cgroup に割り当てる一方、優先度低いデータベースサーバーには予約済み I/O 操作の低い数値を cgroup に割り当てます。この設定は手順4.1「I/O スループットの優先度設定」 の手順にしたがって行います。作業はすべてホストシステム上で実行します。
手順4.1 I/O スループットの優先度設定
blkio
サブシステムを/cgroup/blkio
cgroup に接続します。~]#
mkdir /cgroup/blkio
~]#mount -t cgroup -o blkio blkio /cgroup/blkio
- 優先度の高い cgroup と低い cgroup を作成します。
~]#
mkdir /cgroup/blkio/high_prio
~]#mkdir /cgroup/blkio/low_prio
- 両仮想ゲスト (データベースサーバーを実行している) を示す PID を取得し、それら固有の cgroup に移動します。この例では、
VM_high
は優先度の高いデータベースサーバーを実行している仮想ゲストを示し、VM_low
は優先度の低いデータベースサーバーを実行している仮想ゲストを示しています。以下はその例です。~]#
ps -eLf | grep qemu | grep VM_high | awk '{print $4}' | while read pid; do echo $pid >> /cgroup/blkio/high_prio/tasks; done
~]#ps -eLf | grep qemu | grep VM_low | awk '{print $4}' | while read pid; do echo $pid >> /cgroup/blkio/low_prio/tasks; done
high_prio
cgroup とlow_prio
cgroup の比を 10:1 に設定します。それらの cgroup 内のプロセス (前のステップでそれらの cgroup に追加した仮想ゲストを実行しているプロセス) は、それらのプロセスが利用可能なリソースのみを即時に使用します。~]#
echo 1000 > /cgroup/blkio/high_prio/blkio.weight
~]#echo 100 > /cgroup/blkio/low_prio/blkio.weight
この例で、優先度の低い cgroup は、優先度の低いデータベースサーバーが約 10 % の I/O 操作を使用するのを許可する一方、優先度の高い cgroup は、優先度の高いデータベースサーバーが約 90 % の I/O 操作を使用するのを許可します。
図4.2「I/O スループットとリソース割り当て」 は、優先度の低いデータベースを制限し、優先度の高いデータベースを優先した結果を図示しています。データベースサーバーが適切な cgroup に移動されると (時間軸 75 前後) 即時に I/O スループットが 10:1 の比率で両サーバー間で分配されます。
図4.2 I/O スループットとリソース割り当て
あるいは、ブロックデバイス I/O スロットリングを使用して、優先度の低いデータベースの読み取り/書き込み操作を制限することができます。
blkio
サブシステムに関するさらに詳しい情報は、「blkio」 を参照してください。