gpt4 book ai didi

c++ - 使用 linux 用户空间内存进行缓存

转载 作者:太空狗 更新时间:2023-10-29 12:36:50 26 4
gpt4 key购买 nike

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

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

如果我要写这个硬编码限制我的缓存应该有多大,我基本上必须将我的缓存限制在某个预定义的值,而不是在其余进程没有使用那么多内存的情况下增加它,或者它缩小,如果内存使用膨胀。

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

那样的话,进程需要的任何内存都可以从我的缓存中拿走,剩下的内存都专用于我的缓存。

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

执行此操作的最佳方法是仅监视/proc/meminfo 并增加我的缓存大小,以便使用的物理内存几乎不小于总物理内存吗?

最佳答案

这听起来很像您正试图围绕 虚拟内存管理器 (VMM) 进行编码。这不太可能按您希望的方式工作,或者即使按您希望的方式工作:非常高效。

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

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

查看 /proc 的文档至于从哪里获得rss,以及一个进程的vsize。

祝你好运。

关于c++ - 使用 linux 用户空间内存进行缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9390544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com