为什么在多处理器中,所有CPU都没有被均匀利用?

时间:2014-04-09 11:41:14

标签: c linux multiprocessing

我刚开始研究多核架构并且有一个问题。 我有一个测试应用程序,它将线程数作为参数,创建这些线程,设置亲和力(借助sched_setaffinity),然后在每个线程任务中都有一个繁忙的循环(while(1))。 我正在使用带有4个处理器的Fedora 19 VM(3.11.9-200.fc19.x86_64)。现在,当我创建4个线程时,将它们的关联设置为4个不同的处理器,CPU利用率不均匀。 就像,

PID用户PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND

2113 root 20 0 0 0 0 R 92.90 0.000 18:22.91 multicoretest

2114 root 20 0 0 0 0 R 92.23 0.000 18:07.29 multicoretest

2112 root 20 0 0 0 0 R 49.28 0.000 9:41.48 multicoretest

2111 root 20 0 0 0 0 R 48.61 0.000 9:42.17 multicoretest

2110 root 20 0 0 0 0 Z 0.000 0.000 0:00.00 multicoretest

任何人都可以给我一个解释,为什么第3和第4核心没有前两个核心那么繁忙,尽管它们具有相同的线程功能?

这真的会有很大的帮助。

由于

1 个答案:

答案 0 :(得分:3)

我至少可以想到这种行为的几个可能原因:

  • 您的程序不是唯一执行的程序。任何其他程序以及操作系统本身都使用处理器,这可能不允许程序充分利用可用的CPU功率。即使设置了CPU亲和性,进程调度程序仍然会影响线程可用的CPU时间。

  • CPU核心是虚拟的,因此不是完全独立的。例如,英特尔处理器中的hyper-threaded cores共享其大多数物理逻辑网络。由于您的任务既简单又完全相同,因此在同一物理核心上执行的线程将争夺其资源。