Solaris 10 资源管理器开发者指南

第 1 章 Solaris 操作系统中的资源管理

本手册旨在帮助开发者编写以下两种应用程序:管理计算机资源的实用程序,以及能够检查自身使用情况并根据情况进行相应调整的自行监视应用程序。本章提供了有关 Solaris 操作系统 (Operating System, OS) 中的资源管理的说明。本章包括以下主题:

了解 Solaris OS 中的资源管理

资源管理的主要作用是平衡服务器上的工作负荷,以使系统可以高效地工作。如果没有很好地管理资源,超越工作负荷就会出现故障而使进度停止,导致优先级作业发生不必要的延迟。另一个作用是有效的资源管理使组织可以通过整合服务器有效地利用资源。为了能够进行资源管理,Solaris OS 提供了一种可以组织工作负荷和资源的结构,而且在确定某个特定的工作负荷单元可占用的资源数量时可以进行控制。有关从系统管理员角度对资源管理的深入讨论,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 1  章 “Solaris 10 Resource Manager 介绍”

工作负荷组织

工作负荷的基本单位是进程。进程 ID (Process ID, PID) 在整个系统中按顺序进行编号。缺省情况下,系统管理员会将每个用户都分配到项目(即网络范围的管理标识符)中。每次成功登录项目后,都会创建一个新的任务(即进程的分组机制)。任务包含登录进程以及后续的子进程。

有关项目和任务的更多信息,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 2  章 “项目和任务(概述)”(针对系统管理员角度)或本书中的第 2 章,项目和任务(针对开发者角度)。

可以有选择性地将项目分组到区域 (zone)中,区域是由管理员出于安全考虑设置的,目的是隔离各组用户。可以将区域看作一个盒子,其中一个或多个应用程序与系统中的所有其他应用程序相互隔离,独立运行。《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 II 部分, “Zones”详细的讨论了 Solaris Zones。有关编写在区域中运行的资源管理应用程序时需要了解的特别注意事项的更多信息,请参见第 7 章,有关 Solaris Zones 中资源管理应用程序的设计注意事项

资源组织

系统管理员可以将工作负荷分配给系统中的特定 CPU 或定义的多组 CPU。可以将 CPU 分组到处理器集(也称为 pset)中。而 pset 又可以与一个或多个线程调度类(定义 CPU 优先级)联结,最终形成资源池。资源池为系统管理员提供了一种使用户可以使用系统资源的便捷机制。《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 12  章 “动态资源池(概述)”为系统管理员介绍了资源池。第 6 章,动态资源池介绍了编程注意事项。

下图说明了 Solaris OS 中的工作负荷和计算机资源的组织方式。

图 1–1 Solaris 操作系统中的工作负荷和资源组织

图中提供了如何在系统中组织工作负荷和资源的示例。

资源控制

对于管理用户所占用的资源量而言,只将工作负荷单位分配给资源单位是不够的。为了管理资源,Solaris OS 提供了一组标志、操作和信号,它们统称为资源控制并存储在 /etc/project 文件中。例如,公平共享调度程序 (Fair Share Scheduler, FSS) 可以根据工作负荷的指定重要因素在工作负荷中分配 CPU 资源的份额。使用这些资源控制,系统管理员可以设置权限级别并限制对特定项目、任务或进程的定义。要了解系统管理员如何使用资源控制,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 6  章 “资源控制(概述)”。有关编程注意事项,请参见第 5 章,资源控制

扩展记帐功能

除了工作负荷和资源组织以外,Solaris OS 还提供了用于监视和记录系统资源使用情况的扩展记帐功能。扩展记帐功能为系统管理员提供了一组有关进程和任务的详细资源占用统计信息。

《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 4  章 “扩展记帐(概述)”为系统管理员深入介绍了此功能。Solaris OS 为开发者提供了用于访问扩展记帐功能的 C 接口和 PERL 接口。有关 C 接口,请参阅第 3 章,使用用于扩展记帐的 C 接口,有关 PERL 接口,请参阅第 4 章,使用用于扩展记帐的 Perl 接口

编写资源管理应用程序

本手册着重从开发者角度介绍资源管理,并提供用于编写以下各种应用程序的信息: