Linux缓存逐出


8

查看Linux机器上的VFS缓存的行为,我可以看到,即使有效地空闲(crond和大多数其他守护程序已停止,接口关闭),可用内存的数量也会逐渐增加,这意味着从缓存中逐出了项目。

我做了很多谷歌搜索,但是找不到任何有关如何控制它的参考(除非这是vm_swappiness的副作用)。谁能让我走上正确的道路,以了解为什么在不需要新的内存分配时为何从缓存中逐出项目?


«暗示正在从高速缓存中逐出项目” –那么,在这种情况下vmstat,表明高速缓存的大小会增加–是真的吗?
poige

肯定减少。是的,它们(正在减少)
symcbean 2013年

因此,您说免费内存增加,而缓存/缓冲区大小同时减小,对吗?
poige

Answers:


1

swappiness仅影响分配的应用程序内存是否换出以为缓存腾出空间。vfs_cache_pressure是控制您所看到的内容的sysctl。


1
否-vfs_cache_pressure控制元数据与页面缓存保留的比率(至少根据我阅读的文档和我运行的实验)
symcbean 2013年

1
很公平。我做了一些研究,从中可以看到,所有内容都被排序到LRU订单列表中,并且仅在达到或超过某个阈值(人为或身体)时才进行查看。鉴于此,我假设仍在发生某些事情(例如内核线程唤醒或其他问题)。如果要弄清楚这一点对您来说非常重要,那么看起来好像有一个称为“ mmreclaim.stp”的预先编写的systemtap脚本,该脚本可跟踪内存管理器的回收。我还要确保它实际上不会使用“ sar -A”进行交换。
Bratchley

1

Linux使用称为pdflush的过程从页面缓存中刷新数据

pdflush由/ proc / sys / vm中的参数控制

#/proc/sys/vm/dirty_expire_centisecs
The hundredth of the second after which data will be considered to be expired from the page cache and will be written at the next opportunity.

#/proc/sys/vm/dirty_writeback_centisecs`    
The hundredth of a second after which the pdflush wakes up to write data to disk.

#/proc/sys/vm/vfs_cache_pressure`    
This will reclaim dentries and inodes which are also part of the cache.

您可以查看以下线程以获取更多信息:

pdflush守护程序
大量写负载的操作和调整理论
Linux缓存


感谢Joe,但是前2个选项专门涉及需要写回到文件系统的数据(即写缓冲区),而不是已读取且未更改的数据(读缓冲区)。vfs_cache_pressure控制用于清除相对于文件内容的文件元数据的首选项。
symcbean 2014年

@symcbean您是正确的。答案更多地涉及写缓存。基于LRU清除读取的缓存。但是,Linux使用双向列表策略,将基于该策略清除读取缓存。您可以在此处阅读有关Two-List Stragety以及Linux如何清除读取缓存的更多信息。让我知道这是否有意义。在您的情况下,我假设所有进程都停止之后,这些读取的缓存将进入非活动列表并被清除
Joe

谢谢,好文章。知道该章来自哪本书吗?但是,尽管它说明了如何优先驱逐特定页面,但并没有真正说明为什么在没有明显的内存需求时为什么要逐出页面。是什么控制了过程“缩小缓存以提供更多RAM用于其他用途”?用这些取代什么呢?
symcbean 2014年

@symcbean当有内存需求时,缓存逐出会立即生效。但是,当没有人积极使用它时,将其存储在缓存中没有任何意义。从而使活动页面变为非活动页面,并最终被逐出。我认为您的问题源于驱逐仅在有内存需求时才会发生的观点。linux会在可用时清除所有非活动页面。如[文章中所述] [ jothirams.com/linux-cached-memory/]一样,如果所有内容都处于活动状态,则将耗尽内存并调用OOM。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.