使用本节介绍的 API,调用线程可以导航 lgroup 分层结构。lgroup 分层结构是一种类似于树结构的有向无环图,只不过一个节点可能具有多个父级。根 lgroup 表示整个计算机,其中包含此计算机的所有资源。根 lgroup 是系统中具有最大延迟值的 lgroup。每个子 lgroup 均包含根 lgroup 中的硬件子集,并且由一个较小的延迟值限定。越接近根的地址组具有的资源越多,延迟也越大。越接近叶的地址组具有的资源越少,延迟也越小。lgroup 可以包含直接位于其延迟界限内的资源,还可以包含具有其自己的资源集合的叶 lgroup。叶 lgroup 的资源可供封装这些叶 lgroup 的 lgroup 使用。
lgrp_cookie_stale(3LGRP) 函数可确定由给定 cookie 表示的 lgroup 分层结构的快照是否为最新。
#include <sys/lgrp_user.h> int lgrp_cookie_stale(lgrp_cookie_t cookie);
lgrp_init() 函数返回的 cookie 可能会因多种原因而过时,具体取决于快照所表示的视图。当视图设置为 LGRP_VIEW_OS 时,调用 lgrp_init() 函数所返回的 cookie 可能会过时,原因包括 lgroup 分层结构的更改(如动态重新配置)或CPU 联机状态的更改。当视图设置为 LGRP_VIEW_CALLER 时,调用 lgrp_init () 函数所返回的 cookie 可能会过时,原因是调用线程处理器集的更改或 lgroup 分层结构的更改。要刷新过时的 cookie,可以使用旧 cookie 调用 lgrp_fini() 函数,然后调用 lgrp_init() 函数生成一个新 cookie。
如果给定的 cookie 无效,则 lgrp_cookie_stale() 函数将返回 EINVAL。
lgrp_view(3LGRP) 函数可确定用于获取给定 lgroup 分层结构快照的视图。
#include <sys/lgrp_user.h> lgrp_view_t lgrp_view(lgrp_cookie_t cookie);
lgrp_view() 函数使用表示 lgroup 分层结构快照的 cookie,并返回该 lgroup 分层结构的快照视图。使用视图 LGRP_VIEW_CALLER 获取的快照仅包含可供调用线程使用的资源。使用视图 LGRP_VIEW_OS 获取的快照包含可供操作系统使用的所有资源。
如果给定的 cookie 无效,则 lgrp_view() 函数将返回 EINVAL。
lgrp_nlgrps(3LGRP) 函数返回系统中的地址组数。如果系统中只有一个地址组,则内存位置优化没有任何效果。
#include <sys/lgrp_user.h> int lgrp_nlgrps(lgrp_cookie_t cookie);
lgrp_nlgrps() 函数使用表示 lgroup 分层结构快照的 cookie,并返回此分层结构中的可用 lgroup 数。
如果此 cookie 无效,则 lgrp_nlgrps() 函数将返回 EINVAL。
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(3LGRP) 函数使用表示 lgroup 分层结构快照的 cookie,并返回指定 lgroup 的父 lgroup 数。
#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_array 不为 NULL,并且 lgrp_array_size 的值不为零,则 lgrp_parents () 函数将使用父 lgroup ID 填充数组,直到填满数组或者所有父 lgroup ID 均在数组中为止。根 lgroup 没有父级。如果针对根 lgroup 调用 lgrp_parents() 函数,则不会填充 lgrp_array。
如果此 cookie 无效,则 lgrp_parents() 函数将返回 EINVAL。如果找不到指定的 lgroup ID,则 lgrp_parents() 函数将返回 ESRCH。
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_array 不为 NULL,并且 lgrp_array_size 的值不为零,则 lgrp_children () 函数将使用子 lgroup ID 填充数组,直到填满数组或者所有子 lgroup ID 均在数组中为止。
如果此 cookie 无效,则 lgrp_children() 函数将返回 EINVAL。如果找不到指定的 lgroup ID,则 lgrp_children() 函数将返回 ESRCH。