手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

plgrp(1)

名称

plgrp - 观察和影响线程的主 lgroup 和 lgroup 关联

用法概要

plgrp [-F] [-h] pid | core [/lwps] ...
plgrp [-F] -i pid[/lwps] ...
plgrp [-F] -a lgroup_list pid[/lwps] ...
plgrp [-F] [-I default | none |future] 
     -H lgroup_list pid[/lwps] ...

plgrp [-F] [-I default | none |future] -H lgroup_list -e command [arguments]
plgrp [-F] [-I default | none | future] 
     -A lgroup_list/none | weak | strong [,...] pid[/lwps] ...

plgrp [-F] [-I default | none | future] 
     -A lgroup_list/none | weak |strong [,...] -e command [arguments]

plgrp [-F] -I default | none | future pid[/lwps]

plgrp [-F] -I default | none | future -e command [arguments] ...

描述

plgrp 为一个或多个进程、线程或 LWP 显示或设置主 lgrouplgroup 关联。

lgroup 表示彼此之间最多相隔某个间隔(等待时间)的 CPU 和内存之类的硬件设备的集合。系统中的每个 lgroup 由一个唯一的 lgroup ID 来标识。lgroups 组织到分层结构中,以便于查找最近的资源。有关 lgroupslgroup 分层结构的更多信息,请参见 lgrpinfo(1)。

缺省情况下,在创建每个线程时都会为其分配一个主 lgroup。当系统需要为线程分配 CPU 或内存资源时,它将从线程的主 lgroup 中搜索 lgroup 分层结构以查找离线程的主 lgroup 最近的可用资源。

通常,线程的主 lgroup 是与线程的关联性最强的 lgroup。最初,系统为每个线程选择一个主 lgroup,但将该 lgroup 的线程关联保留设置为 none。如果一个线程为其处理器集合中的某个 lgroup(非其主 lgroup)设置了更强的关联,则只要该线程没有绑定到某个 CPU,它将重新认该 lgroup 为主。如果线程的主 lgroup 的关联(如果有)被删除(设置为 none),则线程会重新认其处理器集中具有次高关联的 lgroup 为主。

lgrp_affinity_set(3LGRP) 中详细介绍了不同级别的 lgroup 关联及其语义。

用法

指定 lgroups

lgroup_list 是包含以下一项或多项内容的逗号分隔列表:


- lgroup_ID
- Range of lgroup_IDs specified as
 <start lgroup_ID>-<end lgroup_ID>
- all
- root
- leaves

all 关键字表示系统中的所有 lgroup ID。root 关键字表示根 lgroup 的 ID。leaves 关键字表示所有 leaflgroups(即没有子项的 lgroups)的 ID。

指定进程和线程

