atop中的过程/ CPU度量究竟意味着什么?

我一直在使用优秀的atop来详细检查负载testing的影响,而顶部(系统范围)部分中的SystemLevel / CPU指标与底部(每个进程)部分中的ProcessLevel / CPU指标之间的区别我感到困惑。 我知道类似的问题,但我还没有find一个解释使用我已经理解的上下文。

1.是可用容量的百分比,还是已用容量的百分比?

ProcessLevel / CPU指标在联机帮助页中描述为“此系统级上与此资源的可用容量相关的此过程的占用率”。 与此相对照:

这两者似乎都是指与“…… 使用的能力……”有关的占有率,与“…… 可用能力……”有很大的不同。 假设手册页描述是正确的…

2.什么是“可用容量”?

如果真的在监测“可用容量”,这是什么意思? 下图显示了当CPU处于43%空闲状态时,ProcessLevel / CPU处于97%的状态,似乎表明它不能与SystemLevel / CPU最大值紧密相关。 它可能是考虑到磁盘或networking等待时间?

3.怎么可能> 100%?

这只是统计/抽样误差? 它是否与顶级的%CPU一样受到“100%= 1最大CPU”的影响? 如果是这样,我们的单线程pal节点如何在下面的最终示例中使用> 100%?

说明性的样品

作为例子(可能会打开更多的节点/ xen / aws蠕虫,在这种情况下抱歉,但我仍然欣赏SF的智慧,并且很高兴产生其他问题)…

我正在testing的节点应用程序(也是优秀的vegeta)以10req / s的速率在4-CPU AWS实例上愉快地处理特定的uploady请求types。 在此负载下,节点的ProcessLevel / CPU约为69%:

CPU sys: 73% | user: 155% | irq: 6% | idle: 143% | wait: 21% | steal: 1% cpu sys: 18% | user: 36% | irq: 0% | idle: 43% | cpu002 w: 3% | steal: 0% ... blah ... CPUNR CPU CMD 2 69% node 

(我假设cpu002对应于CPUNR = 2)。

在14 req / s的负载下,服务器无法处理(35%超时),ProcessLevel / CPU for节点达到97%:

 CPU sys: 59% | user: 142% | irq: 5% | idle: 170% | wait: 22% | steal: 1% cpu sys: 14% | user: 40% | irq: 0% | idle: 42% | cpu003 w: 3% | steal: 0% ... blah ... CPUNR CPU CMD 3 97% node 

因此,如果ProcessLevel / CPU表示可用 CPU资源的百分比,那么当CPU处于43%闲置状态时,节点如何使用97%的可用CPU资源? 或者(稍微偏离主题的风险),如果ProcessLevel / CPU意味着已使用的 CPU资源的百分比,那么为什么当这个度量值与负载最大值相当接近时,当有足够的CPU备用并且不等待磁盘时networking适​​配器…)?

最后一个例子,对于100%的问题,这里是16个req / s(ProcessLevel / CPU现在高达111%,所有请求失败)

 CPU sys: 44% | user: 125% | irq: 4% | idle: 203% | wait: 24% | steal: 1% cpu sys: 12% | user: 38% | irq: 4% | idle: 41% | cpu001 w: 5% | steal: 0% ... blah ... CPUNR CPU CMD 1 111% node 

干杯!