跳过导航链接 | |
退出打印视图 | |
![]() |
手册页第 1 部分:用户命令 Oracle Solaris 11 Information Library (简体中文) |
- 显示或设置指定进程和 LWP 的调度参数
priocntl -l
priocntl -d [-i idtype] [idlist]
priocntl -s [-c class] [class-specific options] [-i idtype] [idlist]
priocntl -e [-c class] [class-specific options] command [argument(s)]
priocntl 命令显示或设置指定进程或 LWP 的调度参数。也可用于显示系统进程调度程序的当前配置信息,或以指定调度参数执行命令。
进程和 LWP 属于完全不同的类,对每个类应用单独的调度策略。当前支持的类包括实时类、分时类、交互式类、公平份额类和固定优先级类。这些类的特征和它们接受的类特定选项将在下面以下标题下的“用法”部分进行说明:实时类、分时类、交互式类、公平份额类和固定优先级类。拥有适当权限时,priocntl 命令可以更改与运行中的进程或 LWP 关联的类和其他调度参数。
缺省配置中,可运行的实时进程或 LWP 在其他所有进程之前运行。因此,对实时进程或 LWP 的不恰当使用会对系统性能有很严重的负面影响。
如果存在 idlist,它必须在命令行的最后,且列表中的各个元素必须以空格间隔。如果不存在 idlist,pid、ppid、 pgid、sid、taskid、class、uid、gid、projid 或 zoneid 的 idtype 参数会分别指定 priocntl 命令本身的进程 ID、父进程 ID、进程组 ID、会话 ID、任务 ID、类、用户 ID、组 ID、项目 ID 或区域 ID。
命令
priocntl -d [-i idtype] [idlist]
显示 idtype 和 idlist 指定的进程的类和类特定调度参数。
命令
priocntl -s [-c class] [class-specific options] \ [-i idtype] [idlist]
将指定进程的类和类特定调度参数设置为命令行给出的值。-c class 选项指定要设置的类。(有效 class 参数对于实时是 RT,对于分时是 TS,对于交互式是 IA,对于公平份额是 FSS,对于固定优先级是 FX。)
要设置的类特定参数由类特定选项指定,我们将在后面适当的标题下加以解释。如果省略 -c class 选项,idtype 和 idlist 必须指定一组全部位于相同类中的进程或 LWP,否则会出现错误。如果未指定类特定选项,进程的类特定参数设置为由 -c class 指定的类的缺省值(或者,如果还省略 -c class 选项,则设置为进程的当前类的缺省参数值)。
要使用 priocntl 更改进程或 LWP 的调度参数,调用 priocntl 的用户的实际或有效用户 ID(各自的 groupID)必须与接收进程或 LWP 的实际或有效用户 ID(各自的 groupID)相匹配,或者用户的有效用户 ID 必须是超级用户。这些是所有类都要强制执行的最低权限要求。设置类的进程或类特定调度参数时,单个类可以强加其他权限要求。
idtype 和 idlist 指定一组进程(无论是否有 LWP 列表)时,priocntl 会以特定于实现的顺序作用于集合中的进程。如果 priocntl 遇到有关一个或多个目标进程的错误,它是否能够继续通过进程集合取决于错误的性质。
如果错误与权限有关,priocntl 会打印这条错误消息,然后继续通过进程集合,同时重置用户具有适当权限的所有目标进程的参数。如果 priocntl 遇到权限之外的错误,则不会继续通过进程集合,而是打印错误消息并立即退出。
存在一个特殊的 sys 调度类,目的在于调度某些特别系统进程(如交换程序进程)的执行。不是任何进程的类都可以更改为 sys。此外,包括在由 idtype 和 idlist 指定的进程集合中的 sys 类中的任何进程或 LWP 都会被 priocntl 忽略。例如,如果 idtype 是 uid,包含一个零的 idlist 将指定 UID 为 0 的所有进程,除了 sys 类中的进程和(如果使用 -s 选项更改参数)init 进程。
init 进程(进程 ID 1)是一个特例。为了 priocntl 命令可以更改 init 进程的类或其他调度参数,idtype 必须是 pid,idlist 必须只包含一个 1。init 进程可以分配到系统中配置的任何类,但是分时类几乎永远是最佳选择。非常不建议您选择其他项,有关更多信息,请参见《Oracle Solaris 管理:常见任务》。
命令
priocntl -e [-c class] [class-specific options] command \ [argument...]
以在命令行(arguments 是命令的参数)指定的类和调度参数执行特定命令。如果省略 -c class 选项,该命令会在用户当前的类中运行。
支持下列选项:
指定要设置的 class。(有效 class 参数对于实时是 RT,对于分时是 TS,对于交互式是 IA,对于公平份额是 FSS,对于固定优先级是 FX。)如果指定的类尚未配置,会自动对其进行配置。
显示与一组进程关联的调度参数。
以与一组进程关联的类和调度参数执行指定命令。
该选项与 idlist 参数(如果有)共同指定 priocntl 命令要应用到的一个或多个进程或 LMP。对 idlist 的解释取决于 idtype 的值。如果在使用 -d 或 -s 选项时省略了 -i idtype 选项,将采用 pid 的缺省 idtype。
有效 idtype 参数和对 idlist 的相应解释如下:
priocntl 命令应用于所有的现有进程。不应指定 idlist(如果指定,则会忽略)。下面描述的权限限制仍然适用。
idlist 是进程合同 ID 列表。priocntl 命令应用于进程合同 ID 等于列表中 ID 的所有进程。
idlist 包含一个类名称(对于实时是 RT ,对于分时是 TS,对于交互式是 IA,对于公平份额是 FSS,对于固定优先级是 FX)。priocntl 命令应用于指定类中的所有进程。
idlist 是组 ID 列表。priocntl 命令应用于有效组 ID 等于列表中 ID 的所有进程。
idlist 是进程组 ID 列表。priocntl 命令应用于指定进程组中的所有进程。
idlist 是进程 ID 列表(每个 ID 后可能有一个正斜杠 (/))和 LWP ID 的逗号分隔列表。LWP ID 的范围可以由 - 表示。
idlist 是父进程 ID 列表。priocntl 命令应用于其父进程 ID 包含在列表中的所有进程。
idlist是项目 ID 列表。priocntl 命令应用于有效项目 ID 等于列表中 ID 的所有进程。
idlist 是会话 ID 列表。priocntl 命令应用于指定会话中的所有进程。
idlist 是任务 ID 列表。priocntl 命令应用于指定任务中的所有进程。
idlist 是用户 ID 列表。priocntl 命令应用于有效用户 ID 等于列表中 ID 的所有进程。
idlist 是区域 ID 列表。priocntl 命令应用于有效区域 ID 等于列表中 ID 的所有进程。
显示系统中当前配置的类的列表,以及有关每个类的类特定信息。类特定信息的显示格式将在“用法”部分进行说明。
设置与一组进程关联的调度参数。
用于设置实时参数的有效类特定选项包括:
将指定进程和 LWP 的实时优先级设置为 rtpri。
将指定进程的时间量程设置为 tqntm。您可以按照下面的解释有选择地指定精度。
将指定进程和 LWP 的实时时间量程信号设置为 tqsig。
用于设置分时参数的有效类特定选项包括:
将指定进程和 LWP 的用户优先级限制设置为 tsuprilim。
将指定进程和 LWP 的用户优先级设置为 tsupri。
用于设置交互式参数的有效类特定选项包括:
将指定进程和 LWP 的用户优先级限制设置为 iauprilim。
将指定进程和 LWP 的用户优先级设置为 iaupri。
用于设置公共份额参数的有效类特定选项包括:
将指定进程和 LWP 的用户优先级限制设置为 fssuprilim。
将指定进程和 LWP 的用户优先级设置为 fssupri。
用于设置固定优先级参数的有效类特定选项包括:
将指定进程和 LWP 的用户优先级限制设置为 fxuprilim。
将指定进程和 LWP 的用户优先级设置为 fxupri。
[-r res] 将指定进程和 LWP 的时间量程设置为 tqntm。您可以按照下面的解释有选择地指定精度。
实时类为那些需要快速和确定响应的进程提供固定优先级优先调度策略,以及对调度优先级的绝对用户/应用程序控制。如果系统中配置了实时类,它会对系统上最高范围的调度优先级具有独占控制。这可以确保在属于任何其他类的任何进程之前为可运行实时进程提供 CPU 服务。
实时类拥有一定范围的实时优先级 (rtpri) 值,这些值可以分配给该类中的进程。实时优先级的范围从 0 到 x,其中 x 值是可配置的,可以通过以下命令为已经配置了实时调度程序的特定安装显示该值:
priocntl -l
实时调度策略是固定优先级策略。实时进程的调度优先级从不更改,除非用户/应用程序明确要求更改进程的 rtpri 值。
对于实时类中的进程,rtpri 值实际上相当于进程的调度优先级。rtpri 值完全决定实时进程相对应其类内的其他进程的调度优先级。rtpri 数值越大,表示优先级越高。因为实时类控制着系统中最高范围的调度优先级,可以保证具有最高 rtpri 值的可运行实时进程始终被选择在系统中的任何其他进程之前运行。
除了提供对优先级的控制之外,priocntl 还提供对分配给实时类中进程的时间量程长度的控制。时间量程值指定进程可运行的最长时间,假定进程未完成,或进入一个资源或事件等待状态 (sleep)。请注意,如果其他进程成为优先级更高的可运行进程,当前运行的进程可以在用完其全部时间量程前被取代。
命令
priocntl -d [-i idtype] [idlist]
显示由 idtype 和 idlist 指定的集合中每个实时进程的实时优先级、时间量程(毫秒精度)以及时间量程信号值。
-p、-t [-r] 和 -q 选项组合可与 priocntl -s 或 priocntl -e 共同用于实时类。如果省略某个选项且进程当前是实时的,关联参数不会受到影响。如果将进程的类从某些其他类更改为实时类时省略某个选项,关联参数会设置为缺省值。rtpri 的缺省值是 0,时间量程的缺省值取决于 rtpri 的值和系统配置;请参见 rt_dptbl(4)。
使用 -t tqntm 选项时,您可以选择性地使用 -r res 选项指定精度。(如果不指定精度,系统会假定其为毫秒精度。)如果指定 res,其必须是 1 到 1,000,000,000(包括)之间的正整数,使用的精度是 res 的倒数(以秒为单位)。例如,指定 -t 10 -r 100 会将精度设置为百分之一秒,得到的时间量程长度为 10/100 秒(十分之一秒)。尽管可以指定更高的精度(纳秒),但是时间量程长度会由系统向上舍入到系统时钟精度的下一个整数倍。将时间量程设置为零的请求,或量程大于(通常非常大)特定于实现的最大量程,都会导致错误。
实时时间量程信号可以用于通知失控实时进程有关时间量程消耗的情况。那些由实时时间量程信号监视的进程,在时间量程到期时会收到配置的信号。时间量程信号 tqsig 的缺省值 (0) 表示不发出任何信号。正值表示发出由值指定的信号。与 kill(1) 和其他应用于信号的命令相似,-q tqsig 选项也能处理以符号方式命名的信号,如 XCPU 或 KILL。
为了将进程的类(从任何其他类)更改为实时类,调用 priocntl 的用户必须拥有超级用户特权。为了更改实时进程的 rtpri 值或时间量程,调用 priocntl 的用户必须既是超级用户,或者该用户当前必须在实时类(作为实时进程运行的 shell)中,且具有与目标进程的实际或有效用户 ID 匹配的实际或有效用户 ID。
实时优先级、时间量程和时间量程信号将在 fork(2) 和 exec(2) 系统调用中继承。在 exec(2) 系统调用中通过用户定义的信号处理程序使用时间量程信号时,新映像必须在时间量程到期前安装合适的用户定义的信号处理程序。否则会导致不可预期的行为。
分时调度策略是为在具有各种 CPU 消耗特征的进程中公平有效地分配 CPU 资源而提供的。分时策略的目标是为交互式进程提供快速响应时间,为计算密集型 (CPU-bound) 作业提供很好的吞吐量,同时提供对调度的一定程度的用户/应用程序控制。
分时类拥有一定范围的分时用户优先级 (tsupri) 值,这些值可以分配到该类中的进程。用户优先级的范围是从 -x 到 +x,其中 x 值是可配置的。可通过使用以下命令显示特定安装的范围:
priocntl -l
用户优先级的目的是提供对分时类中进程调度的一定程度的用户/应用程序控制。增加或降低分时类中进程的 tsupri 值会增加或降低进程的调度优先级。但是不保证具有较高 tsupri 值的分时进程会在具有较低 tsupri 值的进程之前运行。这是因为 tsupri 值只是用于决定分时进程调度优先级的一个因素。系统可以根据其他因素(如最近的 CPU 使用情况)来动态调整分时进程的内部调度优先级。
除了在系统范围内对用户优先级(以 priocntl -l 显示)作出限制外,还有每个进程的用户优先级限制 (tsuprilim),它指定可为给定进程设置的最大 tsupri 值。
命令
priocntl -d [-i idtype] [idlist]
显示 idtype 和 idlist 指定的集合中每个分时进程的用户优先级和用户优先级限制。
任何分时进程都可降低自己的 tsuprilim(或具有相同用户 ID 的其他进程的该值)。只有具有超级用户特权的分时进程可以提高 tsuprilim。将进程的类从其他类更改为分时类时,需要超级用户权限才能将初始 tsuprilim 设置为一个大于零的值。
任何分时进程都可以将自己的 tsupri(或具有相同用户 ID 的其他进程的该值)设置为小于等于进程的 tsuprilim 的任何值。尝试将 tsupri 设置为高于 tsuprilim(和/或将 tsuprilim 设置为低于 tsupri)会导致 tsupri 被设置为等于 tsuprilim。
-m 和 -p 选项的任何组合都可以与 priocntl -s 或 priocntl -e 共同用于分时类。如果省略某个选项且进程当前是分时的,关联参数通常不会受到影响。例外情况是,省略 -p 选项且使用 -m 将 tsuprilim 设置为低于当前的 tsupri 时。这种情况下,tsupri 会设置为等于正在设置的 tsuprilim。如果将进程的类从某些其他类更改为实时类时省略某个选项,关联参数会设置为缺省值。tsuprilim 的缺省值是 0,tsupri 的缺省值是将它设置为等于正在设置的 tsuprilim。
分时用户优先级和用户优先级限制将在 fork(2) 和 exec(2) 系统调用中继承。
交互式调度策略是为在具有各种 CPU 消耗特征的进程中公平有效地分配 CPU 资源而提供的,同时为用户交互提供良好的响应速度。交互式策略的目标是为交互式进程提供快速响应时间,为计算密集型 (CPU-bound)作业提供很好的吞吐量。交互式类中进程优先级的更改方式与分时类相同,但是修改后的优先级可以继续调整,以为用户交互提供快速响应速度。
交互式用户优先级限制 iaupri 等效于 tsupri。交互式每进程的用户优先级 iauprilim 等效于 tsuprilim。
将为设置了 iamode(“交互模式”)位的交互式类进程提供优先级增加值 10,在进行计算时(即,每次调整进程的优先级时)该值将分解为进程的用户模式优先级。此功能由 X 窗口系统使用,它将为在当前活动窗口内运行的那些进程设置此位,以便为进程提供更高优先级。
公平份额调度策略对项目中的系统 CPU 资源进行公平分配,而不考虑它们拥有的进程数量。每个项目都会得到一定的“份额”,用来控制他们对 CPU 资源的权利。系统会根据时间记录资源使用情况,这样,相对于其他项目,使用多的权利会被减少,而使用少的权力则会被增加。根据进程所有者的权利,在进程中调度 CPU 时间,与各个项目拥有的进程数量无关。
FSS 调度类支持每进程的用户优先级和用户优先级限制的概念,从而与分时调度程序兼容。公平份额调度程序尝试在整个用户优先级范围内提供平均分级效果。fssupri 值为负的进程接收时间分片的频率低于正常,而 fssupri 值为正的进程接收时间分片的频率高于正常。请注意,用户优先级不会影响份额。也就是说,更改进程的 fssupri 值不会影响其项目的整体 CPU 使用情况,后者通常与该项目相对于其他项目分配的份额量有关。
公平份额类中的进程优先级的更改方式与分时类相同。
对于要求系统不动态调整调度优先级且用户/应用程序可以控制调度优先级的那些进程,固定优先级类为它们提供固定优先级优先调度策略。
缺省情况下,固定优先级类与分时类的调度优先级范围相同。固定优先级类拥有一定范围的固定优先级用户优先级 (fxupri) 值,这些值可以分配给类中的进程。用户优先级范围从 0 到 x,其中 x 值是可配置的。可通过使用以下命令显示特定安装的范围:
priocntl -l
用户优先级的目的是提供对固定优先级类中进程调度的一定程度的用户/应用程序控制。对于固定优先级类中的进程,fxupri 值实际上等效于进程的调度优先级。fxupri 值可完全决定固定优先级进程相对于其类中其他进程的调度优先级。fxupri 数值越大,表示优先级越高。
除了在系统范围内对用户优先级(以 priocntl -l 显示)作出限制外,还有每个进程的用户优先级限制 (fxuprilim),它指定可为给定进程设置的最大 fxupri 值。
任何固定优先级进程都可降低自己的 fxuprilim(或具有相同用户 ID 的其他进程的该值)。只有具有超级用户权限的进程才可以提高 fxuprilim。将进程的类从其他类更改为固定优先级类时,需要超级用户权限才能将初始 fxuprilim 设置为大于零的值。
任何固定优先级进程都可以将自己的 fxupri(或具有相同用户 ID 的其他进程的该值)设置为小于等于进程 fxuprilim。尝试将 fxupri 设置为高于 fxuprilim(和/或将 fxuprilim 设置为低于 fxupri),会导致 fxupri 设置为等于 fxuprilim。
除了提供对优先级的控制之外,priocntl 还提供对固定优先级类中分配给进程的时间量程长度的控制。时间量程值指定进程在让出 CPU 之前可运行的最长时间,假定进程未完成,或进入一个资源或事件等待状态 (sleep)。请注意,如果其他进程成为优先级更高的可运行进程,当前运行的进程可以在用完其全部时间量程前被取代。
任何 -m、-p 和 -t 选项组合都可以与 priocntl -s 或 priocntl -e 共同用于固定优先级类。如果省略某个选项且进程当前是固定优先级的,关联参数通常不会受到影响。例外情况是,省略 -p 选项且使用 -m 将 fxuprilim 设置为低于当前的 fxupri 时。这种情况下,fxupri 会设置为等于正在设置的 fxuprilim。如果将进程的类从某些其他类更改为固定优先级类时省略某个选项,关联参数会设置为缺省值。fxuprilim 的缺省值为 0。fxupri 缺省值是将它设置为等于正在设置的 fxuprilim 值。时间量程的缺省值由 fxupri 和系统配置决定。请参见 fx_dptbl(4)。
固定优先级类中的进程时间量程的更改方式与实时类相同。
固定优先级用户优先级、用户优先级限制和时间量程将在 fork(2) 和 exec(2) 系统调用中继承。
下面是实时类的示例:
示例 1 设置类
以下示例将由 idtype 和 idlist 选择的任意非实时进程的类设为实时,并将它们的实时优先级设置为缺省值 0。实时类中当前任意进程的实时优先级都不会受到影响。所有指定进程中的时间量程都设置为 1/10 秒。
example% priocntl -s -c RT -t 1 -r 10 -i idtype idlist
示例 2 执行实时类中的命令
以下示例以实时优先级 15 和时间量程 20 毫秒执行实时类中的 command。
example% priocntl -e -c RT -p 15 -t 20 command
示例 3 以指定量程信号执行实时类中的命令
以下示例实时优先级 11、时间量程 250 毫秒和指定实时量程信号 SIGXCPU 执行实时类中的 command:
example% priocntl -e -c RT -p 11 -t 250 -q XCPU command
下面是分时类的示例:
示例 4 设置非分时进程的类
以下示例将由 idtype 和 idlist 选择的任意非分时进程的类设置为分时,并将它们的用户优先级限制和用户优先级设置为 0。已经位于分时类中的进程不受影响。
example% priocntl -s -c TS -i idtype idlist
示例 5 执行分时类中命令
以下示例在分时类中使用参数 arguments 执行 command,用户优先级限制为 0,用户优先级为 -15:
example% priocntl -e -c TS -m 0 -p -15 command [arguments]
示例 6 执行固定优先级类中的命令
以下示例执行固定优先级类中的命令,用户优先级限制为 20,用户优先级为 10,时间量程为 250 毫秒:
example% priocntl -e -c FX -m 20 -p 10 -t 250 command
示例 7 更改指定 LMP 的优先级
以下示例设置进程 500 中的 LWP 5 的用户优先级限制为 20,用户优先级为 15:
example% priocntl -s -m 20 -p 15 500/5
将返回以下退出值:
对于选项 -d、-l 和 -s:
操作成功。
错误条件。
对于选项 -e:
已执行命令的“退出状态”为“返回”时说明操作成功。否则,
不能以指定优先级执行命令。
有关下列属性的描述,请参见 attributes(5):
|
kill(1)、nice(1)、ps(1)、dispadmin(1M)、exec(2)、fork(2)、priocntl(2)、fx_dptbl(4)、process(4)、rt_dptbl(4)、attributes(5)、zones(5)、FSS(7)
priocntl 打印以下错误消息:
不存在指定的进程。
-s 选项正用于设置参数,-c class 选项不存在,并且指定了多个类中的进程。
使用了无法识别或无效的选项或选项参数。