我的 M4.large 实例不知为何报告了轻微的 CPU 被盗。不过如果我没记错的话。这应该只发生在 T2 或 M3 系列实例上。
顶部 - 11:07:53 启动 24 分钟,2 个用户,平均负载:1.00、1.00、0.80 任务:总计 89 个,其中 2 个正在运行,87 个正在休眠,0 个已停止,0 个僵尸 Cpu0:29.0%us,62.6%sy,0.0%ni,8.0%id,0.1%wa,0.0%hi,0.0%si,0.3%st CPU1:0.1%us,0.0%sy,0.0%ni,99.4%id,0.1%wa,0.0%hi,0.0%si,0.4%st $ lscpu -p # 以下是可解析的格式,可以输入到其他 # 个程序。每列中的每个不同项目都有一个唯一的 ID # 从零开始。 # CPU、核心、插槽、节点、、L1d、L1i、L2、L3 0,0,0,0,,0,0,0,0 1,0,0,0,,0,0,0,0
我正在使用 taskset 1 dd if=/dev/zero of=/dev/null 使 CPU 在 vCPU 0 上出现峰值。
根据 AWS 文档,底层硬件使用:2.3 GHz Intel Xeon® E5-2686 v4 (Broadwell) 处理器或 2.4 GHz Intel Xeon® E5-2676 v3 (Haswell) 处理器
每个物理核心都有 2 个逻辑核心。
除了 M3.large,我注意到 M4.xlarge 也存在这个问题,该类型包含 2 个物理核心,因此有 4 个 vCPU。我也在 M4.xlarge 上使用 taskset 命令进行了测试。当 vCPU 出现峰值时,无论是在同一个核心上还是在不同的内核上,都会导致 CPU 被盗。
例如,vCPU0 和 vCPU2 共存于 Core0 中。当我在它们上产生峰值时,我可以神奇地看到 vCPU1 上的 CPU 被盗。
这真是太奇怪了。请帮忙找出原因。谢谢。
答案1
通常,随着虚拟机需求的变化,任何虚拟化基础设施上都会发生 CPU 窃取。CPU 窃取是指从虚拟机中窃取周期由另一台虚拟机- 不是由虚拟机内的不同核心造成的。
鉴于亚马逊正在使用 Xen 的(尽管是高度定制的)版本,因此在一定程度上可以预料到会出现 CPU 窃取,并且 < 1% 是绝对可以预料到的,并且不应该真正改变实例性能的特征。
此外,亚马逊明确指出,EC2 实例被赋予了 ECU(弹性计算单元),当与特定 CPU(从内存来看,它曾经是较旧的 Xeon)进行基准测试时,它会转换为一定数量的周期,因此仅仅因为你被赋予了一定数量的 CPU 内核并不意味着你就获得了该数量的物理内核。