为什么在使用多进程时,Windows和Linux之间的CPU密集型任务的性能改进会有所不同

时间:2016-01-13 13:02:21

标签: linux multithreading performance

这是我的情况: 我的公司需要对大量的测试样品进行测试。但是如果我们在Windows PC机上启动一个进程,这个测试可能会持续数小时,甚至几天。所以我们尝试拆分测试集并启动一个进程来测试多核linux服务器上的每个切片。

我们希望服务器解决方案的线性性能提升,但事实是,当测试任务完成时,我们只能观察到 2~3倍的改进 > 10~20个过程。

我尝试了几种方法来找到问题:

  1. 禁用超线程;
  2. 使用max-performance power policy
  3. 使用taskset将每个进程固定在不同的核心上
  4. 但没有运气,问题仍然存在。

    为什么会这样?这是根本原因,我们的代码,操作系统还是硬件?

    这是我的电脑和服务器的信息:

    • PC:os:win10; cpu:i5-4570,2物理核心; mem:16gb

    • server:os:redhat 6.5 cpu:E5-2630 v3,2个物理核心; mem:32gb

    编辑:

    关于CPU:服务器有2个处理器,每个处理器有8个物理内核。查看this link了解详情。

    关于我的测试:它的手写识别相关(这就是为什么它是一个cpu敏感的任务)。

    关于IO:如果记录不计算,性能检查点不涉及太多IO。

1 个答案:

答案 0 :(得分:0)

  

我们希望服务器解决方案能够实现线性性能提升,   但事实是我们只能观察到2到3倍的改善   测试任务由10~20个过程完成。

考虑到系统上只有2个核心,这似乎很合乎逻辑。由于任务切换,启动10-20个进程只会增加一些开销。

此外,如果多个进程同时从磁盘读取,I / O也可能成为瓶颈。

理想情况下,运行线程的数量不应超过内核数量的2倍。