CPU 核心利用率不均衡

CPU 核心利用率不均衡

总结:第一个 CPU 核心始终处于饱和状态,所有其他核心始终处于负载不足状态。

基于 Ubuntu 的 Xen XCP 内的虚拟机:

$ uname -a
Linux MYHOST 2.6.38-15-virtual #59-Ubuntu SMP 2012 年 4 月 27 日星期五 16:40:18 UTC i686 i686 i386 GNU/Linux

$ lsb_release-a
无可用的 LSB 模块。
分销商 ID:Ubuntu
描述:Ubuntu 11.04
发行:11.04
代号:natty

该虚拟机有 8 个 CPU 核心。

该VM上运行着10个单线程工作进程,通过FCGI接口连接到nginx服务器(监听本地网络端口)。

在 AB 的合成负载下,八个核心中只有第一个核心的负载达到 100%(如图所示htop)。它几乎一直处于非常高的负载下,并且所有其他核心的负载从 0 到 100% 不等,或多或少是随机的(并且这些核心的 CPU 负载正在跳跃)。

以下是我在负载下通常看到的情况htop

  1 [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||99.3%] 任务:70,35 个;11 个正在运行
  2 [||||||||||||||||| 15.0%] 平均负载:3.86 1.05 0.39
  3 [||||||||||||||||||||||||||||||||||||||||||||||| 36.7%] 正常运行时间:22 天,06:31:57
  4 [|||||||||||||||| 15.7%]
  5 [||||||||||||||||||||| 22.4%]
  6 [||||||||||||||||||| 19.9%]
  7 [|||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||| 71.2%]
  8 [|||||||||||||||||||||||||||||| 31.3%]
  内存[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||394/4028MB]
  共享文件[ 0/5362MB]

  PID 用户优先级 NI VIRT RES SHR S CPU% MEM% TIME+ 命令
26213 www-数据 20 0 49748 26952 2448 R 29.0 0.7 10:42.61 /usr/bin/luajit2
26227 www-数据 20 0 50172 27412 2452 R 27.0 0.7 10:43.53 /usr/bin/luajit2
26221 www-数据 20 0 50736 27948 2452 R 27.0 0.7 10:39.02 /usr/bin/luajit2
26234 www-数据 20 0 50128 27232 2452 R 27.0 0.7 10:36.36 /usr/bin/luajit2
26218 www-数据 20 0 50232 27376 2452 R 26.0 0.7 10:39.32 /usr/bin/luajit2
26214 www-数据 20 0 51268 28496 2452 R 26.0 0.7 10:58.15 /usr/bin/luajit2
26232 www-数据 20 0 50420 27588 2452 R 25.0 0.7 10:39.21 /usr/bin/luajit2
26217 www-数据 20 0 50236 27348 2452 R 25.0 0.7 10:34.44 /usr/bin/luajit2
26219 www-数据 20 0 50748 27960 2448 R 23.0 0.7 10:45.30 /usr/bin/luajit2
26239 www-数据 20 0 49772 27188 2452 R 22.0 0.7 10:39.39 /usr/bin/luajit2
26368 www-data 20 0 10856 3796 968 S 15.0 0.1 1:12.62 nginx:工作进程
26369 www-data 20 0 10652 3504 968 S 2.0 0.1 1:12.75 nginx:工作进程
26372 www-data 20 0 10520 3504 968 S 0.0 0.1 1:18.64 nginx:工作进程
...

在负载测试期间,所有工作进程都处于运行状态R,负载测试运行大约 10-15 分钟(性能约为每秒 700-900 次点击)。当然,流量是由外部机器产生的。

看起来这个 CPU 核心负载不平衡是主要的性能瓶颈,如果所有核心都均匀负载,性能可能会更高。

关于如何解决此问题有什么线索吗?

如果我可以提供更多信息,请告诉我。

答案1

看起来 CPU0 接收到了每个 eth1 中断,并且有很多。

$ cat /proc/interrupts
           CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7       
