理解AIX上sar的输出


11

我正在尝试了解从SAR提取的一些数据。我对此有三个主要问题。最终,我想确定在服务器群集的每个采样间隔内有多少个CPU处于空闲状态。

  1. 许多CPU并没有出现在每个条目中。这是预料之中的,这到底是什么意思?与#2有关吗?
  2. 有未使用的行(CPU = U)。该文件说:“U指示系统范围未使用的容量”。我真的找不到“系统范围内未使用容量”的精确定义或任何定义。我不确定如何解释这样的行:“未使用的容量是70%空闲”。
  3. 最后,我不确定-or all线的计算方式。我认为这是所有CPU的平均值,但是当我在所有CPU上进行数学运算时,得到的答案与该行的答案截然不同。谁能确切告诉我该计算的内容?仔细研究有关SAR的相关问题,似乎system-wide空闲百分比是每个CPU的空闲百分比与“ physc”值的乘积之和。不幸的是,我没有physcor或entc%(假设有一个),因此无法使用自己的数据进行验证。如果是正确的话,是否意味着我需要这些physc值才能真正理解闲置百分比?

以下是一些我所看到的示例。这些都是同一天的。

CPU | Idle    CPU | Idle    CPU | Idle
----------    ----------    ----------
0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      12  | 0       12  | 38
10  | 33      16  | 12      16  | 37
11  | 64      20  | 3       20  | 42
12  | 6        U  | 95       U  | 97
13  | 6        -  | 15       -  | 85
14  | 6       
15  | 6       
16  | 12      
17  | 15      
18  | 62      
19  | 69      
20  | 7       
21  | 7       
22  | 6       
23  | 7       
 U  | 80       
 -  | 15       

case 1: avg(24): 22
case 2: avg(12): 42
case 3: avg(12): 48

此数据由运行的脚本生成:sar -P ALL 1 1然后运行awk命令。我对awk不好,但是这些显然是重要的部分:

过滤: /System|AIX|^$|%/ {next}

解析: {k=0;if(NR==7) k=1} {sub("^-", "all", $1); cpu=$(1+k); user=$(2+k); sys=$(3+k); io=$(4+k); idle=$(5+k)}

根据我对awk的了解很少以及从输出示例中看到的内容,这似乎是正确的。

如果我假设情况2的缺失值全为零,则平均值为21,这似乎与情况1一致。但是,如果我对情况3进行此假设,则得到24%,这与85%完全不符sar给出的总体CPU空闲百分比值。

这是一整天的捕获量(每30秒)的图表:

在此处输入图片说明

当“系统范围”空闲时间很少时,平均CPU空闲与“系统范围”空闲之间的相关性几乎是完美的。但是随着“系统范围内”的空闲时间增加,相关性变得越来越弱。在假设这些机器是确定性机器的情况下进行工作,这告诉我,我所拥有的数据并未提供完整的信息。但是我在乎多少呢?

我不完全理解为什么在每个点上都没有报告某些CPU,但是缺少的CPU没有如上例所示均匀分布。同样通过阅读本红皮书,我认为这些必须是逻辑CPU,并且没有physc数字,我认为这些值无济于事。我试图U在各种方程式中使用该值,但没有发现任何明智的方法。我什至还不清楚,总的闲置百分比是否可以按面值计算。

注意:从sar捕获此数据有问题,这对于#1是完全有效的答案,如果是这种情况,则应始终返回。


您正在运行什么命令来获取该输出?它看起来不像标准sar -P ALL输出。
瑞士人

@Swiss这来自我未编写的脚本。它先调用sar -P ALL 1 1然后使用awk来分解cpu编号,然后是用户,系统,IO等待和空闲百分比。我会在您的答案中添加更多信息。
JimmyJames

@Swiss我编辑了该示例,以更好地反映脚本的输出结果。
JimmyJames

您可以sar -P ALL直接提供的输出,而不是此脚本的输出吗?这是一个非标准的脚本,没有人看不到它就告诉你它的作用。
瑞士人

@瑞士不幸的是我不能。我可以看到脚本及其输出。我可以澄清的工作描述中是否缺少某些内容?
JimmyJames

Answers:


4

您提供的输出看起来与标准sar -P ALLsar -u输出不同。我不确定是否手动格式化它,或者是否正在通过其他工具运行它,但是我认为那里有足够的信息可以解决这个问题。

这是从手册页获得的重要信息 sar

注意:在SMP机器上,完全没有任何活动(每个字段为0.00)的处理器是禁用的(脱机)处理器。

由于您在集群中运行,因此假设您正在使用SMP计算机似乎很安全。

请注意,在示例2和3中,24个内核中只有12个正在报告统计信息。如手册页中所述,如果您假定这些内核已禁用,则统计信息有意义。

让我们如下更新数据,以指示已禁用的核心 -

0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      9   | -       9   | -
10  | 33      10  | -       10  | -
11  | 64      11  | -       11  | -
12  | 6       12  | 0       12  | 38
13  | 6       13  | -       13  | -
14  | 6       14  | -       14  | -
15  | 6       15  | -       15  | -
16  | 12      16  | 12      16  | 37
17  | 15      17  | -       17  | -
18  | 62      18  | -       18  | -
19  | 69      19  | -       19  | -
20  | 7       20  | 3       20  | 42
21  | 7       21  | -       21  | -
22  | 6       22  | -       22  | -
23  | 7       23  | -       23  | -

然后,我们可以使用以下内容来计算平均值(这是我写的一个快速的单行代码,我相信可以写出更好的东西。)

$ awk '{idle = $3; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 22.208333  Cores: 24
$ awk '{idle = $6; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 42.000000  Cores: 12
$ awk '{idle = $9; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 48.250000  Cores: 12

请注意,示例2和3中的核心数为12,其平均值与示例输出中看到的相符。

在您的第一种情况和第二种情况之间的某个时间点似乎已经禁用了一半的CPU内核。

关于您的问题的快速摘要:

  1. 数据丢失可能意味着处理器核心已被禁用。
  2. U在平均线比的不同U在手册页。该U手册页提到应该处理器ID列下显示出来。
  3. 您所提供的输出比标准不同的sar输出,所以不提供,以确定哪些足够的信息Uall平均线参考。不过,第一个数字似乎是活动内核上的空闲百分比。

“请注意,示例2和3中的核心数为12,其平均值与示例输出中看到的相符。” 抱歉,我可能不清楚,我是根据数字计算得出的平均值。那不是来自sar。该Uall值从SAR来为线条。根据我的理解,我在回答中将它们分开,是因为它们与cpu值根本不同。
JimmyJames

如果禁用了内核,为什么情况2的“系统范围”空闲时间比情况3少得多?我正在努力了解它们如何在相同的12 cpus上具有几乎相同的平均空闲时间,而整个系统的空闲时间却完全不同。
JimmyJames

我确实看到,当机器处于恒定负载时,我确实看到了每个处理器的输出。这将向我建议您将这些功能禁用是正确的。我只是在为系统范围的空闲与未禁用的cpus的空闲之间的关系而苦苦挣扎。
JimmyJames

我通过一些更改来更新我的问题,以澄清问题。因此,在情况2中,如果禁用了12个cpus,并且sys-idle百分比基于所有24个,则闲置百分比不能低于50%。因此,鉴于我有15%,这意味着sys idle%必须忽略被禁用的CPU,对吗?
JimmyJames
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.