第4章 リソース管理
Linux カーネルの CFS (Completely Fair Scheduler) は、プロポーショナルシェアスケジューラです。タスクの優先度/ウェイトやタスクグループに割り当てられたシェアに応じ、タスクグループ間で CPU 時間を比例して配分します。システムに利用可能なアイドル CPU サイクルが十分にある場合は、CFS では、スケジューラが持つ仕事量保存型の性質によりタスクグループは CPU のシェア以上を得ることができます。
- 従量課金
- 複数のカスタマーを対象にするエンタープライズシステムでは、クラウドサービスプロバイダーは、サービスレベルに基づき決まった CPU 時間を仮想ゲストに割り当てる必要があります。
- サービスレベルの保証
- カスタマーは、それぞれの仮想ゲストに対してサービスの中断なく 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 コントローラーの設計は、I/O コントローラー内のロック使用を減らすよう改善されたため、パフォーマンスも向上しました。また、I/O コントローラーは cgroup の統計ごとにサポートするようになりました。
Red Hat Enterprise Linux 6.2 では、page_cgroup
アレイに対して割り振られたオーバーヘッドを 37% 減らすことで、メモリーコントローラーにおけるメモリー使用のオーバーヘッドを改善しました。また、直接の page_cgroup-to-page
ポインターが削除されたため、メモリーコントローラーのパフォーマンスが向上しました。
CFQ の group_isolation
変数のデフォルトは、0
から 1
(/sys/block/<device>/queue/iosched/group_isoaltion
) に変更されました。多くのユーザーからの報告や様々なテストの実施後、デフォルト 1
がより役立つことが分かりました。0
に設定すると、すべてのランダム I/O キューは、アプリケーションが一部である実際の cgroup ではなく root cgroup の一部となります。そのため、アプリケーションにとってサービスの違いはありません。
注記