在扩展以使用具有一定内存密集型作业(在我的情况下为 2.5GB)的云实例上的所有内核时,是否有其他人注意到糟糕的性能?
当我在我的四核至强芯片上本地运行作业时,使用 1 个内核和所有 4 个内核之间的差异是所有内核的速度降低了大约 25%。据我了解,这是可以预料的;随着内核用完,时钟频率下降是多核芯片设计的一部分。
但是,当我在多核虚拟实例上运行作业时,我发现使用 1 个内核和所有内核之间的处理时间减慢了 2 到 4 倍。我在 GCE、EC2 和 Rackspace 实例上看到了这一点。而且我已经测试了许多不同的实例类型,主要是提供的最快的。
那么其他具有相同大小的内存使用量的工作的其他人是否看到过这种行为?
我正在运行的作业是用 fortran 编写的。我没有写它们,我也不是一个真正的 fortran 人,所以我对它们的了解是有限的。我知道他们的 I/O 需求很低。当我在它们运行时观察它们时,它们似乎受 CPU 限制。它们无需相互通信即可运行,即,令人尴尬的并行。它们每个占用大约 2.5GB 的内存。
所以到目前为止,我最好的猜测是,消耗这么多内存的作业会受到虚拟化层内存管理的巨大打击。也可能是我的工作正在争夺 I/O 资源,但根据专家的说法,这似乎不太可能。
我现在的解决方法是使用 GCE,因为它们具有单核实例,实际上运行工作的速度与我笔记本电脑的芯片一样快,并且几乎按核心按比例定价。