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

时间:2018-08-26 10:48:34

标签: memory-management cpu-usage

简而言之:

我是计算科学家,并且在计算机集群上运行具有昂贵的(CPU时间)仿真。

我程序中最消耗CPU的部分是二进制树结构,用于加速我的代码。该树随着仿真的进行而增长,树越大,性能提升越好。我事先知道我的二叉树在我的RAM已满之前能有多大。

详细信息:

服务器在Red Hat 6.7上使用。

每个节点包含:

  1. 12个CPU:Intel(R)Xeon(R)CPU E5-2640 0 @ 2.50GHz
  2. 64GB RAM,8GB交换内存

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

问题:

我应该最大化内存(例如可用内存的99%)还是会影响CPU性能?如果是这样,最佳的内存使用百分比是什么?

1 个答案:

答案 0 :(得分:0)

我猜您的集群正在运行Linux,因为大多数HPC集群都在运行。

您的程序(实际上是process)正在其virtual address space中运行,而不是直接在RAM中运行。 RAM是由OS内核管理的资源。阅读Operating Systems: Three Easy Pieces了解更多信息。

您需要避免使用thrashing

根据经验(仅),因此细节肯定是错误的:

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

如果每个计算节点都有一些“合理的” RAM(例如,2018年为128GB或更小),则您不希望全部使用它,并且如果您的程序是唯一的一个,则可能要消耗少于95%的RAM。在该节点上运行。也许应该将数GB的RAM留给其他事物(以及系统)。

如果您的计算节点具有大量RAM(例如1TB的RAM计算机),则可能会使用几乎所有内存(例如99%),因为为“剩余”保留10GB可能绰绰有余。

如果您使用C或C ++编写代码,可能会对mmap(2)mallocnew使用的系统调用),madvise(2),{{3 }}。

在某些情况下(与过程中的posix_fadvise(2)相关),您可能具有虚拟地址空间(使用locality of referenceproc(5)pmap(1)进行查询)比使用的RAM稍高(例如5%或10%以上)。请注意ps(1)RSS。另请参见page cache

您当然需要进行基准测试和配置。

在进行其他编辑后,我建议对50Gbyte运行和60Gbyte运行进行基准测试,然后看看速度会更快。如果是60GB,请尝试61,然后62G,甚至63G。