第4章 ユースケースシナリオ

本章には、cgroup の機能性を活用したユースケースシナリオを記載します。

4.1. データベース I/O の優先

独自の専用仮想ゲスト内でデータベースサーバーの各インスタンスを実行することにより、優先度に基づいてデータベースごとにリソースを割り当てることができます。次の例を検討してください: システムが 2 台の KVM ゲスト内で 2 つのデータベースを実行しています。一方のデータベースは優先度が高く、もう一方は優先度の低いデータベースです。両方のデータベースサーバーが同時に稼働すると、I/O スループットが低減し、両データベースからの要求に同等に対応します。図4.1「リソース割り当てを使用しない I/O スループット」 は、このシナリオを示しています。— 優先度の低いデータベースが起動されると (時間軸 45 前後)、I/O スループットが両データベースサーバーで同じとなっています。
リソース割り当てを使用しない I/O スループット

図4.1 リソース割り当てを使用しない I/O スループット

優先度の高いデータベースサーバーを優先するには、予約済みの I/O 操作の高い数値を cgroup に割り当てる一方、優先度低いデータベースサーバーには予約済み I/O 操作の低い数値を cgroup に割り当てます。この設定は手順4.1「I/O スループットの優先度設定」 の手順にしたがって行います。作業はすべてホストシステム上で実行します。

手順4.1 I/O スループットの優先度設定

  1. blkio サブシステムを /cgroup/blkio cgroup に接続します。
    ~]# mkdir /cgroup/blkio
    ~]# mount -t cgroup -o blkio blkio /cgroup/blkio
  2. 優先度の高い cgroup と低い cgroup を作成します。
    ~]# mkdir /cgroup/blkio/high_prio
    ~]# mkdir /cgroup/blkio/low_prio
  3. 両仮想ゲスト (データベースサーバーを実行している) を示す 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
  4. 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 の比率で両サーバー間で分配されます。
I/O スループットとリソース割り当て

図4.2 I/O スループットとリソース割り当て

あるいは、ブロックデバイス I/O スロットリングを使用して、優先度の低いデータベースの読み取り/書き込み操作を制限することができます。blkio サブシステムに関するさらに詳しい情報は、「blkio」 を参照してください。