poolcfg - 创建和修改资源池配置文件
/usr/sbin/poolcfg -c command [-d | [filename]]
/usr/sbin/poolcfg -f command-file [-d | [filename]]
/usr/sbin/poolcfg -h
poolcfg 实用程序提供有关池、pset 和系统范围池属性的配置操作。这些操作基于现有的配置文件执行。如果未指定文件参数,则将使用缺省配置文件 /etc/pooladm.conf。
必须先启用 svc:/system/pools:default 类型的服务,才能在引导时应用缺省池配置。该服务可通过 svcadm(8) 启用,或通过 pooladm(8) 实用程序的 –e 选项启用。
缺省情况下 /etc/pooladm.conf 不存在。有关如何创建它的说明,请参见下面的示例 1。
如果启用了 svc:/system/pools:default 服务,则会在系统引导期间应用此配置文件。还可以使用 pooladm(8) 实用程序的 –c 选项应用该配置文件。这称为应用池配置。应用配置时,将在内核中创建池和 pset,然后进程可以绑定到它们。此内核状态称为池动态配置或正在运行的配置。
如果使用 poolcfg 的 –d 选项,则操作将直接基于正在运行的配置而不是基于配置文件执行。这些变化在重新引导后将不会持续存在,将受到未来应用的池配置文件的破坏。要捕获通过 poolcfg -d 对配置文件进行的运行时更改,请使用 pooladm(8) 实用程序的 –s 选项。
池配置文件是结构化文件,必须使用 poolcfg 或 libpool(3LIB) 进行构建和编辑。
如果动态配置已经由其他进程(例如其他 poolcfg -d 或使用 libpool.so.1 的进程)打开供进行写入,则使用任何修改操作调用 poolcfg -d 都将会挂起。挂起将会持续,直到写入进程关闭该文件。
此命令不能用于修改由 psrset(8) 创建的 pset。这包括分配或传输已分配给 psrset(8) pset 的 CPU。要处理此类 pset,请参见 psrset(8)。poolcfg 创建的 pset 称为“池 pset”。
支持以下选项:
指定 poolcfg 命令。支持多个 –c 选项,并将按顺序处理这些选项。请参见下面的“用法”部分。
直接对正在运行的配置进行操作。这在 libpool(3LIB) 中也称为池动态配置。
不允许使用文件名参数。在 pooladm(8) 命令看来,这些命令是针对正在运行的配置执行的,而且任何修改都会立即确定。
从 command-file 中获取命令。command-file 由 poolcfg 命令组成,每行一个命令。
显示有关编辑命令语法的扩展信息。
支持以下 poolcfg 命令:
以用户可读的形式将配置(或指定部分)显示至标准输出。如果没有指定实体,将显示系统信息。因此,poolcfg –c 'info' 是等同于 poolcfg –c 'info system default' 的调用。
创建具有指定类型和名称的实体。可以创建 pool 和 pset 类型的实体。创建的 pset 将关联到 pool_default。创建的池将关联到 pset_default。
可以选择性地提供 property-list 以为一个或多个属性提供初始值。
删除指定的实体。可以销毁 pool 和 pset 类型的实体。如果销毁 pset,则与该 pset 关联的任何池将与池 "pool_default" 关联。
更改指定实体上列出的属性。修改 pset.min 和 pset.max 属性将会删除上一 assign 命令设置的任何配置。
将池关联到 pset。池和 pset 都必须存在。将删除以前的 pset 关联,因为池只可以关联到单个 pset。
此命令的目标池不能是 pool_default 或由 psrset(8) 创建的 pset 的池。此命令的目标 pset 不能是由 psrset(8) 创建的 pset。
将一组特定的 cpu、核心或套接字分配给 pset。只能为 pset 分配 cpu、核心或插槽之一,而不能混合分配这些类型。
在池配置文件中,如果 cpu、核心或插槽已经分配给其他 pset,则分配命令将失败。
对于给定的 pset,assign 命令将替换以前的任何修改命令设置的配置。如果以前的分配命令为同一类型,则会保留这些命令。例如,将核心分配给已经分配了核心的 pset 将会添加到已经分配的核心,但不会替换它们。
如果使用 pooladm -c 命令应用包含通过 psrset(8) 实用程序分配给 pset 的 CPU 的池配置,则此类 CPU 无法分配给池 pset。通过 poolcfg -dc 直接将此类 CPU 分配给正在运行的配置中的池 pset 也会失败。通常,psrset(8) pset 正在使用的 CPU 不能供池 pset 使用。必须先使用 psrset -r 将其删除。
从 pset 中删除 cpu、核心或套接字分配。特殊标记 "all" 可用于取消分配所有 cpu、核心或插槽。如果正在取消分配所有 cpu、核心或插槽,且 pset 绑定了一个或多个进程,则配置将无法应用。
unassign 命令只能继成功执行 assign 命令之后成功执行。
将一个或多个特定 cpu 传输至目标 pset。源 pset 是特定 cpu 当前所在的 pset。请参见下文中的“传输约束条件”。
将一些 cpu 从 pset src-pset-name 转移到 pset tgt-pset-name。请参见下文中的“传输约束条件”。
将一些 cpu 从 pset tgt-pset-name 转移到 pset src-pset-name。请参见下文中的“传输约束条件”。
如果使用 assign 命令配置源或目标 pset,则 transfer 命令会失败。此规则不适用于 pset_default,因为 pset_default 所具有的 cpu、核心或插槽可能多于为其指定的数量。
如果会导致超出为源或目标 pset 配置的 cpu 数量下限或上限,则 transfer 命令将失败。此规则不适用于 pset_default 的最大大小,因为它所具有的 cpu、核心或插槽可能多于为其指定的数量或通过 pset.min 和 pset.max 属性分配的数量。
这两个 pset 都不能是由 psrset(8) 创建的 pset。
创建一个与当前正在运行的池配置匹配的新池配置文件,作为 pooladm(8) 实用程序的输出。
当 poolcfg 直接对正在运行的配置进行操作时,此命令没有效果。请参见 –d 选项。
创建配置的首选方法是配合使用 pooladm(8) 和 –s 选项来导出动态配置。
将系统上实体的名称更改为新名称。
此命令的目标不能是 "pool_default" 或 "pset_default",也不能是由 psrset(8) 创建的池或 pset。
poolcfg 命令使用以下标记:
可以为以下任一项:
计算机级别实体。只有一个名为 "default" 的系统实体。
与 pset 关联的命名对象。多个池可以与同一处理器集关联,但 pset 只能与单个池关联。
一个代表 cpu 集合的对象。
一个代表单个虚拟处理器的对象,也称为硬件线程或导线束。
实体名称随实体类型而异。
对于 "system" 类型,只存在一个实体,名称为 "default"。system 实体存储系统范围的池属性。
对于 "pool" 类型,始终有一个 "pool_default" 以及零个或多个用户定义的池。
对于 "pset" 类型,始终有一个 "pset_default" 以及零个或多个用户定义的 pset。
对于 "cpu" 类型,系统上的每个 cpu 均有一个 cpu 实体,每个 cpu 实体有一个数字名称,等同于其 cpuid。
可以为以下任一项:
值为 true 或 false 之一。
64 位带符号的整数值。
64 位不带符号的整数值。
字符串由引号 (") 分隔,并且支持以 formats(7) 定义的字符转义序列。
不支持科学记数法。
所处理实体上属性的名称。有关资源池框架理解的属性的列表,请参见 libpool(3LIB) 手册页。也可以设置和删除用户定义的属性。
前面的 prop-type 定义的有效值。
属性列表是分配的一个或多个属性值的列表。
<prop-type> <prop-name> = <value> [ ; <prop-type> <prop-name> = <value> ]*
也可以使用 property-list 中的以下语法指定属性删除。
~ <prop-type> <prop-name>
一个代表 cpu、核心或插槽的对象。可以为以下任一项:
一个虚拟 cpu,也称为硬件线程或导线束。
一组共享物理计算资源的虚拟 cpu。
一组包含在物理处理器内的核心。
cpu、核心或套接字的数字 id,如 psrinfo -c 所列。
一个或多个 cpu、核心或插槽的列表。列表中的所有项目必须具有相同的 cpu-res-type。
cpu-res-type cpu-res-id [ ; cpu-res-type cpu-res-id ]
由 - 分隔的最小和最大值。例如,范围二到四表示为 "2-4"。
单个正整数值。
以下命令将启用池服务并创建新的池配置文件。所创建的文件为 /etc/pooladm.conf。它将包含 pool_default 和 pset_default。
# pooladm -e # pooladm -s示例 2 创建池和 pset
以下 poolcfg 脚本将创建一个名为 Accounting 的池和一个 pset:Small。首先创建 pset,然后创建池,再将其与该集关联。最后,将应用配置以在运行的系统上创建池和 pset。
# cat command-file.txt create pset Small (uint pset.min = 2; uint pset.max = 2) create pool associate pool Accounting ( pset Small ) # poolcfg -f command-file.txt # pooladm -c示例 3 报告 pool_0
以下命令以用户可读形式在标准输出中提供有关 pool_0 的报告:
# poolcfg -c 'info pool pool_0'示例 4 销毁 pool_0 及其关联
以下命令销毁 pool_0。不会销毁与 pool_0 关联的 pset。
# poolcfg -c 'destroy pool pool_0'示例 5 显示当前配置
以下命令显示将在系统引导时应用的当前配置或下一个 pooladm -c 命令。
$ poolcfg -c 'info' system default string system.comment int system.version 1 boolean system.bind-default true boolean system.project-fallback-to-default true boolean system.zone-fallback-to-default false 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 string pset.policy minmax string pset.restype cpu strintg pset.reslist 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示例 6 将 ID 为 2 的 cpu 移动到正在运行的配置中的 pset pset1
以下命令将 ID 为 2 的 cpu 移动到内核中的处理器集 pset1:
# poolcfg -dc 'transfer to pset pset1 ( cpu 2 )'示例 7 将 2 个 cpu 从正在运行的配置中的 pset pset1 移动到处理器集 pset2 中
# poolcfg -dc 'transfer 2 from pset pset1 to pset2'示例 8 将池配置为具有特定的核心列表
# poolcfg -c 'create pset pset1' # poolcfg -c 'assign to pset pset1 (core 0-3)'示例 9 删除池属性
以下命令删除用户以前对池设置的属性。
# poolcfg -c 'modify pool pset1 ( ~ string userprop1 )'
有关下列属性的说明,请参见 attributes(7):
|
调用为 Committed(已确定)。输出是 "Uncommitted"(未确定)。
libpool(3LIB)、attributes(7)、formats(7)、resource-management(7)、pooladm(8)、poolbind(8)、poold(8)