【问题标题】:using linux user space memory for caching使用linux用户空间内存进行缓存
【发布时间】:2012-03-12 12:43:02
【问题描述】:

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

我所追求的本质上与 linux 的文件系统缓冲区缓存的行为相同:任何其他任何东西都没有使用的内存,由我正在缓存的进程使用。

如果我用硬编码限制我的缓存应该有多大,我必须将我的缓存限制在某个预定义的值,而不是在其余进程没有使用尽可能多的内存时增长,或者缩小,如果内存使用膨胀。

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

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

有没有办法在 linux 中做到这一点?

最好的方法是监控 /proc/meminfo 并增加我的缓存大小以使使用的物理内存几乎不小于总物理内存吗?

【问题讨论】:

  • 这取决于你想做什么。如果您正在处理文件,最好让 linux 缓存这些文件。
  • 这个问题让我想起了尝试做同样事情的 Varnish HTTP 缓存/加速器。
  • >>>几乎比总内存少 - 使用接近 100% [甚至 90%] 实际上并不是一个好主意,因为服务时间以指数方式接近无穷大。请参阅任何排队论文档或johndcook.com/blog/2009/01/30/…
  • fakrudeen,您的评论没有任何意义。更大的缓存总是比更小的缓存更好。

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


【解决方案1】:

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

Poul-Henning Kamp 撰写的Varnish architecture notes 讨论了这个问题。我敦促您阅读此文档,因为他谈到了 Varnish 是如何设计为与 VMM 有效交互的,并且可能会为您提供一些关于缓存的替代设计理念的想法。

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

查看/proc 的文档,了解从哪里获取 rss,并查看进程的 vsize。

祝你好运。

【讨论】:

    猜你喜欢
    • 2014-06-10
    • 2014-05-27
    • 2021-10-29
    • 2012-05-17
    • 1970-01-01
    • 2013-06-30
    • 2012-02-03
    • 2010-10-27
    • 2012-11-15
    相关资源
    最近更新 更多