今日のコンピューティング環境では、システム上で実行されるアプリケーションによって生成されるさまざまな作業負荷に柔軟に対応できる能力が求められます。「作業負荷」とは、1 つのアプリケーションまたは一連のアプリケーションが持つすべてのプロセスの集まりです。リソース管理機能を使用しない場合、Oracle Solaris オペレーティングシステムは、新しいアプリケーションの要求に動的に適応することによって作業負荷の要求に対応しています。このデフォルトの動作は、通常、システムのすべてのアクティビティーに対してリソースへのアクセスを同等に与えることを意味します。リソース管理機能を使用すると、作業負荷を個別に扱うことができるようになります。次のような制御が可能になります。
特定のリソースへのアクセスを制限します
優先順位に基づいて作業負荷にリソースを提供します
作業負荷を互いに分離します
作業負荷が相互に影響し合うことによる性能の低下を最小限に抑える機能と、リソースの使用状況や使用効率をモニターする機能を総称してリソース管理機能といいます。リソース管理機能は、いくつかのアルゴリズムの集合として実装されます。これらのアルゴリズムは、アプリケーションがその実行過程で発行する一連のリソース要求を処理します。
リソース管理機能を使用すると、さまざまな作業負荷に対してオペレーティングシステムのデフォルトの動作を変更できます。この場合の「動作」とは、主に、アプリケーションが 1 つ以上のリソース要求をシステムに発行したときに、オペレーティングシステムのアルゴリズムが行う一連の決定処理のことです。リソース管理機能は、次の目的で使用できます。
あるアプリケーションに対して、リソースの割り当てを拒否したり、ほかのアプリケーションに許可されているよりも大きい割り当てを与えたりします
特定の割り当てを個別にではなく一括して行います
リソース管理機能を使用できるようにシステムを構成すると、いくつかの目的が達成できます。次のような制御が可能になります。
アプリケーションが際限なくリソースを浪費するのを防止します
外部イベントに基づいてアプリケーションの優先順位を変更します
一連のアプリケーションにリソースの使用を保証する一方で、システムの使用効率を最大限に高めます
リソース管理機能をシステム構成に組み込むときは、次のような作業が事前に必要です。
システム上で競合する作業負荷の特定
競合しない作業負荷と、主要な作業負荷に影響を与えるような性能要件を伴った作業負荷との区別
競合しない作業負荷と競合する作業負荷を特定したら、システムの能力が許す範囲内で、業務サービスへの影響を最小限に抑えたリソース構成を構築できます。
効率のよいリソース管理を実現するために、Oracle Solaris システムには制御メカニズム、通知メカニズム、およびモニタリングメカニズムが用意されています。これらの機能の多くは、proc(4) ファイルシステム、プロセッサセット、スケジューリングクラスなどの既存メカニズムの拡張機能として提供されます。その他の機能はリソース管理に固有です。これらの機能については、以降の章で説明します。
リソースは、アプリケーションの動作を変更する目的で操作されるコンピューティングシステムのあらゆる側面を意味します。つまり、リソースは、アプリケーションが暗黙的または明示的に要求する機能です。この機能が拒否または制限された場合は、堅固に作成されているアプリケーションの実行速度が低下します。
リソースの分類は、リソースの識別とは対照的に、多くの基準に基づいて行うことができます。たとえば、リソースは、暗黙的な要求か明示的な要求か、時間 (CPU 時間など) に基づいた要求か時間に無関係な要求 (割り当てられた CPU 配分など) か、などを基準に行うことができます。
通常、スケジューラに基づいたリソース管理は、アプリケーションが暗黙的に要求するリソースに適用されます。たとえば、実行を継続するときは、アプリケーションは暗黙的に追加の CPU 時間を要求します。ネットワークソケットにデータを書き込むときは、アプリケーションは暗黙的に帯域幅を要求します。暗黙的に要求されるリソースの総使用量に対して制約を設けることができます。
帯域幅または CPU サービスのレベルを明示的に折衝できるように、インタフェースを追加することもできます。追加スレッドの要求のように明示的に要求されるリソースは、制約によって管理できます。
Oracle Solaris オペレーティングシステムでは、制約、スケジューリング、および区分という 3 種類の制御メカニズムを使用できます。
制約を使用すると、管理者やアプリケーション開発者は、作業負荷が使用する特定のリソースの消費にいくつかの制限を設定できます。制限を設定すると、リソースの消費シナリオを簡単にモデル化できます。また、制限を設定することにより、無秩序にリソースを要求してシステムの性能や可用性に悪影響を及ぼす可能性がある悪質なアプリケーションを制御できます。
制約は、アプリケーションに制限を課します。アプリケーションとシステムの関係は、アプリケーションが動作できないところまで悪化してしまう可能性があります。そのような事態を回避する方法の 1 つは、リソースに関する動作が不明なアプリケーションに対する制約を徐々に強めていくことです。リソース制御についてで説明するリソース制御が、制約メカニズムを提供します。新たに作成するアプリケーションであれば、リソースの制約をアプリケーションが認識するようにすることもできます。ただし、すべての開発者がこの機能を使用するとは限りません。
スケジューリングとは、一定の間隔で割り当てを決定することです。この決定は、予測可能なアルゴリズムに基づいて行われます。現在割り当てられているリソースを必要としないアプリケーションは、ほかのアプリケーションが使用できるように、そのリソースを解放します。スケジューリングに基づいてリソース管理を行うと、リソースに余裕がある構成の場合は使用効率を最大限にできると同時に、リソースが限界まで、あるいは過剰に使用されている場合には、割り当てを制御できます。スケジューリングのアルゴリズムにより、「制御」という用語の意味が決まります。場合によっては、スケジューリングアルゴリズムは、すべてのアプリケーションがリソースにある程度アクセスできることを保証します。公平配分スケジューラについてで説明する公平配分スケジューラ (FSS) は、アプリケーションが制御された方法で CPU リソースにアクセスするように管理します。
区分は、作業負荷をシステム上で使用可能なリソースの一部に結合 (バインド) するために使用されます。リソースと結合することにより、作業負荷は常に一定量のリソースを使用できることが保証されます。リソースプールについてで説明するリソースプール機能を使用すれば、作業負荷をシステムの特定の部分に制限できます。
区分を使用する構成では、システム全体が過剰使用されるのを防ぐことができます。ただし、この方法では、高い使用効率の達成は難しくなります。プロセッサなど、予約済みのリソースに結合されている作業負荷がアイドル状態になっている場合でも、別の作業負荷がそのリソースを使用することはできないためです。
リソース管理構成の一部をネットワークのネームサービスに置くことができます。この機能により、管理者は、リソース管理制約をシステムごとに排他的に適用するのではなく、システムの集合に対して一括して適用できます。関連する作業は共通識別子を共有でき、その作業の使用状況はアカウンティングデータに基づいて表形式で表すことができます。
リソース管理構成と作業負荷識別子の詳細については、プロジェクトとタスクについてに記載されています。これらの識別子をアプリケーションのリソース使用状況と結び付ける拡張アカウンティング機能は、拡張アカウンティングについてに記載されています。
リソース管理機能をゾーンと組み合わせて使用すると、アプリケーション環境をさらに細かく調整できます。リソース管理機能とゾーンの相互動作については、このガイドの該当セクションで説明します。