bindprocessor 命令

用途

将进程的内核线程绑定至处理器或取消绑定至处理器。

语法

bindprocessor 进程 [ ProcessorNum ] | -q | -u 进程{ProcessID [ProcessorNum] | -u ProcessID | -s SmtSetID | -b bindID ProcessorNum | -q }

描述

bindprocessor 命令绑定或取消绑定进程的内核线程,或列出可用的处理器。 Process 参数是将要绑定或取消绑定线程的进程的进程标识, ProcessorNum 参数是要使用的处理器的绑定 CPU 标识。 如果 ProcessorNum 参数被省略,那么进程被绑定至随意选择的处理器。

如果同时启用多线程,那么 bindprocessor 命令会将物理处理器的每个硬件线程列示为单独的处理器。 这使软件线程能够分别绑定到每个硬件线程上。 POWER5 处理器上有两个硬件线程, 它们称为 主硬件线程辅助硬件线程SmtSetId 参数是一个硬件线程的同时多线程集标识值,对于主硬件线程,该参数定义为 0,对于辅助硬件线程,该参数定义为 1-s 标志可用于列示所有主硬件线程或所有辅助硬件线程的可用处理器。 -b 标志列出单个物理处理器上的所有可用硬件线程,其中 ProcessorNum 参数是该处理器上主硬件线程或辅助硬件线程的绑定 CPU 标识。 请参阅 一般编程概念: 编写和调试程序 中的 同时多线程 ,以获取更多信息。

如果目标进程具有 资源连接,那么 bindprocessor 命令将失败。

使用处理器绑定的程序应该变为意识到动态逻辑分区(DLPAR)。

重要的是要理解进程本身不能被绑定,而是它的内核线程可被绑定。 一旦内核线程被绑定,它们总是被调度为在所选的处理器上运行,直到它们之后被取消绑定。 创建了新的线程后,它与创建程序具有相同的绑定属性。 此应用于由 fork 子例程创建的新进程中的初始线程:新的线程继承了被称为 fork 的线程的绑定属性。 当调用 exec 子例程,线程属性会保留为未更改。

bindprocessor 命令的 -q 标志列出可用的绑定 CPU 标识:可以将给定的逻辑号用作 ProcessorNum 参数的值。 -u 标志取消绑定进程的线程,允许它们在任何处理器上运行。

当同时启用多线程时, bindprocessor 命令的 -s 标志允许您通过单独列出处理器来将应用程序的线程绑定到单独的物理处理器。 如果要将应用程序的所有线程绑定到同一物理处理器的硬件线程,那么 -b 标志很有用。

注意:
  1. bindprocessor 命令适用于多处理器系统。 虽然它也可在单处理器系统上运行,但绑定对此种系统不起作用。
  2. 您需要 root 用户权限才能在您不拥有的进程中绑定或取消绑定线程。
  3. 如果尝试从用户空间绑定内核进程 (例如 swappersched ) ,那么操作将失败并返回 EPERM 错误代码。 可通过在进程结构中查找 SSCHEDPROC 标志来确定哪些内核进程将失败。 如果设置了 SSCHEDPROC 标志,那么绑定内核进程将失败。

标志

描述
-b 将某个应用程序的所有线程绑定到同一个物理处理器的硬件线程上。
-q 显示可用的处理器。
-s 通过分别列出各处理器,将某个应用程序的所有线程绑定到不同的物理处理器上。
-U 取消绑定指定进程的线程。

示例

  1. 要查看哪些处理器可用 (可能的 ProcessorNum),请输入:
    bindprocessor -q
    对于具有四个处理器的系统,输出与以下内容相似:
    The available processors are: 0 1 2 3
  2. 要将进程 19254 中的线程绑定到处理器 1 ,请输入:
    bindprocessor 19254 1
  3. 要查看是主硬件线程的所有可用处理器,请输入:
    bindprocessor -s 0
    对于启用了同时多线程的四处理器系统,输出与以下内容相似:
    The available processors are: 0 2 4 5
    要查看是辅助硬件线程的所有可用处理器,请输入:
    bindprocessor -s 1
    输出类似于:
    The available processors are: 1 3 6 7
    当使用 smtctl 命令禁用同时多线程时,或者在具有不支持同时多线程的处理器的系统上,输出将为:
    bindprocessor -s 0
    
    The available processors are: 0 1 2 3
    
    bindprocessor -s 1
    
    SmtSetId 1 is not available
  4. 要查看有一个硬件线程的绑定 CPU 标识为 0 的物理处理器上的所有可用绑定 CPU 标识,请输入:
    bindprocessor -b 0
    输出类似于:
    The available processors are: 0 1
    再输入以下命令:
    bindprocessor -b 1
    也将产生相同的输出结果。

文件

描述
/usr/sbin/bindprocessor 包含 bindprocessor 命令。