我有一个奇怪的问题,看起来像内存缓存泄漏(不是内存泄漏)导致程序速度变慢。
让我先布置一下舞台。可重复地(使用神经节进行监控),在集群上我注意到缓存内存正在相对缓慢地增加。当内存变大时,大约占总内存的 2/3(Intel Gold,32 核和 192Gb),程序的运行速度会慢约 1.5 倍。如果我清除缓存并使用“ sync ; echo 3 > /proc/sys/vm/drop_caches
”同步光盘(我没有测试过哪种情况),则程序的速度会增加(大约快 1.5 倍)。
该问题与 I/O 相关——只有正在执行任何 I/O 的 CPU 才会显示缓存泄漏。该程序正在执行相当数量的 I/O,但不是大量 (10-40 Mb)。我使用 ifort 和 -assume buffered_io 进行编译。看起来 I/O 在最后留下了缓存文件,实际上是“缓存内存泄漏”。
这个问题有多个部分,包括为什么会发生这种“泄漏”,如何避免它(例如,每 3 小时强力 cron 清理一次缓存)以及程序如何/为什么减慢这么多(矢量操作效率低下)对于非连续内存作为一种猜测,我不确定我是否相信)。
任何和所有关于治疗方法以及更好地理解它的方法的建议都是有用的。
注意,这是一个大程序,因此用小代码复制它可能不相关。