JavaScript is required to for searching.
跳过导航链接
退出打印视图
编程接口指南     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  内存和 CPU 管理

2.  用于 Solaris Cluster 的远程共享内存 API

3.  会话描述协议 API

4.  进程调度程序

5.  地址组 API

地址组概述

验证接口版本

初始化地址组接口

使用 lgrp_init()

使用 lgrp_fini()

地址组分层结构

使用 lgrp_cookie_stale()

使用 lgrp_view()

使用 lgrp_nlgrps()

使用 lgrp_root()

使用 lgrp_parents()

使用 lgrp_children()

地址组内容

使用 lgrp_resources()

使用 lgrp_cpus()

使用 lgrp_mem_size()

地址组特征

使用 lgrp_latency_cookie()

地址组及线程和内存位置

使用 lgrp_home()

使用 madvise()

使用 madv.so.1

madv.so.1 用法示例

使用 meminfo()

地址组关联

使用 lgrp_affinity_get()

使用 lgrp_affinity_set()

API 用法示例

6.  输入/输出接口

7.  进程间通信

8.  套接字接口

9.  使用 XTI 和 TLI 编程

10.  包过滤钩子

11.  传输选择和名称到地址映射

12.  实时编程和管理

13.  Solaris ABI 和 ABI 工具

A.  UNIX 域套接字

索引

地址组概述

共享内存多处理器计算机包含多个 CPU。每个 CPU 均可访问计算机中的所有内存。在某些共享内存多处理器中,内存体系结构使每个 CPU 访问某些内存区域的速度快于访问其他区域的速度。

当具有此类内存体系结构的计算机运行 Solaris 软件时,将有关给定 CPU 与给定内存区域之间最短访问时间的信息提供给内核可以提高系统性能。地址组 (lgroup) 抽象概念就是为处理这些信息而引入的。lgroup 抽象概念是内存位置优化 (Memory Placement Optimization, MPO) 功能的一部分。

lgroup 是指包含 CPU 类和内存类设备的集合,此集合中的每个 CPU 均可在限定的延迟间隔内访问此集合中的任何内存。延迟间隔的值表示此 lgroup 中所有 CPU 与所有内存之间的最低公用延迟。定义 lgroup 的延迟界限并未限制此 lgroup 的成员之间的最大延迟。延迟界限的值是适用于此组中所有可能的 CPU-内存对的最小延迟。

lgroup 具有分层结构。lgroup 分层结构是一个有向无环图 (Directed Acyclic Graph, DAG),与树类似,只不过一个 lgroup 可能具有多个父级。根 lgroup 包含系统中的所有资源,并且可以包含子 lgroup。此外,根 lgroup 还有一个特点,即它的延迟值是系统内所有 lgroup 中的最大值。所有子 lgroup 的延迟值均小于根 lgroup 的延迟值。越接近根的 lgroup 的延迟值越大,越接近叶的 lgroup 的延迟值越小。

如果一台计算机中的所有 CPU 访问所有内存所需的时间相同,则可以使用一个 lgroup 表示此计算机(请参见图 5-1)。如果一台计算机中的某些 CPU 访问某些内存区域所需的时间短于访问其他内存区域所需的时间,则可以使用多个 lgroup 表示此计算机(请参见图 5-2)。

图 5-1 单地址组示意图

image:计算机中的所有 CPU 均可在相差无几的时间段内访问内存。

图 5-2 多地址组示意图

image:计算机的 CPU 和内存资源按限定的延迟间隔进行分组。

lgroup 分层结构的组织简化了在系统中查找最近资源的任务。创建每个线程时即为其指定了一个主 lgroup。缺省情况下,操作系统将尝试从线程的主 lgroup 为线程分配资源。例如,缺省情况下,Solaris 内核将尝试安排线程在其主 lgroup 中的 CPU 上运行,并从其主 lgroup 中分配此线程的内存。如果线程的主 lgroup 中没有所需的资源,则内核可以遍历 lgroup 分层结构,从主 lgroup 的父级中查找下一个最近的资源。如果主 lgroup 的父级中没有所需的资源,则内核将继续遍历 lgroup 分层结构,在主 lgroup 的上一级祖先 lgroup 中进行查找。根 lgroup 是计算机中所有其他 lgroup 的最后一级祖先,它包含计算机中的所有资源。

lgroup API 针对应用程序引入了 lgroup 抽象概念,以便进行观察和性能调优。新 API 包含在名为 liblgrp 的新库中。应用程序可以使用 API 执行以下任务: