当广泛使用RAM时,服务器计算速度变慢

在非常特定的情况下,我遇到了服务器变慢的问题。 事实是:

  • 1)我使用计算应用WRF(天气研究和预测)
  • 2)我使用128GB内存的双至强E5-2620 V3(NUMA架构 – 可能与问题!)
  • 3)我用mpirun运行WRF -n 22 wrf.exe(我有24个可用的逻辑内核)
  • 4)我使用CentOS 7与3.10.0-514.26.2.el7.x86_64内核
  • 5)在计算性能方面,Everthing工作正常,直到发生以下事情之一:
  • 5a)linux文件caching获取一些数据,或者
  • 5b)我使用tmpfs并填充一些数据

在5a或5b的情况下,我的WRF开始减速,有时甚至比正常慢5倍。

  • 6)RAM没有交换,甚至没有发生,在最坏的情况下,我有大约80%的RAM空闲!
  • 7)/etc/sysctl.conf中的vm.zone_reclaim_mode = 1似乎有助于延迟5a场景中的问题
  • 8)echo 1> / proc / sys / vm / drop_caches完全解决了5a场景中的问题,将WRF性能恢复到最大速度,但只是临时的,直到文件caching再次获取数据,所以我在cron中使用这个命令(别担心,没关系,我只使用电脑进行WRF,不需要文件caching就可以全面工作)
  • 9)但是,上面的命令仍然没有在5b场景(当我使用tmpfs临时文件)
  • 10)只有手动清空tmpfs时,才能在5b场景中恢复perfomanace
  • 11)这不是WRF或mpi问题
  • 12)这种情况只发生在这一台计算机上,而且我pipe理的是相同/相似的紫外线(WRF)。 只有这一个有完整的NUMA架构,所以我怀疑这是有它的东西
  • 13)我也怀疑RHEL内核有这个东西,但不知道,没有试图重新安装到不同的发行版
  • 14)numad和numactl选项来调用像“numactl -l”这样的mpirun,没有任何区别

让我知道你是否有任何想法,以避免这些放缓。

在关于这个问题的一些“相关”的链接后,有一个想法来到我身上。 透明的巨大页面是否会成为这个问题的根源? 一些文章高度表明,THP在NUMA系统上performance不佳。

我build议启用numad服务:

yum install numad systemctl enable numad systemctl start numad 

numad应该能够自动照顾记忆的地方。 类似进程的情况在第一个NUMA节点的CPU上运行,但是它的数据在第二个NUMA节点的本地RAM中,不应该再发生(除非所需内存的数量大于单个NUMA节点本地RAM的容量)。

我也build议configuration调整服务与configuration文件,最符合您的使用情况。 你必须测量差异并挑选最好的(或者你可以创build一些定制的)。


也许我find了你节点上奇怪行为的原因。 我search了mpirun并find了man page:

https://www.open-mpi.org/doc/current/man1/mpirun.1.php

有写:

快速总结

如果您只是在寻找如何运行MPI应用程序,则可能需要使用以下格式的命令行:%mpirun [-np X] [–hostfile]这将在当前运行时运行X个副本环境(如果在受支持的资源pipe理器下运行,Open MPI的mpirun通常会自动使用相应的资源pipe理器进程启动器,而不是像rsh或ssh那样需要使用hostfile,或者默认运行所有的X在本地主机上复制),通过CPU槽以循环方式调度(默认)。 查看本页面的其余部分了解更多详情。

请注意,mpirun会自动绑定从v1.8系列开始的进程。 在没有任何其他指令的情况下使用三种绑定模式:

绑定到核心:当进程数<= 2时

绑定到socket:当进程数大于2时

绑定到零:超额认购时

如果您的应用程序使用线程,那么您可能需要确保完全没有绑定(通过指定–bind-to none),或者为每个应用程序进程使用适当的绑定级别或特定数量的处理元素绑定到多个核心。

在你的情况下,n = 22没有绑定应用,线程可以重新定位。 你可以尝试外部的CPU绑定(就像使用taskset)。 你必须尝试。