有没有办法告诉Linux内核仅将一定百分比的内存用于缓冲区高速缓存?我知道/proc/sys/vm/drop_caches
可以用来临时清除缓存,但是是否有任何永久设置阻止它增长到超过主内存的50%?
我之所以想这样做,是因为我有一台运行Ceph OSD的服务器,该服务器不断从磁盘提供数据,并在几个小时内设法将整个物理内存用作缓冲区缓存。同时,我需要运行将分配大量物理内存(几GB的10s)的应用程序。与普遍的看法相反(请参阅有关缓冲区高速缓存的几乎所有问题的建议),通过丢弃干净的高速缓存条目来自动释放内存并不是瞬时的:缓冲区高速缓存已满时,启动我的应用程序可能需要一分钟( *),在清除缓存(使用echo 3 > /proc/sys/vm/drop_caches
)后,同一应用程序几乎立即启动。
(*)根据Vtune在称为的函数中,在启动的这一分钟内,应用程序在新内存中出现故障,但将其100%的时间花费在内核中pageblock_pfn_to_page
。此功能似乎与查找大型页面所需的内存压缩有关,这使我相信碎片实际上是问题所在。