如何保持缓存成为二等公民

时间:2011-11-10 07:08:19

标签: caching linux-kernel

对这个问题发表评论确定:

How to clean caches used by the Linux kernel

ypnos声称:

“应用程序将永远是内存的第一个公民,不必与缓存争用它。”

嗯,我认为我的缓存是叛逆的,不想接受它的社会阶层。我在这里进行了实验:

http://www.linuxatemyram.com/play.html

第1步:

$ free -m
total used free shared buffers cached
Mem: 3015 2901 113 0 15 2282
-/+ buffers/cache: 603 2411
Swap: 2406 2406 0

因此缓存使用了2282MB,而且113MB是免费的。

现在:

$ ./munch
Allocated 1 MB
Allocated 2 MB
Allocated 3 MB
Allocated 4 MB
.
.
.
Allocated 265 MB
Allocated 266 MB
Allocated 267 MB
Allocated 268 MB
Allocated 269 MB
Killed
好的,Linux慷慨地给了我156MB,就是这样!那么,我怎么能告诉Linux我的程序比2282MB缓存更重要?

额外信息:我/ home已加密。

更多有相同问题的人(这些使得加密假设不太合理):

https://serverfault.com/questions/171164/can-you-set-a-minimum-linux-disk-buffer-size

https://askubuntu.com/questions/41778/computer-freezing-on-almost-full-ram-possibly-disk-cache-problem

3 个答案:

答案 0 :(得分:1)

在内核中了解缓存的一点是它的设计尽可能高效。这通常意味着当没有其他东西要求记忆时,放入缓存的东西就会留在那里。

这是准备好运的内核,以防再次询问缓存中的内容。如果没有其他人需要记忆,那么释放它就没什么好处。

答案 1 :(得分:0)

我不确定Linux特定的东西,但是一个好的操作系统会跟踪内存页面被访问的次数,以及多久以前。如果最近没有访问它,它可以将其交换出来,并使用RAM进行缓存。 此外,分配但未使用的内存也可以发送到交换,因为有时程序分配的内容比实际需要的多,所以很多内存页只会坐在那里填充你的内存。

答案 2 :(得分:0)

我发现我是否通过

关闭交换
#swapoff -a

问题正在消失。如果我有交换,当我要求更多的内存,然后linux尝试将缓存移动到交换,然后交换完全,然后Linux停止整个操作而不是删除缓存。这导致“内存不足”。但是没有交换Linux知道它没有希望,但首先放弃了缓存。

我认为这是linux内核中的一个错误。

从添加到问题的链接之一建议:

sysctl -w vm.min_free_kbytes = 65536

有帮助,对于64MG的我来说,我很容易陷入困境。我正在使用128MG的边距,当贪婪的缓存到达那里时,机器变得非常慢但不同之前它不会冻结。我将检查256MG保证金,看看是否会有改善。