sysctl kern.bufcachepercent 在 1.7GB 以上的 OpenBSD 5.2 中不起作用吗?

sysctl kern.bufcachepercent 在 1.7GB 以上的 OpenBSD 5.2 中不起作用吗?

我在具有 12GB RAM 的系统上运行 OpenBSD/amd64 5.2,并且我想使用大约 6GB 到 8GB 的​​内存来进行文件系统缓存。

默认情况下,5.2 amd64 自带sysctl kern.bufcachepercent设置为20(20%);我将其增加到 50%,然后增加到 60%,然后浏览了许多总大小肯定超过 10GB 的文件,但是,当我进入 时top,我看到了以下行:

Memory: Real: 25M/1978M act/tot Free: 9961M Cache: 1670M Swap: 0K/48G

也就是 12GB 中的 1.7GB,不到 15%!我什至尝试kern.maxvnodes从 117091 增加到 400000(并且kern.numvnodes确实表明所有 400k 虚拟节点都很快被利用),但我仍然有不到 2GB 的 RAM 用于缓存。

在 OpenBSD 5.2 amd64 上是否无法使用 6GB RAM 作为磁盘缓存?是否限制在 1.7GB 左右?

答案1

不,缓存不限于 1.7 GB 之类的。看起来,您的计算机上有很多小文件 - 如果 numvnodes 已满,则没有额外的空间可用于磁盘缓存。您可以尝试更多地增加 numvnodes,或者您可以尝试在大文件中查找/搜索。

答案2

我做了一些测试,似乎在我的系统上,相当于 100% 的 buffercache 大约为 2.8GB(我尝试了 75%,我得到了大约 2.1GB 用于缓存),所以,取百分比超出大约 2.7 或 2.8GB 的​​值(可能取决于系统/BIOS 等)。

这似乎与缓冲区缓存被限制有关32位DMA内存,而且最有可能的是,即使在设置的 100% 时,也会从与其他内核资源共享的池中取出内存,因此,在任何系统上,该百分比始终会明显低于 4GB。

http://www.openbsd.org/cgi-bin/cvsweb/src/sys/kern/vfs_bio.c
http://marc.info/?l=openbsd-tech&m=130174663714841&w=2

答案3

请注意,从 OpenBSD 5.6 或 5.7 开始,OpenBSD 的“缓冲区缓存”(又名操作系统磁盘/文件系统 RAM 缓存等)不会不是不再有 32 位/~3GB 限制,请参阅此 ML 帖子和线程以获取更多信息:

http://marc.info/?l=openbsd-misc&m=145542727812528&w=2

http://marc.info/?t=145538710500002&r=1&w=2

因此,自从另一张海报在 2013 年 1 月提出这一建议以来,情况已经发生了变化,这实际上是在该限制解除之前约 6 个月的时间。

我想 numvnodes 设置仍然会对这里讨论的主题产生影响,还没有真正研究过,但只是想说明有关缓冲区缓存的这一点(因为这篇文章是整个互联网上为数不多的页面之一讨论了 OpenBSD 中的功能)。

相关内容