【发布时间】:2015-05-10 01:55:58
【问题描述】:
我正在探索在 Amazon EC2 上运行数值计算的可行性。我目前正在运行一个c4.8xlarge 实例。它有 36 个 vCPU,每个 is a hyperthread 是一个 Haswell Xeon 芯片。实例以 HVM 模式运行 Ubuntu。
我有一个完全顺序(即单线程)程序的 GCC 优化二进制文件。因此,我启动了 30 个 CPU 固定实例:
for i in `seq 0 29`; do
nohup taskset -c $i $BINARY_PATH &> $i.out &
done
这 30 个进程运行几乎相同的计算。磁盘活动很少(每 5 分钟几兆字节),也没有任何网络活动或进程间通信。 htop 报告所有进程都以 100% 持续运行。
此时整个过程已经运行了大约 4 个小时。六个流程 (12-17) 已经完成了它们的任务,而流程 0、20、24 和 29 看起来需要再 4 小时才能完成。其他进程介于两者之间。
我的问题是:
- 除了与其他用户的资源争用之外,是否还有其他因素可能导致同一实例中 vCPU 之间的性能出现显着差异?就目前而言,该实例相当不适合在线程/等级之间同步的任何 OpenMP 或 MPI 作业。
- 我可以做些什么来在内核之间实现更均匀(希望更高)的性能?我在这里基本上排除了超线程作为罪魁祸首,因为六个“快速”进程是相同物理内核上的超线程。也许有一些与 NUMA 相关的问题?
【问题讨论】:
-
假设您的内核和 Amazon 的虚拟机管理程序都没有移动线程,那么您有 6 个物理内核,每个内核运行 1 个“快速”进程,然后有 12 个物理内核,每个内核运行 2 个“慢”进程。这增加了 18 个物理内核,这很可能是 Amazon 将您的 36 个 vCPU 映射到的位置。因此,仅超线程就足以导致这种行为。
-
为了获得更均匀的性能,请尝试在您的 36 个 vCPU 实例中运行 18 或 36 个进程。如果这还不够好,请尝试找出 vCPU 和物理内核之间的确切映射,然后相应地绑定您的进程。
标签: amazon-web-services amazon-ec2