在 Solaris 区域中配置动态资源池
资源池配置允许我们在不重启区域的情况下动态地为区域配置 CPU 资源。
默认情况下,当在系统上启用动态资源池时,它会有一个默认处理器集和一个默认池,其中已经配置了所有 CPU 资源。
现在让我们看看如何配置新的处理器集和池并将它们绑定到 2 个区域 zone01 和 zone02.
启用动态资源池服务:
global # svcadm enable /system/pools/dynamic
确保 poold 守护进程正在运行
global # pooladm pooladm: couldn't open pools state file: Facility is not active
global # pooladm -e
如果我们现在检查 pooladm 命令,我们会看到一个默认池和一个默认处理器集已经配置了其中的所有 CPU。
global # pooladm system default string system.comment int system.version 1 boolean system.bind-default true string system.poold.objectives wt-load 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 15 uint pset.size 4 string pset.comment cpu int cpu.sys_id 1 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 3 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 0 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 2 string cpu.comment string cpu.status on-line
将内存池配置保存到 /etc/pooladm.conf。
仅当我们第一次启用资源池守护程序时才需要这样做。
global # pooladm -s
创建配置文件 /var/tmp/pool.conf 以从中创建资源池。
其中:我们使用以下配置创建 2 个池 pool01 和 pool02
Pool name - pool01 processor set name - pset01 Min. Processors - 1 Max Processors - 1 Pool name - pool02 processor set name - pset02 Min. Processors - 1 Max Processors - 2
global # cat /var/tmp/pool.conf create pset pset01 (uint pset.min = 1; uint pset.max = 1) create pool pool01 associate pool pool01 (pset pset01) create pset pset02 (uint pset.min = 1; uint pset.max = 2) create pool pool02 associate pool pool02 (pset pset02)
刷新内存配置
global # pooladm -x
将空白配置保存到 /etc/pooladm.conf
global # pooladm -s
将 /var/tmp/pool.conf 配置保存为 /etc/pooladm.conf。
从我们刚刚创建的配置文件中创建 2 个池
global # poolcfg -f /var/tmp/pool.cfg
激活新的 /etc/pooladm.conf 配置:
global # pooladm -c
如果我们现在检查 pooladm,我们将看到使用各自的处理器集创建的 2 个池。
# pooladm system default string system.comment int system.version 1 boolean system.bind-default true string system.poold.objectives wt-load pool pool01 int pool.sys_id 1 boolean pool.active true boolean pool.default false int pool.importance 1 string pool.comment pset pset01 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 pool pool02 int pool.sys_id 2 boolean pool.active true boolean pool.default false int pool.importance 1 string pool.comment pset pset02 pset pset01 int pset.sys_id 1 boolean pset.default false uint pset.min 1 uint pset.max 1 string pset.units population uint pset.load 0 uint pset.size 1 string pset.comment cpu int cpu.sys_id 2 string cpu.comment string cpu.status on-line 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 8 uint pset.size 1 string pset.comment cpu int cpu.sys_id 3 string cpu.comment string cpu.status on-line pset pset02 int pset.sys_id 2 boolean pset.default false uint pset.min 1 uint pset.max 2 string pset.units population uint pset.load 0 uint pset.size 2 string pset.comment cpu int cpu.sys_id 1 string cpu.comment string cpu.status on-line cpu int cpu.sys_id 0 string cpu.comment string cpu.status on-line
配置两个区域并将池分配给各自的区域:
global # zoneadm list -ivc ID NAME STATUS PATH BRAND IP 0 global running / solaris shared 3 zone01 running /rpool/zone01 solaris excl 4 zone02 running /rpool/zone02 solaris excl
global # zonecfg -z zone01 zonecfg:zone01> set pool=pool01 zonecfg:zone01> verify zonecfg:zone01> commit zonecfg:zone01> exit
global # zonecfg -z zone02 zonecfg:zone02> set pool=pool02 zonecfg:zone02> verify zonecfg:zone02> commit zonecfg:zone02> exit
上述池绑定到区域在重新启动后生效并在重新启动后保持不变,但要使池绑定立即生效:
global # poolbind -p pool01 -i zoneid zone01 global # poolbind -p pool02 -i zoneid zone02
现在检查分配给区域的处理器:
global # zlogin zone01 psrinfo -p 1
global # zlogin zone02 psrinfo -p 2
solaris 10/solaris 11 中的资源池提供了一种将处理器集和调度类分配给非全局区域的机制。
资源池框架如下图所示。
当我们在区域上具有可变负载并且我们希望动态更改对这些区域的资源分配时,动态资源池非常有用。
与上限 CPU 分配不同,区域的动态资源池分配是在线的,可以随时在线更改。
注意:资源池是一个旧功能,现在被专用于区域的 CPU 分配所取代,这反过来又会做同样的事情。
它在下面创建池和处理器集,并将它们与区域相关联。
因此,如果我们稍后使用的是 Solaris 10 8/07 的更新,最好使用将 CPU 分配给区域的专用 CPU 功能