2.5. コントロールグループ

Red Hat Enterprise Linux は、パフォーマンスチューニング用の便利なオプションを数多く提供します。数百ものプロセッサーにまで拡張する大型システムにチューニングを行い、上質のパフォーマンスを提供することができます。しかし、これらのシステムのチューニングには、かなりの専門知識と明確に定義されたワークロードが必要になります。大型システムが高価で少数だった時には、これらを特別扱いしてもかまいませんでした。今ではこれらのシステムはメインストリームなので、より効果的なツールが必要になっています。
さらに複雑なことに、サービス統合により強力なシステムが今では使われています。昔は 4 から 8 台のサーバーで実行していたワークロードは、いまでは 1 台のサーバーでまかなわれています。「パラレルコンピューティング」 での説明にもあったように、現在の多くのミッドレンジシステムは、一昔前の高パフォーマンスマシンよりも多くのコアを備えています。
現在の多くのアプリケーションは並列処理向けに設計されており、パフォーマンスの改善に複数のスレッドもしくはプロセスを使用します。しかし、8 スレッド以上を効果的に使えるアプリケーションはほとんどありません。つまり、複数アプリケーションの能力を最大限活用するには、通常は 32-CPU システムにインストールする必要があります。
以下のの状況を考えてください。小規模で安価なメインストリームシステムが、今では一昔前の高価で高パフォーマンスだったマシンのパフォーマンスと変わりありません。安価でより高パフォーマンスのマシンがあることで、システムアーキテクトはより少数のマシンにより多くのサービスを統合できるようになっています。
しかし、(I/O やネットワーク通信といった) リソースは共有されており、CPU 数のようにはすぐに増えません。このため、複数アプリケーションを格納しているシステムは、1 つのアプリケーションがあるリソースを独占しすぎると、全体のパフォーマンスが低下することになります。
この問題に対処するため、Red Hat Enterprise Linux 6 は コントロールグループ (cgroups) をサポートします。Cgroups により、管理者は必要に応じてリソースを特定のタスクに割り当てることができます。例えば、4 つの CPU の 80% と60GB のメモリ、ディスク I/O の 40% をデータベースアプリケーションに割り当て、同一システ上で稼働している Web アプリケーションには、2 つの CPU と 2GB のメモリ、利用可能なネットワーク帯域幅の 50% を割り当てる、ということができます。
その結果、データベースアプリケーションと Web アプリケーションの両方が過剰にシステムリソースを消費することがなく、両方がすぐれたパフォーマンスを実現できるようになります。加えて、cgroups の多くの側面が 自己チューニング なので、システムはワークロードの変化に応じで対応できます。
Cgroup には以下の 2 つの主要コンポーネントがあります。
  • Cgroup に割り当てられたタスクのリスト
  • これらのタスクに割り当てられたリソース
Cgroup に割り当てられたタスクは、cgroup 内で 実行されます。そのタスクからの子タスクも、cgroup 内で実行されます。これにより、管理者はアプリケーション全体を単一ユニットとして管理できます。管理者はまた、以下のリソース配分も設定することができます。
  • CPUsets
  • メモリ
  • I/O
  • ネットワーク (帯域幅)
CPUsets 内では、cgroups は管理者による CPU 数や特定 CPU もしくはノード用のアフィニティ [3]、タスクセットが使用する CPU の時間の設定を可能にします。Cgroups を使った CPUsets の設定は、全体的なパフォーマンス向上を確保するために必須のものです。また、アプリケーションが CPU 時間不足に陥らない一方で、他のタスクを犠牲にしてあるアプリケーションがリソースを過剰に消費しないようにするためにも必須のものです。
I/O 帯域幅とネットワーク帯域幅は、他のリソースコントローラーが管理します。リソースコントローラーを使うことで、cgroup 内のタスクが消費する帯域幅を決定でき、cgroup 内のタスクがリソースを過剰消費したり、逆にリソース不足にならないようにします。
Cgroups を使うと、管理者は高レベルで様々なアプリケーションが必要とし消費するシステムリソースを定義・配分することができます。するとシステムは自動的にこれらのアプリケーションを管理してバランスを取り、すぐれた予測可能なパフォーマンスを実現し、システム全体のパフォーマンスを最適化します。
コントロールグループの使用に関する詳細情報は、『リソース管理ガイド』 を参照してください。これは http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/ から入手できます。


[3] ノードは通常、ソケット内の CPU もしくは コアのセットと定義されます。