编程接口指南

初始化地址组接口

应用程序必须调用 lgrp_init(3LGRP),才能使用 API 遍历 lgroup 分层结构并搜索 lgroup 分层结构的内容。调用 lgrp_init() 可为应用程序提供 lgroup 分层结构的一致快照。应用程序开发者可以指定快照仅包含专供调用线程使用的资源,或包含一般情况下操作系统均可使用的资源。lgrp_init() 函数返回一个 cookie,此 cookie 用于执行以下任务:

使用 lgrp_init()

lgrp_init() 函数初始化 lgroup 接口并获取 lgroup 分层结构的快照。

#include <sys/lgrp_user.h>

lgrp_cookie_t lgrp_init(lgrp_view_t view);

如果 lgrp_init() 函数是使用 LGRP_VIEW_CALLER 作为视图进行调用的,则此函数返回的快照仅包含可供调用线程使用的资源。如果 lgrp_init() 函数是使用 LGRP_VIEW_OS 作为视图进行调用的,则此函数返回的快照将包含可供操作系统使用的资源。如果线程成功调用 lgrp_init() 函数,则此函数将返回一个 cookie,与 lgroup 分层结构进行交互的任何函数均使用此 cookie。当线程不再需要此 cookie 时,将使用此 cookie 作为参数来调用 lgrp_fini() 函数。

lgroup 分层结构包括一个根 lgroup,其中包含计算机的所有 CPU 和内存资源。根 lgroup 可以包含其他由更小延迟限定的地址组。

lgrp_init() 函数可以返回两个错误。如果视图无效,则此函数将返回 EINVAL。如果没有足够的内存用于分配 lgroup 分层结构的快照,则此函数将返回 ENOMEM

使用 lgrp_fini()

lgrp_fini(3LGRP) 函数终止给定 cookie 的使用,并释放相应的 lgroup 分层结构快照。

#include <sys/lgrp_user.h>

int lgrp_fini(lgrp_cookie_t cookie);

lgrp_fini() 函数使用表示由先前的 lgrp_init() 调用创建的 lgroup 分层结构快照的 cookie。lgrp_fini() 函数释放分配给此快照的内存。调用 lgrp_fini() 之后,此 cookie 即失效。请不要再使用此 cookie。

如果传递给 lgrp_fini() 函数的 cookie 无效,则 lgrp_fini() 将返回 EINVAL