应使用最大百分比的 RAM 进程



简而言之:

我是一名计算科学家,我有一个昂贵的(CPU时间(模拟在计算机集群上运行。

我的程序中最占用 CPU 的部分是用于加速代码的二叉树结构。树会随着模拟的进行而增长,树越大,性能提升就越好。在我的 RAM 已满之前,我事先知道我的二叉树可以有多大。

详:

服务器在 Red Hat 6.7 上使用。

每个节点包含:

  1. 12 个处理器: 英特尔® 至强® CPU E5-2640 0 @ 2.50GHz
  2. 64GB 内存,8GB 交换内存

我的主要代码部分是用 Fortran 编写的,而其余部分是用 C/C++ 编写的 - 一些使用的库没有 Fortran 接口。该代码是用于湍流反应流的 CFD 求解器。我使用Cantera进行热力学,传输和化学源项,使用Boost库进行刚性积分器,然后使用一些Blas/Lapack进行矩阵运算。

问题:

我应该以最大化我的 RAM(例如 99% 的可用内存(为目标,还是会影响 CPU 性能?如果是这样,内存使用的最佳百分比是多少?

我猜你的集群运行的是Linux,因为大多数HPC集群都运行。

您的程序(实际上是您的进程(在其虚拟地址空间中运行,而不是直接在 RAM 中运行。RAM 是由操作系统内核管理的资源。阅读操作系统:三个简单部分以了解更多信息。

你需要避免捶打。

根据经验(仅(,所以细节肯定是错误的:

您可能需要询问您的系统管理员(例如,因为它们可能是在同一节点上运行的其他进程,或者因为他可以为您分配更多资源(。

如果每个计算节点都有一些"合理"的RAM(例如2018年的128GB或更少(,你宁愿不使用全部RAM,如果你的程序是唯一在该节点上运行的程序,你可能希望消耗不到95%的RAM。也许几千兆字节的RAM应该留给其他事情(和系统(。

如果你有一个拥有大量RAM的计算节点(想想一台1TB的RAM机器(,你可能会使用几乎所有的RAM(例如99%(,因为把10GB留给"其余"可能绰绰有余。

如果你用 C 或 C++ 编写代码,你可能会对像 mmap(2( (由mallocnew使用(、madvise(2(、posix_fadvise(2( 这样的系统调用感兴趣。

在少数情况下(与进程的引用位置有关(,您可能有一个虚拟地址空间(使用 proc(5( 和 pmap(1( 和 ps(1( 来查询它(略高于(例如 5% 或 10%(使用的 RAM。请注意 RSS 和页面缓存。另请参阅LinuxAteMyRam。

您当然需要对标和剖析。

通过您的额外编辑,我建议对 50GB 运行和 60GB 运行进行基准测试,看看哪个更快。如果是 60GB 的,请尝试 61,然后是 62GB,也许还有 63GB。

最新更新