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

近傍性グループ階層

この節で説明する API を使用することにより、呼び出しスレッドから lgroup 階層を参照できます。lgroup 階層は、Directed Acyclic Graph (DAG) です。ツリー構造と似ていますが、ノードは複数の親を持つことができます。ルート lgroup はマシン全体を表し、ルート lgroup にはそのマシンのすべての資源が含まれます。ルート lgroup はシステム全体でもっとも高い応答時間値を持っています。それぞれの子 lgroup はルート lgroup にあるハードウェアのサブセットで構成されています。それぞれの子 lgroup の応答時間値はより低く制限されています。ルートに近い近傍性グループほど、多くの資源と高い応答時間が与えられています。葉に近い近傍性グループは、資源も少なく、応答時間も低くなります。lgroup には、その応答時間の範囲内で直下に資源が含まれる場合があります。また、lgroup に葉 lgroup が含まれ、その葉 lgroup に自身の資源セットが含まれる場合もあります。葉 lgroup の資源は、その葉 lgroup をカプセル化する lgroup から利用可能です。

lgrp_cookie_stale() の使用法

lgrp_cookie_stale(3LGRP) 関数は、指定の cookie で表された lgroup 階層のスナップショットが最新のものであるかどうかを判定します。

#include <sys/lgrp_user.h>
int lgrp_cookie_stale(lgrp_cookie_t cookie);

lgrp_init() 関数が返す cookie は、そのスナップショットを取得した view 引数の種類によって、さまざまな理由により無効になる場合があります。view 引数に LGRP_VIEW_OS を指定して呼び出した lgrp_init() 関数が返す cookie では、動的再構成や CPU のオンライン状態の変化などが原因で lgroup 階層に変更があったときに、無効になる場合があります。view 引数に LGRP_VIEW_CALLER を指定した lgrp_init() 関数が返す cookie では、呼び出しスレッドのプロセッサセットの変更または lgroup 階層の変化が原因で、無効になる場合があります。無効になった cookie は、その cookie で lgrp_fini() 関数を呼び出し、次に新規 cookie を生成する lgrp_init() 関数を呼び出すことによって新しくなります。

無効な cookie を指定した場合、lgrp_cookie_stale() 関数は EINVAL を返します。

lgrp_view() の使用法

lgrp_view(3LGRP) 関数は、指定した lgroup 階層のスナップショットがどのビューで取得されたかを判別します。

#include <sys/lgrp_user.h>
lgrp_view_t lgrp_view(lgrp_cookie_t cookie);

lgrp_view() 関数は、lgroup 階層のスナップショットを表す cookie を引数に使用し、そのスナップショットの view を返します。LGRP_VIEW_CALLER を view に指定して取得したスナップショットには、呼び出しスレッドで使用可能な資源のみが含まれます。LGRP_VIEW_OS で取得したスナップショットには、オペレーティングシステムで使用可能なすべての資源が含まれます。

無効な cookie を指定した場合、lgrp_view() 関数は EINVAL を返します。

lgrp_nlgrps() の使用法

lgrp_nlgrps(3LGRP) 関数は、システムに存在する近傍性グループの数を返します。近傍性グループが 1 つしかないシステムでは、メモリー配置の最適化による効果はありません。

#include <sys/lgrp_user.h>
int lgrp_nlgrps(lgrp_cookie_t cookie);

lgrp_nlgrps() 関数は、lgroup 階層のスナップショットを表す cookie を引数に使用し、階層で使用可能な lgroup の数を返します。

無効な cookie を指定した場合、lgrp_nlgrps() 関数は EINVAL を返します。

lgrp_root() の使用法

lgrp_root(3LGRP) 関数は、ルート lgroup ID を返します。

#include <sys/lgrp_user.h>
lgrp_id_t lgrp_root(lgrp_cookie_t cookie);

lgrp_root() 関数は、lgroup 階層のスナップショットを表す cookie を引数に使用し、ルート lgroup ID を返します。

lgrp_parents() の使用法

lgrp_parents(3LGRP) 関数は、lgroup 階層のスナップショットを表す cookie を引数に使用し、指定した lgroup の親 lgroups の数を返します。

#include <sys/lgrp_user.h>
int lgrp_parents(lgrp_cookie_t cookie, lgrp_id_t child,
                 lgrp_id_t *lgrp_array, uint_t lgrp_array_size);

lgrp_arrayNULL ではなく、lgrp_array_size の値がゼロでないとき、lgrp_parents() 関数は、配列の要素数の上限まで、またはすべての親 lgroup ID を配列に入れて返します。ルート lgroup には親はありません。ルート lgroup に対して lgrp_parents() 関数が呼び出された場合は、lgrp_array には何も返されません。

無効な cookie を指定した場合、lgrp_parents() 関数は EINVAL を返します。指定した lgroup ID が存在しない場合は、lgrp_parents() 関数は ESRCH を返します。

lgrp_children() の使用法

lgrp_children(3LGRP) 関数は、呼び出しスレッドの lgroup 階層のスナップショットを表す cookie を引数に使用し、指定した lgroup の子 lgroup の数を返します。

#include <sys/lgrp_user.h>
int lgrp_children(lgrp_cookie_t cookie, lgrp_id_t parent,
                  lgrp_id_t *lgrp_array, uint_t lgrp_array_size);

lgrp_arrayNULL ではなく、lgrp_array_size の値がゼロでないとき、lgrp_children() 関数は、要素数の上限まで子 lgroup ID を配列に入れるか、またはすべての子 lgroup ID を配列に入れて返します。

無効な cookie を指定した場合、lgrp_children() 関数は EINVAL を返します。指定した lgroup ID が存在しない場合は、lgrp_children() 関数は ESRCH を返します。