使用linux用户空间内存进行缓存

时间:2012-02-22 07:12:03

标签: c++ linux memory malloc new-operator

我想在我的用户空间linux应用程序中实现内存缓存(某种类型)。

我所追求的基本上与linux的文件系统缓冲区缓存行为相同:任何其他内容都没有使用的内存被我的缓存进程使用。

如果我用硬编码限制来写这个我的缓存应该有多大,我必须将我的缓存限制为某个预定义值,而不是在其余进程没有使用那么多内存的情况下增长如果内存使用量增加,它会缩小。

我想要的是,linux会调用某种回调来通知我从缓存中删除一些条目,当它实际需要内存时。

这样,进程所需的任何内存都可以从我的缓存中删除,而剩下的内存专用于我的缓存。

有没有办法在linux中执行此操作?

是这样做的最佳方法,只是监控/ proc / meminfo并增加我的缓存大小,以便使用的物理内存几乎不比总物理内存小?

1 个答案:

答案 0 :(得分:1)

这听起来非常像您尝试编码围绕虚拟内存管理器(VMM)。这不太可能以你想要的方式工作,或者即使它确实如此:非常有效。

Poul-Henning Kamp在Varnish architecture notes中讨论过这个问题。我恳请您阅读本文档,因为他谈到了Varnish如何与VMM高效交互,并且可能会为您提供有关缓存的替代设计思路的一些想法。

任何尝试将自身调整为系统内存压力的用户进程,例如通过查看比率:驻留集大小(rss)/虚拟大小(vsize)。将受到与VMM的反馈循环的影响,并且该反馈循环可能对过程,系统或两者都具有不利影响。

查看/proc的文档,了解rss的位置和进程的vsize。

祝你好运。