Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299674
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-09 18:53:08


第8 章• 公平共享调度程序(概述) 101
CPU 份额示例
102 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
示例2:项目之间没有争用
如果A 和B 都只有一个CPU 限制的进程,并且SA = 1,SB = 100,则份额总数是101。因为每
个项目只有一个运行的进程,所以每个项目都不可能使用一个以上的CPU。由于在此配置
中项目之间没有争用CPU 资源,因此,为项目A 和B 各分配了所有CPU 资源的50%。在此
配置中,CPU 份额值无关紧要。即使为两个项目都指定了零份额,项目的资源分配量也相
同(50/50)。
示例3:一个项目无法运行
如果A 和B 各有两个CPU 限制的进程,并且为项目A 提供1 个份额,为项目B 提供0 个份
额,则不会为项目B 分配任何CPU 资源,而为项目A 分配所有CPU 资源。B 中的进程始终
以系统优先级0 运行,因此它们永远不能运行,因为项目A 中的进程始终具有较高的优先
级。
CPU 份额示例
第8 章• 公平共享调度程序(概述) 103
FSS 设置
项目和用户
项目是指FSS 调度程序中的工作负荷容器。为项目指定的用户组被视为单个可控制块。请
注意,您可以为单个用户创建具有自身份额数的项目。
用户可以是多个指定了不同份额数的项目的成员。通过将进程从一个项目移动到另一个项
目,可以为进程指定不同的CPU 资源量。
有关project(4) 数据库和名称服务的更多信息,请参见第33 页中的“project 数据库”。
CPU 份额配置
CPU 份额配置由名称服务作为project 数据库的一个属性来管理。
通过setproject(3PROJECT) 库函数创建第一个与项目关联的任务(或进程)时,便会将在
project 数据库中定义为资源控制project.cpu-shares 的CPU 份额数传递给内核。并为尚
未定义project.cpu-shares 资源控制的项目指定一个份额。
在以下示例中,/etc/project 文件中的以下条目将项目x-files 的份额数设置为5:
x-files:100::::project.cpu-shares=(privileged,5,none)
如果在进程运行时改变了分配给数据库中某个项目的CPU 份额数,则此时将不会修改此项
目的份额数。为使更改生效,必须重新启动项目。
FSS 设置
104 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
如果您要临时更改为项目指定的份额数而不在project 数据库中改变此项目的属性,请使用
prctl 命令。例如,要在与项目x-files 关联的进程运行时将此项目的project.cpu-shares 资
源控制值更改为3,请键入以下命令:
# prctl -r -n project.cpu-shares -v 3 -i project x-files
有关更多信息,请参见prctl(1) 手册页。
-r 替换命名资源控制的当前值。
-n name 指定资源控制的名称。
-v val 指定资源控制的值。
-i idtype 指定下一个参数的ID 类型。
x-files 指定更改的对象。在此实例中,对象为项目x-files。
项目ID 为0 的项目system 包括所有由引导时初始化脚本启动的系统守护进程。system 可以
看成是具有无限份额数的项目。这意味着无论为其他项目提供多少份额,system 始终首先
调度。如果您不希望system 项目具有无限的份额,则可以在project 数据库中为此项目指
定一个份额数。
如前所述,属于零份额项目的进程的系统优先级始终为0。具有一个或多个份额的项目以1
或更高的优先级运行。这样,仅当CPU 资源可用(即非零份额项目没有请求CPU 资源)
时,才会调度零份额项目。
可以为一个项目指定的最大份额数为65535。
FSS 和处理器集
FSS 可以与处理器集一起使用,与单独使用处理器集相比,这样可更好地控制为每个处理器
集中运行的各项目分配CPU 资源。FSS 调度程序将处理器集视为完全独立的分区,每个处
理器集都单独控制CPU 的分配。
运行于一个处理器集中的项目的CPU 分配不会受到运行于另一个处理器集中的项目的CPU
份额或活动的影响,因为这两个项目没有争用相同的资源。仅当项目在相同的处理器集中
运行时,它们才会相互争用资源。
分配给项目的份额数是整个系统范围的份额数。无论项目在哪个处理器集中运行,此项目
的每一部分都具有等量份额。
如果使用处理器集,则会针对运行于每个处理器集中的活动项目计算项目的CPU 分配,如
下图所示。
FSS 和处理器集
第8 章• 公平共享调度程序(概述) 105
图8–2 FSS 调度程序份额计算(在使用处理器集的情况下)
在不同处理器集中运行的项目分区可能具有不同的CPU 分配。处理器集中每个项目分区的
CPU 分配仅与在同一处理器集中运行的其他项目的分配相关。
在处理器集边界内运行的应用程序的性能和可用性不会受到新处理器集引入的影响。应用
程序也不会受到对其他处理器集中运行的项目的份额分配所做更改的影响。
空处理器集(无处理器的集合)或者没有绑定进程的处理器集不会对FSS 调度程序行为产
生任何影响。
FSS 和处理器集示例
假设服务器具有八个CPU,并且它在项目A、B 和C 中运行若干个CPU 限制的应用程序。
为项目A 分配一个份额,为项目B 分配两个份额,为项目C 分配三个份额。
项目A 只在处理器集1 上运行。项目B 在处理器集1 和2 上运行。项目C 在处理器集1、2
和3 上运行。假设每个项目都有足够的进程来利用所有可用的CPU 资源。这样,每个处理
器集中始终存在对CPU 资源的争用。
FSS 和处理器集
106 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
下表显示了此类系统上系统范围内总的项目CPU 分配。
项目分配
项目A 4%= (1/6X 2/8)pset1
项目B 28% = (2/6X 2/8)pset1+ (2/5 * 4/8)pset2
项目C 67% = (3/6 X 2/8)pset1+ (3/5 X 4/8)pset2+ (3/3 X 2/8)pset3
这些百分比并没有与为项目提供的相应CPU 份额量相匹配。但是,在每个处理器集中,每
个项目的CPU 分配率与各自的份额成比例。
在没有处理器集的同一系统上,CPU 资源的分配将有所不同,如下表所示。
项目分配
项目A 16.66% = (1/6)
项目B 33.33% = (2/6)
项目C 50% = (3/6)
FSS 和处理器集
第8 章• 公平共享调度程序(概述) 107
将FSS 与其他调度类组合
缺省情况下,FSS 调度类与分时(timesharing, TS) 调度类、交互式(interactive, IA) 调度类和固
定优先级(fixed priority, FX) 调度类使用相同的优先级范围(0 到59)。因此,您应该避免这
些调度类中的进程共享同一处理器集。FSS、TS、IA和FX 类中的混合进程可能会引起意外
的调度行为。
使用处理器集时,您可以将TS、IA、FX 和FSS 纳入一个系统中。但是,在每个处理器集中
运行的所有进程都必须属于一个调度类,这样它们就不会争用相同的CPU。特别是,FX 调
度程序不应与FSS 调度类一起使用,除非使用处理器集。此操作防止FX 类中的应用程序使
用过高的优先级运行以至FSS 类中的应用程序不能运行。
您可以将TS 和IA类中的进程纳入同一处理器集中,也可纳入同一无处理器集的系统中。
Solaris 系统还为拥有超级用户权限的用户提供了实时(real-time, RT) 调度程序。缺省情况
下,RT 调度类使用与FSS 不同的系统优先级范围(通常从100 到159)。由于RT 和FSS 使
用不相交或不重叠的优先级范围,因此,FSS 可以与RT 调度类共存于同一处理器集中。但
是,FSS 调度类不对运行于RT 类中的进程进行任何控制。
例如,在具有四个处理器的系统上,如果单线程RT 进程具有CPU 限制,则此进程便可占
用整个处理器。如果系统也运行FSS,则常规用户进程便会争用RT 进程未使用的其余三个
CPU。请注意,RT 进程可能不会持续占用CPU。当RT 进程空闲时,FSS 便会使用所有四个
处理器。
您可以键入以下命令来查看处理器集在哪些调度类中运行,并确保将每个处理器集配置为
运行TS、IA、FX 或FSS 进程。
$ ps -ef -o pset,class | grep -v CLS | sort | uniq
1 FSS
1 SYS
2 TS
2 RT
3 FX
设置系统的调度类
要为系统设置缺省调度类,请参见第112 页中的“如何将FSS 设置为缺省调度程序类”和
dispadmin(1M)。要将运行的进程移动到其他调度类,请参见第112 页中的“配置FSS”和
priocntl(1)。
将FSS 与其他调度类组合
108 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
安装了区域的系统上的调度类
非全局区域使用系统的缺省调度类。如果使用新的缺省调度类设置更新了系统,则在引导
或重新引导之后非全局区域便会获取新的设置。
还可以使用动态资源池功能为非全局区域设置调度类。通过资源池建立的关联将覆盖系统
设置。有关使用池功能为非全局区域设置缺省调度类的信息,请参见第225 页中的“如何
配置区域”中的步骤6。
有关在不更改缺省调度类和不重新引导的情况下将运行的进程移动到其他调度类的信息,
请参见表25–2 和priocntl(1) 手册页。
用于FSS 的命令
下表所示的命令为公平共享调度程序提供了主要管理界面。
命令参考说明
priocntl(1) 显示或设置指定进程的调度参数,将正在运行的进程移动到其他调度
类。
ps(1) 列出有关正在运行的进程的信息,识别运行处理器集所用的调度类。
dispadmin(1M) 设置系统的缺省调度程序。还用于检查和调整FSS 调度程序的时间量
程值。
FSS(7) 介绍公平共享调度程序(fair share scheduler, FSS)。
用于FSS 的命令
第8 章• 公平共享调度程序(概述) 109
110
管理公平共享调度程序(任务)
本章介绍如何使用公平共享调度程序(fair share scheduler, FSS)。
有关FSS 的概述,请参见第8 章。
管理公平共享调度程序(任务图)
任务说明参考
监视CPU 使用情况。监视项目以及处理器集中项目的
CUP 使用情况。
第112 页中的“监视FSS”
设置缺省调度程序类。将FSS 等调度程序设置为系统的
缺省调度程序。
第112 页中的“如何将FSS 设置
为缺省调度程序类”
将正在运行的进程从一个调度程
序类移动到其他调度类(如FSS
类)。
在不更改缺省调度类和不重新引
导的情况下,将进程从一个调度
类手动移动到另一个调度类。
第113 页中的“如何将进程从
TS 类手动移动到FSS 类”
将所有正在运行的进程从所有调
度类移动到其他调度类(如FSS
类)。
在不更改缺省调度类和不重新引
导的情况下,将所有调度类中的
进程手动移动到另一个调度类。
第113 页中的“如何将进程从所
有用户类手动移动到FSS 类”
将项目的进程移动到其他调度类
(如FSS 类)。
将项目的进程从当前调度类手动
移动到其他调度类。
第114 页中的“如何将项目的进
程手动移动到FSS 类”
检查和调整FSS 参数。调整调度程序的时间量程值。时
间量程是指线程在必须放弃处理
器之前可以运行的时间。
第114 页中的“如何调整调度程
序参数”
9第9 章
111
监视FSS
您可以使用prstat(1M) 手册页中所述的prstat 命令来监视活动项目的CPU 使用情况。
您可以使用任务的扩展记帐数据来获取每个项目在较长一段时间内占用的CPU 资源量的统
计信息。有关更多信息,请参见第4 章。
 如何按项目监视系统的CPU 使用情况