plgrp 接受一个或多个以空格分隔的进程或线程作为参数。可以用与 proc(1) 工具类似的方式指定进程和线程。进程 ID 可以指定为整数 pid/proc/pid。使用 /proc/pid 时,可以使用 Shell 扩展来指定进程。例如,可以使用 /proc/* 指定系统中的所有进程。如果只是单独给定了进程 ID,则会将该进程的所有线程提供为 plgrp 的参数。

可以显式指定线程,将其进程 ID 和线程 ID 分别指定为 pid/lwpid。通过使用连字符 (-) 和逗号 (,),一次可以选择一个进程的多个线程。例如,pid/1,2,7-9pid 作为其进程 ID,并指定进程的线程 1、2、7、8 和 9。

选项

支持以下选项:

–a lgroup_list

为指定 lgroup_list 显示指定进程或线程的 lgroup 关联。

–A lgroup_list/none|weak|strong[,...]

为指定 lgroup_list 设置指定进程或线程的关联。

可以给定以逗号分隔的 lgroups/affinity 分配列表来一次设置多个关联。

–F

通过抓取目标进程来强制执行,即使另一进程已掌握了控制权。使用 –F 标志时应谨慎。在一个被调试的进程上施加两个控制进程可能会导致混乱。仅当主控制进程(通常是调试器)已停止了被调试的进程,并且在应用该 proc 工具的过程中主控制进程未在执行任何操作,才能保证安全。有关更多详细信息,请参见“警告”部分。

–e

创建一个新进程,将 plgrp 应用到该进程,然后执行指定的命令和参数。

–h

获取指定进程和/或线程的主 lgroup。如果没有指定任何选项,则此选项是缺省值。

–H lgroup_list

设置指定进程和线程的主 lgroup

这将为目标 lgroup 设置一个很强的关联以便让线程重新认主。如果指定了多个 lgroup,则 plgrp 将尝试以循环方式让线程认 lgroup 为主。

–i

显示指定进程或线程的 lgroup 关联继承。

–I default | none | future

设置指定进程或线程的 lgroup 关联继承。

操作数

支持下列操作数:

lwps

指定线程。请参见“用法”部分。

pid

指定进程 ID。请参见“用法”部分。

示例

示例 1 获取 Shell 的主 lgroup

以下示例获取 Shell 的主 lgroup


% plgrp $$
PID/LWPID    HOME
3401/1        1
示例 2 将多个线程的主 lgroup 设置为根 lgroup

以下示例将多个线程的主 lgroup 设置为根 lgroup

% plgrp -H root `pgrep firefox`
     PID/LWPID    HOME
     918/1        1 => 0
     934/1        2 => 0
     934/2        1 => 0
     934/3        2 => 0
     934/625      1 => 0
     934/626      2 => 0
     934/624      2 => 0
     934/623      2 => 0
     934/630      1 => 0
示例 3 执行 plgrp,根 lgroup 为多个线程的主 lgroup

以下示例执行 firefox,根为多个线程的主 lgroup


% plgrp -H root -e /usr/bin/firefox

示例 4 获取 lgroups 0-2 的两个线程的关联

以下示例获取 lgroups 1–2 的两个线程的关联:


% plgrp -a 0-2 101398/1 101337/1
PID/LWPID    HOME  AFFINITY
101398/1        1     0-2/none
101337/1        1     0-2/none
示例 5 设置 lgroup 关联

以下示例设置 lgroup 关联:


% plgrp -A 0/weak,1/none,2/strong 101398
PID/LWPID    HOME       AFFINITY
101398/1        1 => 2     0,2/none => 2/strong,0/weak

退出状态

将返回以下退出值:

0

成功完成。

1

语法错. 没有更改任何内容。

2

发生非致命错误或中断。更改了一些内容。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
接口稳定性
请参见下文。

命令语法和输出格式是 "Ucommitted"(未确定)。

另请参见

lgrpinfo(1)madv.so.1(1)pmadvise(1)pmap(1)proc(1)ps(1)prstat(1M)lgrp_affinity_get(3LGRP)lgrp_affinity_set(3LGRP)lgrp_affinity_inherit_get(3LGRP)lgrp_affinity_inherit_set(3LGRP)lgrp_home(3LGRP)liblgrp(3LIB)proc(4)attributes(5)

警告

proc(1) 工具一样,plgrp 实用程序在检查其目标进程时会停止这些进程,如果调用该实用程序时使用了任何选项,则它会报告结果。

在某些情况下,进程可能会发生死锁。进程被停止后将无法执行任何操作。在生产环境中停止某个频繁使用的进程(即使仅停止很短时间)可能会导致严重的瓶颈,甚至导致这些进程挂起,使得用户无法使用这些进程。因此,应该避免在生产环境中停止 UNIX 进程。请参见 proc(1)

可以通过以下方法来识别由该工具停止的进程:发出以下命令

/usr/bin/ps -eflL

并在输出的第一列中查找 T。缺省情况下,某些进程(例如,sched)大多数情况下都可以显示 T 状态。