Board logo

标题: Unix/Linux 系统自动化管理 CPU 管理篇(2) [打印本页]

作者: look_w    时间: 2018-6-13 15:09     标题: Unix/Linux 系统自动化管理 CPU 管理篇(2)

使用 AIX 系统工具分析处理器的工作状态在了解当前环境的可用 CPU 资源以后,可以对系统监控的对象和方法进行规划。多数情况下,操作系统提供的命令输出提供逻辑处理器 (Logical CPU) 的信息。在 IBM eServer pSeries 服务器和 BladeCenter JS 刀片服务器中,逻辑处理器通常通过并行多线程技术实现。下文是对该技术在 AIX 系统中应用的介绍。
并行多线程的查询和设置并行多线程 (Simultaneous Multi-threading,简称 SMT) 是一种基于超标量 (superscalar) 体系结构处理器的技术,允许多个独立的线程在一个时钟周期内对多个功能处理单元 (Functional Unit) 发出指令。通常情况下,线程和功能处理单元的绑定是完全动态的。使用这项技术可以较明显的提高处理器的的实际利用率,进而表现出更强的运算性能。在 AIX 操作系统上,我们可以通过 smtctl 命令来查询和设置并行多线程的运行状态。
清单 5. 运行 smtctl 查询处理器对 SMT 技术的支持和当前的设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ smtctl

This system is SMT capable.
SMT is currently enabled.
SMT boot mode is not set.
SMT threads are bound to the same physical processor.

proc0 has 2 SMT threads.
Bind processor 0 is bound with proc0
Bind processor 1 is bound with proc0


proc2 has 2 SMT threads.
Bind processor 2 is bound with proc2
Bind processor 3 is bound with proc2


proc4 has 2 SMT threads.
Bind processor 4 is bound with proc4
Bind processor 5 is bound with proc4


proc6 has 2 SMT threads.
Bind processor 6 is bound with proc6
Bind processor 7 is bound with proc6