要监视系统上运行的项目的CPU 使用情况,请使用带有-J 选项的prstat 命令。
% prstat -J
 如何按处理器集中的项目监视CPU 使用情况
要监视处理器集列表中项目的CPU 使用情况,请键入:
% prstat -J -C pset-list
其中,pset-list 是用逗号分隔的处理器集ID 的列表。
配置FSS
用于Solaris 系统中的其他调度类的命令也可用于FSS。您可以设置调度程序类,配置调度程
序的可调参数,以及配置单个进程的属性。
 如何将FSS 设置为缺省调度程序类
FSS 必须是系统上的缺省调度程序才能使CPU 份额分配生效。
使用priocntl 和dispadmin 命令的组合确保FSS 既可立即设置为缺省调度程序,也可在重新
引导之后设置为缺省调度程序。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《System
Administration Guide: Basic Administration》中的“Using the Solaris Management ToolsWith
RBAC (Task Map)”。
将系统的缺省调度程序设置为FSS。
# dispadmin -d FSS
此更改将在下次重新引导时生效。重新引导之后,系统上的每个进程都在FSS 调度类中运
行。


1
2
监视FSS
112 系统管理指南:Solaris Containers-资源管理和Solaris Zones • 2006 年7 月
在不重新引导的情况下,使此配置立即生效。
# priocntl -s -C FSS
 如何将进程从TS 类手动移动到FSS 类
