我想在我的用户空间linux应用程序中实现一个内存缓存(某种类型)。
我所追求的本质上是与linux的文件系统缓冲区缓存相同的行为:任何没有被其他任何东西使用的内存都被我正在缓存的进程所使用。
如果我要写这段代码,硬性限制我的缓存应该有多大,我必须从本质上限制我的缓存到某个预定义的值,而不是如果其余进程没有使用那么多内存,它就会增长,或者如果内存使用量膨胀,它就会缩小。
我想要的是,当linux实际需要内存时,它会调用某种回调函数,通知我从缓存中删除一些条目。
这样,进程所需的任何内存都可以从我的缓存中移除,而剩下的内存则专用于我的缓存。
在linux中有没有办法做到这一点?
最好的方法是监视/proc/meminfo并增加我的缓存大小,以便使用的物理内存几乎不少于总物理内存吗?
发布于 2012-02-23 04:56:03
这听起来很像是在尝试围绕虚拟内存管理器编写代码。这不太可能以您希望的方式工作,或者即使它确实如此:非常高效。
这个问题在Poul Henning Kamp撰写的Varnish architecture notes中进行了讨论。我强烈建议您阅读这篇文档,因为他谈到了Varnish是如何设计来与VMM进行有效交互的,并可能为您的缓存提供一些替代设计想法。
任何试图调整自身以适应系统内存压力的用户进程,例如通过查看比率:常驻集大小(rss) /虚拟大小(vsize)。将因处于VMM的反馈回路中而受到影响,该反馈回路可能会对过程、系统或两者都产生不利影响。
查看/proc的文档,了解从哪里获取rss和进程的vsize。
祝好运。
https://stackoverflow.com/questions/9390544
复制相似问题