我想在我的用户空间linux应用程序中实现一个内存中缓存(某种类型)。
我所追求的基本上是与linux的文件系统缓冲区缓存相同的行为:任何没有被其他任何东西使用的内存,都被我的缓存进程使用。
如果我要写这篇文章,对缓存的大小进行硬编码限制,那么我必须将缓存限制在某个预定义的值,而不是在其他进程没有使用那么多内存的情况下增长,或者在内存使用激增的情况下收缩。
我想让linux调用某种回调,通知我在实际需要内存时从缓存中删除一些条目。
这样,进程所需的任何内存都可以从我的缓存中拿走,剩下的内存都专用于我的缓存。
在linux中有办法做到这一点吗?
这样做的最佳方法是监视/proc/meminfo并增加缓存大小,使使用的物理内存几乎不小于总物理内存吗?
这听起来很像是您试图围绕虚拟内存管理器(VMM)编写代码。这不太可能以你想要的方式工作,或者即使这样:非常高效。
这个问题在Poul Henning Kamp写的清漆建筑笔记中有讨论。我敦促您阅读本文档,因为他谈到了Varnish是如何被设计为与VMM有效交互的,并可能为您的缓存提供一些替代设计思想。
任何试图根据系统内存压力调整自己的用户进程,比如通过查看常驻集大小(rss)/虚拟大小(vsize)的比率。将受到VMM的反馈循环的影响,并且该反馈循环可能对进程、系统或两者都有不利影响。
查看/proc的文档,了解在哪里获取rss,以及流程的vsize。
祝你好运。