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

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 份额数,则此时将不会修改此项目的份额数。为使更改生效,必须重新启动项目。

如果您要临时更改为项目指定的份额数而不在 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。