Linux 内核使用已安装 RAM 的内存比例是多少?

Linux 内核使用已安装 RAM 的内存比例是多少?

我正在开发一个计算集群,并试图确定可以为单个进程提供的最大 RAM 量。在具有 16GB RAM 的计算机上,答案是我可以在调用内存不足杀手之前分配(并触及)15680MB(overcommit_memory = 2,overcommit_ratio = 0)。

在常规 Linux 发行版上,这似乎有点合理,但我已经编译了自己的最小内核(v 3.16),并且我的测试应用程序作为 sbin/init 运行 - IE 内存中绝对没有其他内容。

如果我模拟一台只有 512MB RAM 的机器进行比较,我可以分配 468MB,开销仅为 44MB,这看起来非常合理。

那么为什么 16GB 的机器上有这么多的内核内存呢?

阅读内核文档,似乎为内核保留了一定比例的内存以实现“安全”,这可以通过 /proc/sys/vm/ 进行调整。但我发现更改 admin_reserve_kbytes 和 user_reserve_kbytes 对于何时调用 OOM Killer 完全没有影响。

还有其他东西会随着安装的 RAM 量成比例增长吗?

答案1

一篇相当古老的 (2006) 论文讨论了一些随内存大小变化的内核开销:http://halobates.de/memorywaste.pdf

从中:

页结构(跟踪页分配):1.37%
页表:0.5%

同时,我的 16GB 测试机显示总开销为 4.3%

所以大约 2% 仍然下落不明。因此,问题仍然没有完全回答,答案是基于一个非常旧的内核。但这是迄今为止我最接近回答这个问题的。

答案2

你的问题的简短答案是尽可能多地,一旦它为流程提供了他们可以使用的东西。另一种方法是保留空闲内存,但这很浪费。一台 16GB 的机器今天不能使用 12GB,所以明天可以使用 20GB。任何此时未使用的内存都可能节省 I/O 和其他永远丢失的工作 - 您无法为以后保存内存。

如果你在想,“但我现在需要释放我的记忆,以便以后可以使用它”,请从你的脑海中清除这些胡言乱语。您现在就可以使用它稍后使用它。这里不需要做出权衡。事实上,如果您现在正在使用它,稍后只需不执行任何操作即可使用它。如果您现在不使用它,则必须做一些工作才能稍后使用它。因此,现在使用它将使您以后更有可能使用它。

您似乎有一个误解,认为内存只能由进程使用或者是内核开销。这不是真的。在典型的系统上,绝大多数物理内存既不是空闲的,也不是由进程使用的,也不是由内核开销消耗的。

例如,假设您的系统有足够的可用内存,您运行top,然后退出。您的系统有两种选择。它可以将top程序保留在 RAM 中,也可以丢弃包含该程序的页面。让我们看看这两个选择:

如果它可以释放 RAM,那就需要付出努力。更糟糕的是,为了使用 RAM,必须放弃这些努力。而且如果再次运行top,程序就必须从磁盘加载,速度非常慢。

如果它将页面保存在 RAM 中,然后您top再次运行,它就不必从磁盘加载问题。这是一个巨大的胜利。如果需要将内存用于其他目的,它可以直接转换到该目的,而不必费力使用内存并将其从空闲池中移除。

因此 RAM 页面将继续使用,保存可执行文件。此用途不与任何进程关联,因为top未运行。但它不是免费的,因为它包含可能有用的数据。而且这不是开销——如果内存在做其他事情时更有用,那么内容就可以被丢弃,因为如果需要的话可以从磁盘对可执行文件进行分页。

事实上,在典型负载下的典型系统上,绝大多数内存包含将来可能有用的信息,但如果需要内存用于其他目的,则可能会被丢弃。

如果您正在查看/proc/meminfo,那么您可能应该查看的数字是MemAvailable。它结合了空闲内存和包含信息的内存,如果需要更多空闲内存,这些信息可以被简单地丢弃。

答案3

答案取决于内核启动时您的服务器有多少可用内存。当使用内存膨胀时,这是基于它可以膨胀到的最大值。

对于 Linux 内核 4.15:

  • 4GB RAM 则预留 4.8%
  • 8GB 内存:3.2%
  • 16GB 内存:2.3%
  • 32GB 内存:1.9%
  • 64GB 内存:1.7%

那么为什么 16GB 的机器上有这么多的内核内存呢?

相对来说没有。假设您的数字是正确的,您会看到为 512MB 保留了 8.6%,而为 16GB 保留了 2.3%。

我不知道为什么在内核中选择这些比例,但你可以在 dmesg 中看到细分:

[    0.000000] Memory: 65920612K/67108324K available (12300K kernel code, 2473K rwdata, 4272K rodata, 2408K init, 2416K bss, 1187712K reserved, 0K cma-reserved)

相关内容