aix常见故障处理_AIX上的处理器关联

在将应用程序部署到生产环境中时,无论使用什么系统以及进行什么功能和回归测试,仍然会遇到不可避免的错误。 在100%的时间使用CPU时,您可能会死机,或者在几个线程被锁定而从不释放资源的情况下,您可能会陷入死锁。 在某些情况下,即使在多处理器体系结构和快速硬件上,您也会看到应用程序中非常古老的挂起(甚至几十年前)。

在这种情况下,来自应用程序的错误日志或来自应用程序转储的堆栈跟踪通常很少或根本没有帮助查明问题产生的确切代码行。 即使重新创建了问题,您也可能无法收集有关该问题的太多信息。

通常,您能做的最好的事情就是重现问题并找出失败的代码。 在最坏的情况下,即使在重新创建确切的生产环境之后(由于系统和硬件配置的潜在巨大负担,这非常困难),您也可能找不到多处理器环境中挂起问题的根本原因。

一种可以为您或面临此问题的客户提供帮助的方法是使用操作系统上可用的处理器相似性设置方法。

将进程绑定到AIX上的可用CPU

您可以在程序中使用AIX®平台上可用的bindprocessor命令或AIX平台上可用的bindprocessor API。 bindprocessor命令将进程的内核线程绑定或bindprocessor绑定到处理器。

您还可以使用bindprocessor命令列出可用的处理器。 唯一需要输入的是要绑定或取消绑定线程的进程的进程标识符。 一旦绑定了进程的内核线程,它们将始终被安排为在所选处理器上运行。

bindprocessor命令的语法为:

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

表1中使用了以下标志:

表1.标志
样例代码 描述
-b 该标志将应用程序的所有线程绑定到同一物理处理器的硬件线程。
-q 此标志显示可用的处理器。
-u 该标志取消绑定指定进程的线程。

假设进程p1在多CPU硬件上运行。 您需要将进程绑定到CPU1,并使用ps命令检查状态。

  1. 要查询机器上的可用处理器,请尝试:
    # bindprocessor -q
    The available processors are:  0 1
  2. 将进程ID为14662的p1进程绑定到处理器1:
    # bindprocessor 14662 1
  3. 检查以确保该进程绑定到指定的处理器:
    #ps -emo THREAD | grep p1
      USER   PID  PPID   TID ST CP PRI SC    WCHAN        F       TT     BND COMMAND
      root  4460  5428    -  A  0  60  7  f0145c10   240001    -    - /usr/sbin/rpc.mountd
      root  4710  5428    -  A  0  60   4     *       240001    -   - /usr/sbin/tftpd -n
      root 14662 10566    -  A 120 126 0    -     200001   pts/0   1        ./p1
  4. 取消绑定过程:
    # bindprocessor -u 14662
  5. 检查以上命令的结果:
    # ps -emo THREAD | grep p1
      USER   PID  PPID   TID   ST CP PRI   SC   WCHAN      F     TT        BND   COMMAND
      root  12672  10566   -    A  1 60    1  50a05e84   200001  pts/0      -      grep p1
      root  14662 10566  -    A  78 111  0      -             200001  pts/0    -     ./p1

AIX上可用的API

如果要为绑定到指定处理器的二进制文件提供可调参数, bindprocessor也是AIX提供的子例程。 要阅读有关bindprocessor子例程的更多详细信息,请参阅AIX手册页上的《 IBM AIX基本操作系统和扩展技术参考》 。

下面的清单1显示了bindprocessor子例程的bindprocessor

清单1. Bindprocessor子例程
#include <stdio.h> 
#include <unistd.h>
#include <sys/processor.h>

int main(int argc, char ** argv)
{
        long noProcessorConf,noProcessorOnline;
        int bindparameter;
        int retValue = 0;
        int pid;

        pid = getpid();

        /*_SC_NPROCESSORS_CONF Number of processors configured.
          _SC_NPROCESSORS_ONLN Number of processors online.*/

        noProcessorConf = sysconf(_SC_NPROCESSORS_CONF);
        noProcessorOnline = sysconf(_SC_NPROCESSORS_ONLN);

        if(-1 == noProcessorConf || -1 == noProcessorOnline )
        {
                printf("sysconf API failed\n");
        }

        if(-1 != noProcessorConf || -1 != noProcessorOnline )
        {
            printf("Number of Processor %d Processor Online %d\n", noProcessorConf, 
               noProcessorOnline);

            if(noProcessorConf > 1) /* This is multi processor configured environment */
             {
                    bindparameter = atoi(argv[1]);

                    if(bindparameter > noProcessorConf)
                    {
                        printf("Processor parameter specified is out of configured 
                           processors\n");
                    }
                    else
                    {
                            retValue = 0;
                            retValue = bindprocessor(BINDPROCESS, pid, bindparameter);
                            if(-1 == retValue)
                                    printf("Failed to set the process affinity\n");
                            if(0 == retValue)
                                printf("Process affinity set to specified 
                                   CPU %d\n",bindprocessor);
                    }
             }
       }
        while(1){};
}

要编译先前的程序,请输入:

# cc â????o setpb setpb.c

下面显示了运行以上已编译代码的setpb程序二进制文件的结果。

要将setpb绑定到CPU 1,请输入:

# setpb 1

结果是:

Number of Processor 2 Processor Online 2
Process affinity set to specified CPU 1

要查看setpb是否绑定到CPU 1,请输入:

# ps -emo THREAD | grep setpb

结果是:

USER  PID    PPID    TID     ST CP PRI   SC    WCHAN        F      TT      BND   COMMAND
Root 15080   10566   -       A  85 102   0      -           200001 pts/0    0   setpb 1

使用下面的参数运行setpb程序,因此它尝试绑定到0号CPU。

# setpb 0

结果是:

Number of Processor 2 Processor Online 2
Process affinity set to specified CPU 0

检查setpb是否绑定到0号CPU的命令是:

# ps -emo THREAD | grep setpb

结果是:

USER  PID    PPID    TID     ST CP PRI   SC    WCHAN        F      TT      BND   COMMAND
Root 15082   10566   -       A  99 109   0      -           200001 pts/0    0   setpb 0

使用以下参数运行setpb程序,使其尝试绑定到4号CPU。计算机上不存在CPU 4,因此它将显示以下错误消息并运行默认的可用处理器。

# setpb 4
Number of Processor 2 Processor Online 2
Processor parameter specified is out of configured processors

要检查setpb是否绑定到CPU4,请输入:

# ps -emo THREAD | grep setpb

显示以下内容:

USER  PID    PPID    TID     ST CP PRI   SC    WCHAN        F      TT      BND   COMMAND
Root 15084   10566   -       A  87 103   0      -           200001 pts/0    0   setpb 4

翻译自: https://www.ibm.com/developerworks/aix/library/au-processinfinity.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值