我有几个关于高速缓存的问题。
在我的系统上,“free -h”命令给了我以下输出,
total used free shared buff/cache available
Mem: 7.6G 2.1G 1.5G 46M 4.0G 4.8G
Swap: 1.6G 28M 1.6G
Run Code Online (Sandbox Code Playgroud)
为什么在主内存中需要“缓存内存”?
据我所知,“缓存内存”不同于主内存(RAM)。它非常昂贵,而且速度要快得多。如果我错了,请纠正我。
在 1 小时之前,此缓存内存为 3 GB。为什么它现在增加了 1 GB?
请注意,我没有启动/运行任何新进程。
我可以启动新的进程/应用程序到什么限制?
我的意思是根据free -h
命令输出,
free memory = 1.5 GB, Cache memory = 4 GB and Swap memory = 1.6 GB
Run Code Online (Sandbox Code Playgroud)
我可以开始一个新的应用程序(1.5 + 1.6) GB or (1.5 + 1.6 + 4) GB
吗?
我可以设置/配置这个缓存内存值吗?
如果是,那么如何?
CPU 有一小部分快速内部 RAM。CPU 自动将频繁访问的主内存中的数据复制到此缓存中。
如别处所述,free
显示磁盘缓存。它不显示 CPU 缓存。磁盘缓存做同样的事情,除了磁盘块。它存储在主内存中,由操作系统管理。
所以我们有三层不同的内存!这被描述为“内存层次结构”。我们用于磁盘缓存的主内存实际上更快,每字节更昂贵 - 如果我们将其与磁盘进行比较。
所以它可以在不加载任何新程序的情况下使用,只需使用它们。例如,当您访问网站时,它们会被复制到磁盘(另一种缓存策略!)
当我说缓存“经常访问”的数据时,我撒了谎。缓存所有内容是最简单和最有效的......
磁盘缓存将增长,直到您没有可用内存为止...
当您需要更多内存时,一些块将从磁盘缓存中逐出以腾出空间。这种驱逐由旨在最大限度提高效率的政策控制。例如,“LRU”:驱逐最近最少使用的块。
Windows 在开发时就考虑到了这些问题;如果您尝试打开太多应用程序,它应该会阻止您并抱怨,这可以让您大致了解一次可以保持打开的程度。
在 Linux 上,预期的行为是您开始填充交换区,系统突然变得太慢而无法恢复。或者,如果您没有交换,则可能会发生类似的事情,即程序代码的缓存和其他此类基本文件被逐出。尽管如此,如果您以某种方式设法取得足够的进展,以耗尽不受磁盘支持的页面的内存,则内存不足杀手将开始谋杀它不喜欢回收内存的进程。
您仍然可以大致了解多少是太多。您最终只能硬重启才能恢复:)。
您可以配置它以防止“过度使用”,并保持交换禁用或非常小。这是最接近 Windows 的地方。然而,很多 Linux 代码是在“过度使用”的假设下设计的。如果你有足够的内存,这不是什么大问题。并且磁盘缓存仍然会作为一种不太危险的过度使用;您不一定最终需要大量您永远无法从中获得任何优势的 RAM。
在实践中......有些人更喜欢在没有/非常小的交换的情况下运行,这很好。但是禁用过度使用并不常见。所以这不是建议,如果您启用它,那么您将处于不同的世界。例如,如果您询问一个问题并且它实际上与禁用过度使用有关,那么没有多少人有经验来识别它。
4 GB 现在同样好用,而且也不贵。如果您想运行多个系统,即虚拟机,这只是一个限制。我现在倾向于使用 4 GB 运行。我不记得上次我遇到内存不足的问题是什么时候了。我的经验来自内存少得多的旧系统。
另一个答案提到的 sysctls不限制磁盘缓存。它们限制了您可以拥有多少“脏”的磁盘缓存。这是指程序已写入数据但尚未同步回磁盘的缓存块。这种类型的缓存被描述为“回写缓存”。
也就是说,要大致了解利用率百分比,我会
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
。我希望后者给出的结果略低。其中哪一个更现实值得商榷。显然,删除缓存是一个更人为的测试,但如果您的工作负载实际上需要删除的文件,它们无论如何都会被读回。您可以验证 X 内存量是否足以满足您的工作负载,例如,通过使用选项引导内核mem=X
。就像mem=256M
您想在与原始 Raspberry Pi 型号 A 相同数量的 RAM 上测试 32 位软件一样。
归档时间: |
|
查看次数: |
23738 次 |
最近记录: |