系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones

第 1 章 Solaris 10 资源管理介绍

资源管理功能是 Solaris Container 环境的一个组件。使用资源管理,您可以控制应用程序如何使用可用系统资源。其中包括:

本章包含以下主题:

资源管理概述

现代计算环境必须针对系统上不同应用程序产生的不同的工作负荷做出灵活的响应。工作负荷是一个或一组应用程序的所有进程的集合。如果没有使用资源管理功能,Solaris 操作系统通过动态适应新的应用程序请求来对工作负荷需求做出响应。该缺省响应通常表示系统上的所有活动都对资源具有同等的访问权。使用 Solaris 资源管理功能,您可以分别对待各个工作负荷。其中包括:

最大限度地减少工作负荷之间的性能影响以及监视资源使用情况和利用率的功能,称为资源管理。资源管理通过一组算法来实现。算法处理应用程序在执行过程中提出的一系列功能请求。

使用资源管理功能,您可以针对不同的工作负荷修改操作系统的缺省行为。行为主要是指应用程序向操作系统提出一个或多个资源请求时操作系统算法所做出的一组决定。可以使用资源管理功能进行以下操作:

实现使用资源管理功能的系统配置的目的有若干种。其中包括:

在规划资源管理配置时,主要要求如下:

识别合作的工作负荷和冲突的工作负荷后,可以在系统功能允许的范围内,创建对业务服务目标影响最小的资源配置。

通过提供控制机制、通知机制和监视机制,可在 Solaris 系统中实现有效资源管理。上述许多功能都是通过增强现有机制来提供的,例如 proc(4) 文件系统、处理器集和调度类。而其他功能是资源管理所特有的。这些功能将在后续章节中介绍。

资源分类

资源是可进行处理以更改应用程序行为的计算系统的任何方面。因此,资源就是应用程序隐式或显式请求的功能。如果拒绝或约束了此类功能,则强大的应用程序在执行时会慢很多。

相对于资源标识,可以按多种标准对资源进行分类。这些标准可以是隐式请求相对于显式请求,基于时间(例如 CPU 时间)相对于与时间无关(例如指定的 CPU 份额等)。

一般情况下,基于调度器的资源管理应用于应用程序可隐式请求的资源。例如,要继续执行,应用程序会隐式请求更多 CPU 时间。要将数据写入网络套接字,应用程序会隐式请求带宽。可针对隐式请求的资源的总使用量设置约束。

也可提供其他接口,以便显式协商带宽或 CPU 服务级别。明确请求的资源(例如请求附加线程)可以通过约束进行管理。

资源管理控制机制

Solaris 操作系统可用的三种控制机制为约束、调度和分区。

约束机制

使用约束,管理员或应用程序开发者可以对工作负荷所占用的特定资源设置限定。限制已知时,建立资源占用方案模型变得简单得多。也可使用限定控制不良应用程序,否则它们会通过发出无法控制的资源请求影响系统的性能或可用性。

约束确实给应用程序带来了复杂因素。它有可能会修改应用程序和系统之间的关系,导致应用程序无法再正常工作。降低这种风险的一种途径是用未知的资源行为逐渐减少对应用程序的约束。第 6 章中介绍的资源控制功能提供了一种约束机制。可通过编写新的应用程序来了解其资源约束,但是并不是所有应用程序编写者都选择这样做。

调度机制

调度是指按特定间隔做出一系列分配决定。所做的决定基于可预测的算法。不需要当前分配的应用程序会将资源留给其他应用程序使用。基于调度的资源管理可确保在配置的资源充裕时全部进行利用,在配置的资源处于临界或过量使用状态时提供控制分配。基础算法定义了如何解释术语“控制”。在某些情况下,调度算法可能会保证所有应用程序都对资源具有一定的访问权限。第 8 章中介绍的公平份额调度器 (fair share scheduler, FSS) 能够以可控的方法管理应用程序对 CPU 资源的访问权限。

分区机制

分区用于将工作负荷绑定到系统可用资源的子集。该绑定保证工作负荷总是能够使用一定量的资源。使用第 12 章中介绍的资源池功能,您可以将工作负荷限定为使用计算机的特定资源部分。

使用分区的配置可避免整个系统的资源缺乏。但是,避免资源缺乏的同时,也降低了实现高利用率的能力。对于保留的资源组(例如处理器),即使其绑定的工作负荷处于闲置状态,也不能由其他工作负荷使用。

资源管理配置

部分资源管理配置可能位于网络名称服务中。该功能允许管理员在一组计算机集合中应用资源管理约束,而不是专门基于单个计算机应用。相关工作可共享一个通用标识符,可以通过记帐数据将此工作的总使用量制成表格。

第 2 章中更加全面地介绍了资源管理配置和面向工作负荷的标识符。第 4 章中介绍了将这些标识符与应用程序资源使用相链接的扩展记帐功能。

与 Solaris Zones 交互

资源管理功能可与 Solaris Zones 结合使用来进一步完善应用程序环境。将在本指南的适当章节中介绍这些功能与 Solaris Zones 之间的交互。

何时使用资源管理

使用资源管理可以确保应用程序获得所需的响应时间。

