我在 Ubuntu 12.04 上的 AWS EC2 实例(c3.8xlarge)上有一个大型分析作业。
目标是使服务器的 CPU 负载达到 100%,运行内存允许的尽可能多的作业(数量不等,但通常每个作业 1-3gb)。
我最初的想法是配置一个大型实例并同时运行 32 个处理作业 - 每个核心一个。但是这些作业需要从文件(通常是同一个文件)中读取大量数据、执行大量 gzip/解压操作,并且基本上需要处理大量占用大量磁盘空间的内容。
以前,当我在 m3.xlarge 节点(15gb RAM,4 核)上运行测试时,我可以让 4 个同时进行的作业获得非常好的 100% CPU 利用率。
然而,我在 32 核 60GB RAM 上的初始结果要差得多。我怀疑服务器的瓶颈在于磁盘,目前是通用 SSD(未配置 IOPS)。
所以问题是 - 什么更好?我是否尝试为磁盘配置更高的 IOPS,或者尝试某种 RAID 设置,以便大型服务器可以处理更多作业?或者我是否总是通过在集群中启动几个较小的服务器来获得更好的整体吞吐量,而不会出现在一个磁盘上同时运行 30 多个作业的磁盘瓶颈?
这里不是 HPC 专家,因此非常感谢所有建议。
答案1
当然,“最佳”是取决于具体情况的,但有一些众所周知的方法可以提高 AWS 上的 IO 性能。
- RAID0 — 将一堆通用 SSD EBS 卷组合在一起。
- 一些大型的、已配置的 IOP EBS 卷。
- 如果您正在执行连续工作,请使用该类型的 640GB 实例本地存储。
- 以上三点的结合。
以上所有内容均假定您的实例在 EBS 优化模式下运行。
您当然可以在 Amazon 上获得最大 IOPS,只需愿意为此付费即可。我不认为您可以在创建实例后附加实例存储,因此该选项可能需要启动新实例。