第6节 Solaris资源管理器
资源管理功能是SolarisTM Container环境的另外一个组件。使用资源管理,您可以控制应用程序如何使用可用的系统资源,包括:
n 分配计算资源,例如处理器时间,内存等
n 监视已分配资源使用情况,然后根据需要调整分配
n 生成用于分析、计费和容量规划的扩展记帐信息
6.1 资源管理器常见的概念
资源池
把系统资源分组,并按工作量进行分配;由处理器组和调度作业类(Scheduling class)组成资源池;目前不支持内存集设定。下图显示了资源池的架构:
: (2007-1-25 18:10, 4.77 K)
处理器集
Pset,把CPU编组,单位为CPU的个数。
项目组
用户或用户组能使用的进程组。
调度程序
按照各种不同的调度策略,把CPU资源合理分配给各种进程。Solaris系统默认的调度程序为时分调度(timesharing,TS),还有公平共享
调度(Fair Share Scheduler,FSS),固定优先级调度(fixed
priority,FX),交互式调度(interactive,IA)。
缺省情况下,所有的调度类均使用相同的优先级范围(0-59)。因此应避免这些调度类中的进程共享同一个处理器集。FSS、TS、IA和FX类中的混合进程可能会引起意外的调度行为,所以在每个处理器集中运行的所有进程都必须属于同一种调度类。
RCAP
Resource Capping Daemon,设定项目能使用的物理内存上限
各组件间的关系如下图所示:
: (2007-1-25 18:10, 28.09 K)
6.1.1 动态调配资源池
Solaris操作系统在启动时,init 脚本会检查/etc/pooladm.conf 文件是否存在。如果找到此文件,则会调用pooladm
以使此配置成为活动池的配置。系统将创建动态配置以反映/etc/pooladm.conf 中请求的组织,并相应地对计算机的资源进行分区。
动态资源池(dynamic resource pool, DRP) 可动态调整每个资源池的资源分配,以响应系统事件和应用程序负荷的更改。
: (2007-1-25 18:10, 36.82 K)
图:物理CPU从池2的CPU集被动态的调整到池1的CPU集中
动态资源池简化了管理员需要做出的决策并减少了决策数。调整是自动进行的,目的是确保始终达到管理员指定的系统性能目标。对配置所做的更改将会记录。这些
功能主要通过资源控制器poold来实施,它是一种系统守护进程,需要进行动态资源分配时此进程应始终处于活动状态。poold会定期检查系统负荷,并确
定是否需要人为介入,使系统始终保持最佳的资源利用性能。poold配置保存在libpool配置中。
DYNAMIC RECONFIGURATION
通过动态重新配置(DR),您可以在系统运行时重新配置硬件。DR操作可以增大、减小对指定资源类型的影响,或者对其没有任何影响。由于DR会影响可用的资源量,因此,这些操作中必须包括池功能。启动DR 操作之后,池框架便会执行操作以验证配置。
6.1.2 公平共享调度
系统默认使用为TS调度方式,即尝试为每个进程提供相对均等的访问可用CPU的权限。然而,实际情况是,经常会有一些重要的进程需要长时间的大量的占用CPU资源。使用公平共享调度FSS,能按比例分派CPU资源,设置项目组能使用的共享的CPU份额。
使用公平共享调度程序,你可以基于各工作量的重要性来控制分配给它们的可用的CPU资源。通过为每个项目指定CPU资源份额,可控制该项目访问CPU资源
的权力。FSS确保为各项目公平的分派CPU资源,这种公平基于已配给的份额,而与附加到该项目的进程数无关。FSS通过将某个项目与其他项目比较后,来
减少或增加各个项目对CPU的大量使用的权力。
CPU份额和使用率
FSS能够动态修改对CPU份额的分配,同时能限制对CPU资源使用的冲突。对CPU份额的分配按项目组,也可以按zone进行分配。CPU配给为0的项目组始终以最低系统优先级(0)运行,这些进程只有在非零份额项目不使用CPU资源时才运行(即CPU有空闲时间时)。
项目能使用的CPU资源(百分比)=分配给项目的份额/所有项目的份额的总和
份额分配并不等于使用率,仅当与其他项目争用CPU资源时,份额才会限制对CPU的使用。如果某一时刻仅有一个项目在系统上单独运行,无论此项目的份额配
给是多少,它都能获得100%的CPU处理能力。当有其他项目也开始运行时,先前单独运行的项目会在FSS控制下让出属于其他项目的CPU份额配给。下图
显示了这种机制(圆圈代表100%CPU资源):
: (2007-1-25 18:10, 19.52 K)
FSS和处理器集
项目可以跨处理器集运行,这意味着分配给项目的份额的适用性可扩越系统的所有处理器集。每个处理器集都要为正在使用它的资源的项目进行合适的CPU资源配给。
假设服务器具有八个CPU,并且它在项目A、B 和C中运行若干个CPU
限制的应用程序。为项目A分配一个份额,为项目B分配两个份额,为项目C分配三个份额。项目A只在处理器集1上运行。项目B在处理器集1和2上运行。项目
C在处理器集1、2和3上运行。假设每个项目都有足够的进程来利用所有可用的CPU资源。这样,每个处理器集中始终存在对CPU
资源的争用。那么各项目在各处理集中能使用的CPU资源如下:
: (2007-1-25 18:10, 14.38 K)
各项目获得的CPU资源占系统总CPU资源(8个CPU)的比例计算如下:
项目A:1/6×2/8
=1/24
项目B:2/6×2/8+2/5×4/8
=1/12+1/5
项目C:3/6×2/8+3/5×4/8+3/3×2/8
=1/8+3/10+1/4
6.1.3 Zone与资源池
所有的zone都必须属于一个资源池,在创建zone的时候可定义zone所属的资源池。默认情况下,所有的资源都属于pool_default(系统缺省的资源池)。可为在资源池中的zone分配共享的CPU份额,并能动态修改;一个zone可指定多个项目。
: (2007-1-25 18:10, 41.84 K)
6.2 资源池配置
与资源管理器相关的命令和进程
pooladm 在系统上启用或禁用池功能。激活特定配置或删除当前配置,并将关联的资源返回到其缺省状态。如果在不带选项的情况下运行,则pooladm 会显示当前的动态池配置。
poolbind 启用手动绑定功能,将项目、任务和进程绑定到资源池中。
poolcfg 提供对池和集的配置操作。使用此工具创建的配置通过使用pooladm在目标主机上进行实例化。如果使用-c
选项的info 子命令参数,则poolcfg 将在/etc/pooladm.conf
中显示有关静态配置的信息。如果添加了一个文件名参数,则此命令将显示有关命名文件中包含的静态配置的信息。例如,poolcfg -c info
/tmp/newconfig 显示有关/tmp/newconfig 文件中包含的静态配置的信息。
poold 池系统守护进程。此守护进程使用系统目标和可查看的统计信息来达到管理员指定的系统性能目标。如果在未满足目标的情况下无法进行更正操作,则poold 将记录此情况。
poolstat 显示与池相关的资源统计信息。简化性能分析并为系统管理员提供资源分区和重新分区任务方面的支持信息。提供了一些选项来检查指定的池并报告资源集特定的统计信息。
6.2.1 资源池配置概览
一、 启用池功能
# pooladm -e
二、 创建初始化静态配置,默认为/etc/pooladm.conf
# pooladm –s
查看配置文件的内容
# poolcfg –c info
system s10
string system.comment
int system.version 1
boolean system.bind-default true
int system.poold.pid 11414
pool pool_default
int pool.sys_id 0
boolean pool.active true
boolean pool.default true
int pool.importance 1
string pool.comment
pset pset_default
pset pset_default
int pset.sys_id -1
boolean pset.default true
uint pset.min 1
uint pset.max 65536
string pset.units population
uint pset.load 217
uint pset.size 1
string pset.comment
cpu
int cpu.sys_id 0
string cpu.comment
string cpu.status on-line
启用池之后,缺省池和缺省处理器集便会组成基本配置。可以创建其他用户自定义的池和处理器集并将它们添加到配置中。一个CPU
只能属于一个处理器集。可以销毁用户自定义的池和处理器集,不能销毁缺省池(pool_default)和缺省处理器集(pset_default)。
在/etc/pooladm.conf中提交配置
# pooladm -c
要将动态配置复制到名为/tmp/backup的静态配置文件(可选)
# pooladm –s /tmp/backup
三、 修改池配置
创建处理器集pset_bak以及池pool_bak,然后把新创建的池和处理器集关联起来,最后提交配置
# poolcfg -c 'create pset pset_bak ( uint pset.min=2;uint pset.max=10)'
# poolcfg -c 'create pool pool_bak'
# poolcfg -c 'associate pool pool_bak(pset pset_bak)'
# poolcfg -c info
system s10
string system.comment
int system.version 1
boolean system.bind-default true
int system.poold.pid 11414
<…输出省略…>
pool pool_bak
boolean pool.active true
boolean pool.default false
int pool.importance 1
string pool.comment
pset pset_bak
<…输出省略…>
pset pset_bak
int pset.sys_id -2
boolean pset.default false
uint pset.min 2
uint pset.max 10
string pset.units population
uint pset.load 0
uint pset.size 0
string pset.comment
# pooladm -c
四、 将池与调度类关联
# poolcfg -c 'modify pool pool_bak(string pool.scheduler="FSS")'
# poolcfg -c info | grep sch
string pool.scheduler FSS
五、 指定zone使用的资源池
# zonecfg -z test-zone
zonecfg:test-zone> set pool=pool_bak
zonecfg:test-zone> commit
zonecfg:test-zone> exit
本文来自:SUN系统管理员学习指南(全球唯一中文版免费在线阅读) for solaris 9&10
阅读(1514) | 评论(0) | 转发(0) |