您可以在不更改缺省调度类和不重新引导的情况下,将进程从一个调度类手动移动到另一
个调度类。此过程显示了如何将进程从TS 调度类手动移动到FSS 调度类。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《System
Administration Guide: Basic Administration》中的“Using the Solaris Management ToolsWith
RBAC (Task Map)”。
将init 进程(pid 1) 移动到FSS 调度类。
# priocntl -s -c FSS -i pid 1
将所有进程从TS 调度类移动到FSS 调度类。
# priocntl -s -c FSS -i class TS
注– 重新引导之后,所有进程将再次在TS 调度类中运行。
 如何将进程从所有用户类手动移动到FSS 类
您可以使用TS 之外的缺省类。例如,您的系统可能正在运行缺省情况下使用IA类的窗口
环境。您可以在不更改缺省调度类和不重新引导的情况下,将所有进程手动移动到FSS 调
度类。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《System
Administration Guide: Basic Administration》中的“Using the Solaris Management ToolsWith
RBAC (Task Map)”。
将init 进程(pid 1) 移动到FSS 调度类。
# priocntl -s -c FSS -i pid 1
将所有进程从当前调度类移动到FSS 调度类。
# priocntl -s -c FSS -i all
注– 重新引导之后,所有进程将再次在缺省调度类中运行。
 
 
 

以上文章转自于 : http://developers.sun.com.cn/
阅读(455) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~