第4章 リソース管理

cgroups CPU 上限の強制設定

Linux カーネルの CFS (Completely Fair Scheduler) は、プロポーショナルシェアスケジューラです。タスクの優先度/ウェイトやタスクグループに割り当てられたシェアに応じ、タスクグループ間で CPU 時間を比例して配分します。システムに利用可能なアイドル CPU サイクルが十分にある場合は、CFS では、スケジューラが持つ仕事量保存型の性質によりタスクグループは CPU のシェア以上を得ることができます。

ただし、以下のように、希望より大きな CPU シェアをタスクグループに与えることが許可されていないエンタープライズシナリオがあります。
従量課金
複数のカスタマーを対象にするエンタープライズシステムでは、クラウドサービスプロバイダーは、サービスレベルに基づき決まった CPU 時間を仮想ゲストに割り当てる必要があります。
サービスレベルの保証
カスタマーは、それぞれの仮想ゲストに対してサービスの中断なく CPU リソースの割合を保持することを希望します。
こうした状況では、タスクグループの CPU リソース消費が事前設定した制限を越える場合には、スケジューラはそれにハードストップを実行する必要があります。これは通常、タスクグループが割り振られた CPU 時間を完全に消費した場合に、タスクグループを調整することで可能になります。
上記に記載したユースケースのとおり、cgroups CPU の上限を強制設定する機能は、Red Hat Enterprise Linux に追加された非常に重要な機能です。これは、Xen の Credit Scheduler、VMware ESX スケジューラでも提供されています。
SMP システムにおける cgroups CPU コントローラーのスケーラビリティ向上

Red Hat Enterprise Linux 6 では、追加設定なく cgroups を有効にして、libvirt はゲストモデルごとに cgroups を作成していました。大規模な SMP システムでは、cgroups の数が増えるとパフォーマンスは低下していました。しかし、Red Hat Enterprise Linux 6.2 では、cgroups CPU のスケーラビリティが大幅に向上し、パフォーマンスに影響を与えることなく一度に数百もの cgroups を作成、実行することができます。

スケーラビリティの向上に加えて、/proc 調整可能なパラメーターである dd sysctl_sched_shares_window が追加されました。デフォルトは 10 秒に設定されています。
cgroups I/O コントローラーのパフォーマンス改善

cgroups I/O コントローラーの設計は、I/O コントローラー内のロック使用を減らすよう改善されたため、パフォーマンスも向上しました。また、I/O コントローラーは cgroup の統計ごとにサポートするようになりました。

cgroups メモリーコントローラーのパフォーマンス強化

Red Hat Enterprise Linux 6.2 では、page_cgroup アレイに対して割り振られたオーバーヘッドを 37% 減らすことで、メモリーコントローラーにおけるメモリー使用のオーバーヘッドを改善しました。また、直接の page_cgroup-to-page ポインターが削除されたため、メモリーコントローラーのパフォーマンスが向上しました。

CFQ group_isolation 変数のデフォルト値

CFQ の group_isolation 変数のデフォルトは、0 から 1 (/sys/block/<device>/queue/iosched/group_isoaltion) に変更されました。多くのユーザーからの報告や様々なテストの実施後、デフォルト 1 がより役立つことが分かりました。0 に設定すると、すべてのランダム I/O キューは、アプリケーションが一部である実際の cgroup ではなく root cgroup の一部となります。そのため、アプリケーションにとってサービスの違いはありません。

注記

リソース管理と制御グループの詳細については、Red Hat Enterprise Linux 6.2 リソース管理ガイド を参照してください。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。