CPU 性能下降

CPU 性能下降

我正在一个 Linux 容器中运行 memcached 服务,该容器固定到特定的物理核心。正如预期的那样,当请求数量增加时,CPU 也会增加。请求是从另一台机器上的工作负载生成器发送的。但是,对于给定数量的请求,在不同情况下使用的 CPU 数量会以违反直觉的方式变化。该机器有 4 个物理核心(0、1、2、3),并且超线程已禁用。

1)Memcached 在单核(CPU0)上单独运行

2)Memcached 在单核(CPU0)上运行,而 CPU 密集型应用程序(执行许多浮点运算)在(CPU3)上运行。

例如,在场景 1 中,每秒处理 60000 个请求时,Memcached 的 CPU 使用率为 88%。在场景 2 中,每秒处理同样的 60000 个请求时,Memcached 的 CPU 使用率较低,为 78%。这是怎么可能的?为什么当 CPU 密集型应用程序在不同的核心上运行时,Memcached 的 CPU 使用率会下降?

mpstat 中的每个核心的一些中断结果:

场景1(memcached在CPU0上单独运行):

CPU usage of Memcached = 88%

Average:     CPU       HI/s    TIMER/s   NET_TX/s   NET_RX/s    BLOCK/s BLOCK_IOPOLL/s  TASKLET/s    SCHED/s  HRTIMER/s      RCU/s
Average:       0       0,00     231,61       0,20  102893,92       0,00       0,00       0,00       4,14       0,18      42,53
Average:       1       1,80      18,33       0,00       0,00       0,00       0,00       0,98       4,25       0,02      15,98
Average:       2       0,00      22,96       0,00       0,00       0,00       0,00       0,00       3,47       0,02      20,49
Average:       3       0,00      20,59       0,00       0,00       0,78       0,00       0,00       3,43       0,02      18,71

场景2:(memcached 在 CPU0 上,CPU 3 上 CPU 密集型应用程序)

CPU usage of Memcached = 78%
Average:     CPU       HI/s    TIMER/s   NET_TX/s   NET_RX/s    BLOCK/s BLOCK_IOPOLL/s  TASKLET/s    SCHED/s  HRTIMER/s      RCU/s
Average:       0       0,00     204,87       0,21  102268,58       0,00       0,00       0,00       2,77       0,40     133,05
Average:       1       0,03      24,94       0,00       0,00       0,00       0,00       0,55       5,56       0,06      23,38
Average:       2       0,00      17,23       0,00       0,00       0,00       0,00       0,00       4,23       0,04      16,12
Average:       3       0,00     250,00       0,00       0,00       0,74       0,00       0,00       2,50       0,00      37,69

相关内容