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

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

有没有其他人注意到在扩展到使用云实例上的所有内核时性能很差,并且有一些内存密集型作业(在我的情况下为 2.5GB)?

当我在四核至强芯片上本地运行作业时,使用 1 个内核和所有 4 个内核之间的差异是所有内核的速度降低约 25%。根据我的理解,这是可以预料的;随着内核用完,时钟频率下降是多核芯片设计的一部分。

但是当我在多核虚拟实例上运行作业时,我看到了 处理时间降低 2-4 倍 在使用 1 个内核和所有内核之间。我已经在 GCE、EC2 和 Rackspace 实例上看到了这一点。我已经测试了许多不同的实例类型,主要是提供的最快的。

那么这种行为是否被其他人在内存使用方面看到过相同大小的作业?

我正在运行的作业是用 Fortran 编写的。我没有写它们,而且我不是一个真正的 fortran 人,所以我对它们的了解是有限的。我知道他们的 I/O 需求很低。当我在它们运行时观看 top 时,它们似乎受 CPU 限制。它们无需相互通信即可运行,即令人尴尬地并行。它们每个占用大约 2.5GB 的内存。

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

我现在的解决方法是使用 GCE,因为它们具有单核实例,实际上运行作业的速度与我的笔记本电脑的芯片一样快,并且几乎按内核按比例定价。

最佳答案

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

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

  • 在笔记本电脑上运行一份单线程程序需要 X 分钟才能完成。
  • 在您的笔记本电脑上运行 4 个单线程程序副本,每个副本需要 X * 1.25 分钟才能完成。
  • 在各种云实例上运行单线程程序的一个副本需要 X 分钟才能完成。
  • 在 N 核虚拟云实例上运行 N 个单线程程序副本,每个副本需要 X * 2-4 分钟才能完成。

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

    关于amazon-ec2 - 内存密集型作业在多核云实例(ec2、gce、rackspace)上的扩展性很差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007062/

    相关文章:

    amazon-web-services - AWS ELB 向 EC2 发送加密响应

    iis - Amazon EC2 多域

    docker - ECS任务定义中的Docker镜像特定参数

    amazon-web-services - 云服务器回归测试

    Java Web 应用程序真的很慢

    java - 慢速客户端期间的 Google 负载均衡器行为

    amazon-web-services - aws cloudformation 估计模板成本返回非工作 URL

    awk - 如何获取GCE实例的内部IP地址列表

    docker - 在GCE上通过jenkins作业尝试时无法部署k8s pod

    python - 加速常用的 Django 随机查询