命令的结果说明了当前系统支持 SMT 技术,而且当前正在使用。后面的多行输出中详细说明了逻辑处理器和虚拟处理器之间的对应关系。系统中有四个可用的虚拟处理器 (Virtual CPU),因为开启了 SMT (Simultaneous MultiThreading) 功能,可以识别出八个逻辑上的虚拟处理器 (Logical CPU)。
在缺省情况下,系统中的 SMT 应被使用以增强性能。当用户需要调整系统的 SMT 设置时,同样可以使用 smtctl 命令。具体参数请查阅命令说明。在负载分区情况下,SMT 设置不允许被直接修改。用户需要对负载分区的宿主机修改 SMT 配置,这会对该系统中的所有负载分区生效。而在微分区环境下,用户可以自主调整并行多线程的配置。
系统处理器负载的查询和分析在了解系统中并行多线程的设置以后,用户需要得到不同时间段内处理器的使用状态。为此 AIX 系统提供了丰富的系统接口。用户可以根据不同的情况选用他们,检查和判断系统中 CPU 的运行状态。本文仅以 lparstat 和 mpstat 为例进行说明。
lparstat 命令
上文的例子代码使用了 lparstat。这个命令可以在各种系统环境,如负载分区中使用,得到当前系统的配置和部分运行状态,其中的部分内容与 CPU 直接相关。在 AIX 6.1 操作系统中,lparstat 也可以用来显示负载分区 (Workload Partition) 的信息,比如负载分区使用的 CPU 资源。用户可以查阅手册得到该命令的详细说明。
lparstat 命令非常适合获得当前系统或分区的配置信息,但是用来监控 CPU 负载有两个主要的不足。首先这条命令不能得到单个处理器的负载情况,所以不能用来直接确定多处理器负载不均的问题;其次这条命令在 AIX 6.1 系统上的支持的参数与 5.3 相比变化较大。所以本文主要介绍 mpstat 命令,用于检测 AIX 系统中的 CPU 状态。
mpstat 命令
与 lparstat 命令相似,mpstat 可以自动识别当前的系统设置,比如是否开启了 SMT 功能。与 lparstat 不同的是,mpstat 可以得到详细的单个处理器的运行状况。
图 1. 在没有微分区 (Micro Partition) 的系统上运行 mpstat 获得处理器负载该命令检测系统中全部处理器的利用情况,并且给出各项的总和。下面是几个常用的输出项
通常情况下,CPU0 的负载会略高于其他处理器。在其他处理器负载相差不多而且 CPU0 的负载不太高的情况下,可以认为是正常的情况。反之则可能存在系统或应用程序上的分配问题。
在显示的内容中,如果 wa 的值过高,则表示应用程序有过多的时间等待 IO 操作,外存的访问存在性能瓶颈。如果 id 的值如果持续低于 30,而且 wa 不高,则表明 CPU 比较繁忙 , 可以考虑对应用程序进行优化。如果是微分区或负载分区系统中,应当考虑是否需要分配更多的处理器资源。
mpstat 命令提供了参数,可以周期性的检测并汇报系统状态。在 mpstat 命令的输出满足用户需要的情况下,用户可以指定合适的间隔并以后台运行 mpstat,以实现对系统 CPU 的持续监控。下面的命令会在一天的时间内每隔半小时自动搜集一次系统信息。
mpstat 1800 48 > /tmp/mpstat_output &
用户可以有策略的检查输出文件中的内容,以确定系统的运行状态。
捕捉处理器异常状态的代码示例下面一段 Perl 代码测试于 AIX5.3 和 6.1 系统,首先运行系统命令 smtctl 检查并行多线程技术的开启状态,然后依次检查 mpstat 命令输出文件中的每行内容,并把可能表示异常情况的行存入一个数组。
清单 6. 捕捉处理器异常状态的代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
my $output = `smtctl`;
# 如果 SMT 技术没有被激活,通常我们需要激活它
if ($output =~ m/This system is SMT capable.*SMT is currently disabled/)
{
   warn "This system can have SMT enabled, but has not. This means potential performance
    issue in some applications. Command smtctl can be used to enable SMT. Notice that
     change can NOT be directly done on workload partition.\n";
}

# 解析文本文件 /tmp/mpstat_output。用户应该先运行 mpstat 并把输出重定向来得到这个文件。
my $file = '/tmp/mpstat_output';
open (FILE, "<$file") or die "No mpstat output file available.
Please run mpstat first.\n";
my @output = <FILE>;
close FILE;
my @notice;
foreach my $line (@output)
{
   chomp $line;
# 跳过空行和提示行
if ($line !~ /\S+/) {next;}
   if ($line =~ m/System configuration/ || $line =~/cpu\s+min/) {next;}

   # 删除每行起始的空格
   $line =~ s/^\s+//g;
   my ($cpu, $min, $maj, $mpc, $int, $cs, $ics, $rq, $mig, $lpa, $sysc, $us, $sy,
    $wt, $id, $pc);
       = split /\s+/, $line;
   # 通常系统中不应有过长的运行队列,过多的线程迁移,过长的等待时间或过少的空闲时间
if ($rq > 5 || $mig > 5 || $wt > 5 || $id < 10)
   {
       push @notice, $line;
}
}




用户可以根据自己系统的版本对例子代码进行修改,并且选择如何处理这些异常。比较常见的处理有把异常内容在标准输出设备上输出,或者发邮件给系统的管理员。为了能够自动的实现这一功能,用户也可以把修改过的脚本定义成系统的 crontab 任务,实现在一定时间段内的定时监控。在发现了异常状态以后,通常需要确定异常状态是否与特定的进程或程序相关,再进一步对操作系统或特定进程进行判断。在对 AIX 系统中的 CPU 管理进行介绍以后,下文的讨论会以 Linux 为主。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0