多核服务器上工作进程的CPU使用率

时间:2012-03-22 17:13:04

标签: c# .net multicore cpu-usage worker

设置

我们编写了一个Windows服务,它会触发单独的工作进程来执行各种CPU密集型任务。服务器和工作人员通过IPC命名管道进行通信。

目前,我们通过简单的Process.Start()电话创建工作人员。

当我们在相当低规格的双核服务器VM上运行大量工作人员时,任务管理器告诉我们每个工作人员使用大约2-3%的CPU。

然而(这让我们感到困惑),当我们在非常强大的八核服务器上执行相同的测试时,我们仍然看到每个工作进程使用2 - 3%的CPU。现在,因为有更多的CPU“功率”可用,我希望看到每个工作人员使用更小的CPU。

这也意味着在低功耗服务器上,我们在创建30个工作进程后达到100%CPU。但是在高功率CPU上,我们在相同数量的工作人员之后达到了相同的限制。我们希望能够管理更多的工人。

问题

所以,我有几个问题:

  • 我们是否误解了任务管理器告诉我们的价值观? CPU%值是所有内核消耗的CPU时间量?如果是这样,为什么在完全不同的硬件上它是一样的?

  • 我们是否应该做一些特殊/不同的事情来正确地将我们的工作流程分布到多个核心?目前,这些进程具有默认的处理器关联(因此它们可以在任何核心上运行)。

任何帮助,建议,链接都将不胜感激。


留下评论的人的一些额外信息:

我最初没有提到它,因为我不一定想为我的问题增加额外的复杂性,但我们的工作流程正在对实时视频流进行视频转码。因此,没有工作人员“完成”其任务 - 只要客户端连接就可以工作。

本质:

  • 客户端连接到服务器
  • 服务器触发连接到远程视频流的工作进程
  • 当从所述视频流收到视频时,工作人员对其进行转码并将转码后的视频发送回客户端。

不确定这是否有助于其他任何建议?感谢到目前为止的所有评论。

1 个答案:

答案 0 :(得分:1)

进程使用2-3%的CPU这一事实表明您的进程不受CPU限制,而是可能受IO限制或存在其他限制。

2核心服务器 VM 上的IO可能比您的8核服务器慢得多,后者反过来限制了那里的行为。这可能就是表面CPU使用率相同的原因,但我怀疑整个服务器可能会更快地完成任务。