了解和配置高速缓存

了解和配置高速缓存

我有几个问题高速缓存存储器

在我的系统上,“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
  1. 为什么主内存中需要“高速缓冲存储器”?

    据我所知,“高速缓冲存储器”与主存储器(RAM)不同。这是非常昂贵的,而且速度要快得多。如果我错了,请纠正我。

  2. 1 小时前,该缓存内存为 3 GB。为什么现在增加了 1 GB?

    请注意,我没有启动/运行任何新进程。

  3. 我可以启动新流程/应用程序的上限是多少?

    我的意思是根据free -h命令输出,

    free memory = 1.5 GB, Cache memory = 4 GB and Swap memory = 1.6 GB
    

    我最多可以开始一个新的申请吗(1.5 + 1.6) GB or (1.5 + 1.6 + 4) GB

  4. 我可以设置/配置该缓存值吗?

    如果是,那么如何?

答案1

  1. 我来纠正你吧!最贵的是CPU缓存
  2. 既然这是磁盘缓存,它被任何文件访问所使用。
  3. 坏消息:这很复杂而且令人讨厌。
  4. 好消息:现在您不必太担心。 8 GB RAM 对于通用桌面系统来说足够了。

1.我要纠正你!最贵的是CPU缓存

CPU 有一小段快速内部 RAM。 CPU 自动将频繁访问的主内存中的数据复制到该高速缓存中。

正如其他地方所解释的,free显示磁盘缓存。它不显示 CPU 缓存。磁盘缓存执行相同的操作,但磁盘块除外。它存储在主存储器中,并由操作系统管理。

所以我们有三个不同层次的内存!这被描述为“存储器层次结构”。如果我们将其与磁盘进行比较,我们用于磁盘缓存的主内存实际上速度更快,每字节更昂贵。

2.既然这是磁盘缓存,它被任何文件访问所使用。

因此,无需加载任何新程序,只需使用它们即可使用。例如,当您访问网站时,它们会被复制到磁盘(这是另一种缓存策略!)

当我说“经常访问的”数据被缓存时,我撒了谎。缓存所有内容是最简单、最有效的......

磁盘缓存将不断增长,直到没有可用内存为止...

当您需要更多内存时,某些块将从磁盘缓存中逐出以腾出空间。这种驱逐是由旨在最大限度提高效率的政策控制的。例如,“LRU”:驱逐最近最少使用堵塞。

3. 坏消息:这很复杂而且令人讨厌。

Windows 的开发就考虑到了这些问题;如果您尝试打开太多应用程序,它应该会阻止您并进行投诉,这可以让您大致了解可以同时打开多少应用程序。

在 Linux 上,预期的行为是您开始填充交换空间,系统突然变得太慢而无法恢复。或者,如果您没有交换,则可能会发生类似的情况,即程序代码的缓存和其他此类重要文件被逐出。如果您设法取得足够的进展,尽管如此,没有磁盘支持的页面内存不足,内存不足杀手将开始谋杀它不喜欢回收内存的进程。

您仍然可以大致了解多少才算是太多。您最终必须硬重启才能恢复:)。

您可以将其配置为防止“过度使用”,并保持交换禁用或非常小。这是最接近 Windows 的方式。然而,很多Linux代码是在“过度使用”的假设下设计的。如果你有足够的内存,那就不是了这是一个很大的问题。并且磁盘缓存仍然会充当一种危险性较小的过度使用;你不一定最终需要大量的内存,而你永远无法从中获得任何好处。

在实践中......有些人更喜欢在没有/非常小的交换的情况下运行,这很好。但禁用过度使用并不常见。所以这不是一个建议,如果你确实启用它,那么你将进入一个不同的世界。例如,如果你询问一个问题,而它实际上与禁用过度使用有关,那么没有多少人会有经验来认识它。

4. 好消息:现在您不必太担心。 8 GB RAM 对于通用桌面系统来说足够了。

