内存密集型工作在多核云实例(ec2,gce,rackspace)上的扩展性很差?

时间:2013-06-09 06:30:23

标签: amazon-ec2 rackspace-cloud google-compute-engine embarrassingly-parallel

在扩展使用云实例上的所有内核时,有没有其他人注意到可怕的性能有些内存紧张的工作(在我的情况下为2.5GB)?

当我在我的quad xeon芯片上本地运行作业时,使用1个核心和所有4个核心之间的差异在于所有核心的速度下降了大约25%。这是我所理解的;随着内核耗尽,时钟速率下降是多核芯片设计的一部分。

但是,当我在多核虚拟实例上运行作业时,我发现使用1核心和所有核心之间的速度下降了2倍 - 处理时间的4倍。我在GCE,EC2和Rackspace实例上看过这个。我测试了许多不同的实例类型,主要是提供的最快。

其他人在内存使用量相同的情况下看到过这种行为吗?

我正在运行的工作是用fortran编写的。我没有写它们,我不是一个真正的强人,所以我对它们的了解是有限的。我知道他们的I / O需求很低。当我在运行时观看 top 时,它们似乎是CPU限制的。它们在不需要彼此通信的情况下运行,即,令人尴尬的并行。它们每个内存大约需要2.5GB。

所以到目前为止,我最好的猜测是,占用这么多内存的工作会受到虚拟化层内存管理的巨大冲击。也可能是我的工作正在争夺I / O资源,但根据专家的说法,这似乎不太可能。

我现在的解决方法是使用GCE,因为他们拥有的单核实例实际上可以像我的笔记本电脑的芯片一样快地运行作业,并且几乎按核心价格成比例。

1 个答案:

答案 0 :(得分:1)

您可能会遇到内存带宽限制,具体取决于您的数据访问模式。

linux perf tool可能会对此有所了解,但我承认我并不完全理解您对问题的描述。如果我理解正确:

  1. 在笔记本电脑上运行单线程程序的一个副本需要X分钟才能完成。

  2. 在笔记本电脑上运行4个单线程程序,每个副本需要X * 1.25分钟才能完成。

  3. 在各种云实例上运行单线程程序的一个副本需要X分钟才能完成。

  4. 在N核虚拟云实例上运行N个单线程程序副本,每个副本需要X * 2-4分钟才能完成。

  5. 如果是这样的话,听起来你要么遇到内核争用,要么争用例如内存I / O.看看各种fortran编译器选项是否有助于优化内存访问模式会很有趣;例如,enabling SSE2 load/store intrinsics或其他优化。您也可以将结果与gcc和英特尔的fortran编译器进行比较。