プログラミングインタフェース

近傍性グループの概要

メモリー共有型マルチプロセッサマシンには、複数の CPU が搭載されています。それぞれの CPU は、そのマシンのすべてのメモリーにアクセスできます。メモリー共有型マルチプロセッサには、CPU ごとに特定のメモリー領域に対して、より高速なアクセスを可能にするメモリーアーキテクチャーを採用しているものがあります。

そのようなメモリーアーキテクチャーのマシンで Solaris ソフトウェアを実行した場合、特定の CPU による特定のメモリー領域への最短アクセス時間に関するカーネル情報が提供されると、システムのパフォーマンスを向上させることができます。この情報を処理するために近傍性グループ (lgroup) による抽象化が導入されています。lgroup による抽象化は、メモリー配置の最適化 (MPO) 機能の一部です。

lgroup は CPU およびメモリーを模したデバイスの集合です。それぞれの集合内のデバイスは、決められた応答時間の間隔範囲で集合内の任意のデバイスにアクセスできます。応答時間間隔の値は、その lgroup 内のすべての CPU とすべてのメモリー間の最小の共通応答時間を表します。lgroup を定義する応答時間範囲は、その lgroup のメンバー間の最大応答時間を制限しません。応答時間範囲の値は、そのグループ内の CPU とメモリーのあらゆる組み合わせに共通する最小の応答時間です。

lgroup は階層構造になっています。lgroup 階層は、Directed Acyclic Graph (DAG) です。ツリー構造と似ていますが、lgroup は複数の親を持つことができます。ルート lgroup にはシステムのすべての資源が含まれており、子 lgroup を持つことができます。さらに、ルート lgroup にはシステムでもっとも高い応答時間値を持たせることができます。すべての子 lgroup の応答時間値は、ルートよりも低くなります。応答時間値はルートに近いほど高く、葉に近いほど低くなります。

すべての CPU がどのメモリー領域に対しても同じ時間でアクセスするコンピュータは、単一の lgroup として表すことができます (図 5–1 参照)。特定の CPU が特定の領域に対してほかの領域より高速なアクセスが可能となるコンピュータは、複数の lgroup を使用して表すことができます (図 5–2 参照)。

図 5–1 単一近傍性グループの模式図

すべての CPU が同じ時間枠を使ってメモリーにアクセス

図 5–2 複数近傍性グループの模式図

マシン上のすべての CPU とメモリー資源は制限された応答時間範囲によってグループ化されます。

組織化された lgroup 階層の導入によって、システムでもっとも近い資源を検索するタスクを簡略化します。各スレッドは、作成時にホーム lgroup に割り当てられます。オペレーティングシステムは、スレッドにホーム lgroup から資源を割り当てようとデフォルトで試みます。たとえば、Solaris カーネルが、あるスレッドのホーム lgroup にある CPU 上でそのスレッドを実行し、デフォルトでスレッドのホーム lgroup にそのスレッドのメモリーを割り当てるスケジュールを設定しようと試みます。必要な資源がスレッドのホーム lgroup で利用可能ではない場合には、ホーム lgroup の親から順番に lgroup 階層を探索し、次に近い位置にある資源を検索します。必要な資源がホーム lgroup の親で利用可能でない場合には、カーネルは引き続き lgroup 階層を探索し、そのホーム lgroup のさらに上位ノードの lgroup を順番に探索します。マシン内のすべての lgroup の最上位ノードに位置するのがルート lgroup で、これにはそのマシンのすべての資源が含まれます。

lgroup API は、監視と性能チューニングを目的とするアプリケーションのために lgroup の抽象化をエクスポートします。新しい API は、新規ライブラリ liblgrp に含まれています。アプリケーションは API を使用して、次の作業を実行できます。