并行处理和磁盘IO性能。 更多核心或更多的服务器?

我在Ubuntu 12.04上的一个AWS EC2实例(c3.8xlarge)上有一个很大的分析工作。

目标是以100%的CPU加载服务器,运行尽可能多的内存允许的任务(不同的金额,但一般1-3gb每个工作)。

我最初的想法是提供一个大型实例,并运行32个同步处理作业 – 每个核心一个。 然而,这些工作会从文件(通常是同一个文件)中进行大量的读取,大量的gzipping / unzipping,以及基本上大量的磁盘重量的东西。

以前,当我在m3.xlarge节点(15GB内存,4核心)上运行一个testing时,我可以在4个同时作业中获得100%的CPU利用率。

然而,我最初的结果是使用60GB内存的32核心的情况更糟。 我怀疑服务器硬盘上的瓶颈,这是目前通用的SSD(不configurationIOPS)。

所以问题是 – 这里有什么更好的? 我是否尝试为磁盘提供更高的IOPS,或尝试某种RAID设置,以便大型服务器可以处理更多作业? 或者,我总是要通过在群集中启动几个较小的服务器来获得更好的整体吞吐量,而不会在一个磁盘上同时运行30多个作业的磁盘瓶颈?

这里不是HPC专家,所有的build议都表示感谢。

当然,“最佳”是相关的,但是有一些众所周知的方法可以提高AWS上的IO性能。

  • RAID0-聚集了一堆通用SSD EBS卷。
  • 一些大的IOP EBS卷。
  • 如果您正在进行顺序工作,请使用您拥有该types的实例本地存储的640GB。
  • 以上三点的结合。

以上所有假设您的实例正在EBS-Optimized模式下运行。

你当然可以在亚马逊上获得最大IOPS,你只需要愿意付钱。 我不相信你可以在实例创build后附加实例存储,所以这个选项可能需要启动一个新的实例。