资源管理也可增加资源利用率。通过对使用权分类和划分优先级,可在非高峰期有效使用保留资源,这样通常可避免对额外处理能力的需求。您还可以确保资源不会因负荷的改变而浪费。

服务器整合

资源管理非常适合于在单个服务器上整合多个应用程序的环境。

管理大量计算机所带来的成本和复杂性促使在更大、更具伸缩性的服务器上整合多个应用程序。您可以使用资源管理软件在一个系统上分别运行多个工作负荷,而不是通过对单独系统资源的完全访问权限,在每个单独的系统上运行一个工作负荷。使用资源管理,您可以通过在单个 Solaris 系统上运行和控制多个不同应用程序来降低总体拥有成本。

如果您提供 Internet 和应用程序服务,则可以使用资源管理来执行以下操作:

支持大规模或变动的用户群体

可以在任何拥有大规模、多样化用户基础的系统(例如教育机构)中使用资源管理功能。如果您有多个工作负荷,则可以将软件配置为赋予特定项目优先权。

例如,在大型的经纪公司里,贸易商需要不时地通过快速访问来执行查询或计算。而其他系统用户的工作负荷相对稳定。如果为贸易商的项目分配了较大比例的处理能力,则贸易商就可获得所需的响应能力。

资源管理也非常适用于支持瘦客户机系统。这些平台为无态控制台提供了帧缓冲区和输入设备,例如智能卡。实际的计算在共享服务器上完成,形成了分时型环境。使用资源管理功能可以隔离服务器上的用户。这样,导致过载的用户就不会独占硬件资源并明显影响使用该系统的其他用户。

建立资源管理(任务图)

以下任务图高度概括了在您的系统上建立资源管理的步骤。

任务 

说明 

参考 

识别系统上的工作负荷并按项目对每个工作负荷进行分类。 

/etc/project 文件、NIS 映射或 LDAP 目录服务中创建项目条目。

project 数据库

设置系统上工作负荷的优先级。 

确定哪些是关键的应用程序。这些工作负荷可能需要对资源的优先访问权。 

请参考您的业务服务目标。 

监视系统上的实时活动。 

使用性能工具查看系统上正在运行的工作负荷的当前资源占用。然后评估是否必须限制对给定资源的访问或将特定工作负荷与其他工作负荷隔离开来。 

按系统进行监视cpustat(1M)iostat(1M)mpstat(1M)prstat(1M)sar(1)vmstat(1M) 手册页

对系统上正在运行的工作负荷进行临时修改。 

要确定可以更改哪些值,请参考 Solaris 系统中的可用资源控制。当任务或进程正在运行时,可从命令行更新值。 

可用的资源控制针对资源控制值的全局和本地操作在正在运行的系统上临时更新资源控制值rctladm(1M)prctl(1) 手册页。

project 数据库或命名服务项目数据库中为每个项目条目设置资源控制和项目属性。

/etc/project 文件或命名服务项目数据库中的每个项目条目都可包含一个或多个资源控制或属性。资源控制会约束附加到该项目上的任务和进程。对于为资源控制设置的每个阈值,您都可以关联一个或多个在达到该阈值时采取的操作。

您可以使用命令行界面来设置资源控制,也可以使用 Solaris Management Console 设置某些配置参数。 

project 数据库本地 /etc/project 文件格式可用的资源控制针对资源控制值的全局和本地操作第 8 章

为项目附加的进程集所占用的物理内存资源设置上限。 

资源上限执行守护进程将执行在 /etc/project 文件中为项目的 rcap.max-rss 属性定义的物理内存资源上限。

project 数据库第 10 章

创建资源池配置。 

资源池提供了一种对系统资源(例如处理器)进行分区的途径,并在多次重新引导期间维护这些分区。可以在 /etc/project 文件中为每个条目添加一个 project.pool 属性。

project 数据库第 12 章

将公平份额调度器 (fair share scheduler, FSS) 设置为缺省的系统调度器。 

确保所有用户进程位于一个单独的 CPU 系统中,或者位于属于同一调度类的处理器集中。 

配置 FSSdispadmin(1M) 手册页

激活扩展记帐功能来监视并记录任务或进程的资源占用情况。 

使用扩展记帐数据可以评估当前资源控制并为将来的工作负荷规划容量要求。可以跟踪整个系统的总使用量。要获取多个系统中相关工作负荷的全部使用情况统计信息,可在多台计算机间共享项目名称。 

如何激活进程、任务和流的扩展记帐acctadm(1M) 手册页

(可选)如果需要对配置做其他调整,可继续从命令行更改值。您可以在任务或进程正在运行时更改值。 

对现有任务所做的修改可以立即生效,无需重新启动项目。调节值,直至您对性能满意。然后,更新 /etc/project 文件或命名服务项目数据库中的当前值。

在正在运行的系统上临时更新资源控制值以及 rctladm(1M)prctl(1) 手册页

(可选)捕获扩展记帐数据。 

针对活动的进程和任务编写扩展记帐记录。生成的文件可用于规划、分摊费用和计费。还可以使用 libexacct 的实用摘录和报告语言 (Practical Extraction and Report Language, Perl) 接口,来开发自定义报告和摘录脚本。

wracct(1M) 手册页和libexacct 的 Perl 接口