4 GB 现在同样可以使用,而且价格也不贵。如果你想跑的话这只是一个限制更多的比一个系统,即虚拟机。现在我倾向于使用 4 GB 运行。我不记得上次遇到内存不足问题是什么时候了。我的经验来自内存少得多的旧系统。

另一个答案提到的 sysctls 确实不是限制磁盘缓存。它们限制了您可以拥有的“脏”磁盘缓存量。这是指程序已将数据写入但尚未同步回磁盘的缓存块。这种类型的缓存被描述为“回写式缓存”。


也就是说,为了大致了解利用率百分比,我会

  1. 在计算中考虑“已使用”和“buff/缓存”的总数以获得全面的视图。
  2. 在全新启动时进行测量以排除旧的缓存文件。或者运行后重新登录sync; echo 3 | sudo tee /proc/sys/vm/drop_caches。我预计后者的结果会稍低一些。其中哪一个更现实还有待商榷。显然,删除缓存是一个更加人为的测试,但如果您的工作负载实际上需要删除的文件,那么无论如何它们都会被读回。
  3. 这是假设您最终不会在磁盘缓存中留下大量数据文件,而您不会介意它们是否不合适,并且会对它们的磁盘性能感到满意。如果您在播放视频文件后进行测量,可能会发生这种情况。在这种情况下会更难。如果完整的视频文件适合内存,您只需从缓冲区/缓存中减去其大小即可。

您可以验证 X 内存量是否足以满足您的工作负载,例如,通过使用选项引导内核mem=X。就像mem=256M您想在与原始 Raspberry Pi 型号 A 相同数量的 RAM 上测试 32 位软件一样。

答案2

1. 为什么主存内部需要“高速缓冲存储器”?

我认为当提到“缓存”时,您想到的是用于磁盘缓存的内存,它是用于存储硬盘信息以加速未来进程的 RAM。当未来的进程必须使用内存中尚未存在的信息然后由这些新进程使用时,它将被释放。

2. 1 小时前,该缓存内存为 3 GB。为什么现在增加了 1 GB?

这没什么不好和/或不寻常的,因为未使用的内存是浪费的内存。系统可能会预加载它认为将来可用的代码。

3. 我可以启动新流程/应用程序的上限是多少?

基本上直到available后面的内存buffers/cached为零。发生这种情况时,您的系统将开始使用磁盘上的交换内存(请注意,这不是 RAM,而是硬盘上的空间)。这是不可取的,因为磁盘速度远低于 RAM 速度,并且会导致系统变得非常慢。

4. 我可以设置/配置该缓存值吗?

它是 Linux/Unix,所以当然是可配置的:) 这是指引关于配置 Linux 磁盘缓存。

也可以看看这个答案它对每个领域都给出了很好的解释。这是一种更幽默的方法:www.linuxatemyram.com

答案3

缓存是 Linux 操作系统最大的性能优势之一。

  1. 为什么主内存中需要“高速缓冲存储器”?

Linux 操作系统从一开始就是这样设计的。 Linux 内核将使用可用内存进行磁盘缓存,除非某些应用程序需要其中一些内存。这稍微提高了性能。当没有更多可用的物理内存页面时,内核将一些旧页面交换回磁盘

  1. 1 小时前,该缓存内存为 3 GB。为什么现在增加了 1 GB?

如果物理内存未被使用,内核会将其用作磁盘缓冲区高速缓存。磁盘缓冲区将最近访问的磁盘数据存储在内存中。如果再次需要相同的数据,可以快速从缓存中检索,从而提高性能。

  1. 我可以启动新流程/应用程序的上限是多少?

每当您希望操作系统决定分配多少物理内存时,您都可以启动应用程序,但这与缓存无关。通常,当运行一些异常高的扩展应用程序时,您很可能会遇到 Linux 内存不足 (OOM) 内核问题,但这与应用程序本身以及应用程序的设计和编码方式更相关,而不是操作系统设置。

  1. 我可以设置/配置该缓存值吗?

您可以查看此链接清除缓存/缓冲区如何清除缓存/缓冲区。据我所知,不可能为缓存设置静态值。

相关内容