283:113720624 0 0 0 0 0 0 0 xen-dyn-事件 eth1
284:1 0 0 0 0 0 0 0 xen-dyn-事件 eth0
285:2254 0 0 3873799 0 0 0 0 xen-dyn-事件 blkif
286:23 0 0 0 0 0 0 0 xen-dyn-事件 hvc_console
287:492 42 0 0 0 0 0 295324 xen-dyn-事件 xenbus
288:0 0 0 0 0 0 0 222294 xen-percpu-ipi callfuncsingle7
289:0 0 0 0 0 0 0 0 xen-percpu-virq debug7
290:0 0 0 0 0 0 0 151302 xen-percpu-ipi callfunc7
291:0 0 0 0 0 0 0 3236015 xen-percpu-ipi resched7
292:0 0 0 0 0 0 0 60064 xen-percpu-ipi spinlock7
293:0 0 0 0 0 0 0 12355510 xen-percpu-virq timer7
294:0 0 0 0 0 0 803174 0 xen-percpu-ipi callfuncsingle6
295:0 0 0 0 0 0 0 0 xen-percpu-virq 调试6
296:0 0 0 0 0 0 60027 0 xen-percpu-ipi callfunc6
297:0 0 0 0 0 0 5374762 0 xen-percpu-ipi resched6
298:0 0 0 0 0 0 64976 0 xen-percpu-ipi spinlock6
299:0 0 0 0 0 0 15294870 0 xen-percpu-virq timer6
300:0 0 0 0 0 264441 0 0 xen-percpu-ipi callfuncsingle5
301:0 0 0 0 0 0 0 0 xen-percpu-virq 调试5
302:0 0 0 0 0 79324 0 0 xen-percpu-ipi callfunc5
303:0 0 0 0 0 3468144 0 0 xen-percpu-ipi resched5
304:0 0 0 0 0 66269 0 0 xen-percpu-ipi spinlock5
305:0 0 0 0 0 12778464 0 0 xen-percpu-virq 计时器5
306:0 0 0 0 844591 0 0 0 xen-percpu-ipi callfuncsingle4
307:0 0 0 0 0 0 0 0 xen-percpu-virq 调试4
308:0 0 0 0 75293 0 0 0 xen-percpu-ipi callfunc4
309:0 0 0 0 3482146 0 0 0 xen-percpu-ipi resched4
310:0 0 0 0 79312 0 0 0 xen-percpu-ipi spinlock4
311:0 0 0 0 21642424 0 0 0 xen-percpu-virq 计时器4
312:0 0 0 449141 0 0 0 0 xen-percpu-ipi callfuncsingle3
313:0 0 0 0 0 0 0 0 xen-percpu-virq 调试3
314:0 0 0 95405 0 0 0 0 xen-percpu-ipi callfunc3
315:0 0 0 3802992 0 0 0 0 xen-percpu-ipi resched3
316:0 0 0 76607 0 0 0 0 xen-percpu-ipi spinlock3
317:0 0 0 16439729 0 0 0 0 xen-percpu-virq 计时器3
318:0 0 876383 0 0 0 0 0 xen-percpu-ipi callfuncsingle2
319:0 0 0 0 0 0 0 0 xen-percpu-virq 调试2
320:0 0 76416 0 0 0 0 0 xen-percpu-ipi callfunc2
321:0 0 3422476 0 0 0 0 0 xen-percpu-ipi resched2
322:0 0 69217 0 0 0 0 0 xen-percpu-ipi 自旋锁2
323:0 0 10247182 0 0 0 0 0 xen-percpu-virq 计时器2
324:0 393514 0 0 0 0 0 0 xen-percpu-ipi callfuncsingle1
325:0 0 0 0 0 0 0 0 xen-percpu-virq 调试1
326:0 95773 0 0 0 0 0 0 xen-percpu-ipi callfunc1
327:0 3551629 0 0 0 0 0 0 xen-percpu-ipi resched1
328:0 77823 0 0 0 0 0 0 xen-percpu-ipi 自旋锁1
329:0 13784021 0 0 0 0 0 0 xen-percpu-virq 计时器1
330:730435 0 0 0 0 0 0 0 xen-percpu-ipi callfuncsingle0
331:0 0 0 0 0 0 0 0 xen-percpu-virq debug0
332:39649 0 0 0 0 0 0 0 xen-percpu-ipi callfunc0
333:3607120 0 0 0 0 0 0 0 xen-percpu-ipi resched0
334:348740 0 0 0 0 0 0 0 xen-percpu-ipi spinlock0
335:89912004 0 0 0 0 0 0 0 xen-percpu-virq timer0
NMI:0 0 0 0 0 0 0 0 不可屏蔽中断
LOC: 0 0 0 0 0 0 0 0 本地定时器中断
SPU:0 0 0 0 0 0 0 0 虚假中断
PMI:0 0 0 0 0 0 0 0 性能监控中断
IWI: 0 0 0 0 0 0 0 0 IRQ 工作中断
RES:3607120 3551629 3422476 3802992 3482146 3468144 5374762 3236015 重新安排中断
CAL: 770084 489287 952799 544546 919884 343765 863201 373596 函数调用中断
TLB:0 0 0 0 0 0 0 0 TLB 被击落
TRM: 0 0 0 0 0 0 0 0 热事件中断
THR:0 0 0 0 0 0 0 0 阈值 APIC 中断
MCE:0 0 0 0 0 0 0 0 机器检查异常
MCP:0 0 0 0 0 0 0 0 机器检查轮询
错误:0
错误信息:0

答案2

嗯,

你为什么没有提到任务集任务集-p pid将检索亲和力...

将 -c 添加到 taskset 以指定 cpulist:在这种情况下,可以是任何值,但不能是 0。

相关内容