相关疑难解决方法(0)

vm.swappiness 参数真正控制什么?

根据内核文档:

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.
Run Code Online (Sandbox Code Playgroud)

然而,这有点模糊。我试图弄清楚参数最终控制什么。我知道它会调整内核尝试换出页面的积极程度,但它会影响内核代码中的哪些决策过程?

它是否会在内核将其换出之前调整页面必须在多长时间前被访问?如果是这样,默认值 60 代表什么?增加/减少 1 会改变多少(公式会很好)?
或者它是否根据访问频率换出页面?
或者是其他东西?

linux kernel memory swap

37
推荐指数
3
解决办法
1万
查看次数

使用 cgroups 仅关闭一个进程的交换?

我想仅关闭一个进程的交换。对于其他进程,交换应该像往常一样工作。

我如何用 cgroups 实现这个?

linux process memory cgroups

17
推荐指数
1
解决办法
7478
查看次数

制作或文件缓存之前强制的tmpfs来交换

考虑以下场景。您有一个安装了 Linux的慢速只读媒体(例如写保护的拇指驱动器、CD/DVD 等)(不是 Live CD 本身,而是正常版本),并且在没有字面意义的计算机上使用它其他形式的存储。它很慢,因为它是 USB 2。根文件系统作为overlayfs 挂载,因此它对于日志和您所做的许多其他临时工作是“可写的”,但所有写入都转到 RAM (tmpfs upperdir)。为Live发行情况非常典型的场景。

由于没有其他形式的存储,swap 挂载在 zram 上。因此,当 Linux 决定交换时,它会压缩这些页面并将它们仍然存储在 RAM 中,但至少它们是被压缩的。这实际上很不错,因为大多数应用程序的 RAM 很容易压缩(RAM 通常在数据中非常冗余,因为它意味着“快速”)。这适用于应用程序内存,但不适用于 tmpfs。

事情是这样的:zram很快,令人难以置信。另一方面,拇指驱动器很慢。假设它是 20 MiB/s,相比之下这真的很慢。您可以在这里看到问题以及为什么内核不会做正确的事情。

请注意,此问题不是重复如何使 TMPFS 内的文件更可能交换。问题几乎相同,但我对那个问题的答案并不满意,抱歉。内核绝对不会自行做“正确的事”,不管如何聪明的人设计它是。我不喜欢人们不了解情况并认为他们更了解情况。他们迎合一般情况。这就是 Linux 具有如此可调整性的原因,因为无论它多么智能,它都无法预测它的用途。

例如,我可以(并且确实)将vm.swappiness (/proc/sys/vm/swappiness) 设置为 100,这告诉它积极交换应用程序内存并保留文件缓存。这个选项很好,但不幸的是,它不是全部。

我希望它在处理交换时将文件缓存优先于任何其他 RAM 使用。这是因为丢弃文件缓存导致它不得不从慢20 MIB /秒的驱动器,这是多读回比交换zram慢。对于应用程序,vm.swappiness 有效,但不适用于 tmpfs。

tmpfs 挂载为页缓存,因此它与文件缓存具有相同的优先级。如果您从 tmpfs 读取文件,它将优先于较旧的文件缓存条目(最近使用)。但是,这是不好的,内核显然没有做正确的事情在这里。应该考虑将 tmpfs 交换为 zram 比文件缓存“最近使用”要好得多,因为从驱动器读取非常慢。

所以我需要明确地告诉它与文件缓存相比更频繁地从 tmpfs 交换:它应该比 tmpfs 保留更多的文件缓存。/proc/sys/vm 中有很多选项,但我找不到。真让人失望。

如果做不到这一点,有没有办法告诉内核某些设备/驱动器比其他设备/驱动器慢得多,并且它应该比其他人更愿意为它们保留缓存?tmpfs 和 zram 很快。拇指驱动器不是。我可以告诉内核这个信息吗? …

linux cache swap zram tmpfs

7
推荐指数
1
解决办法
1173
查看次数

标签 统计

linux ×3

memory ×2

swap ×2

cache ×1

cgroups ×1

kernel ×1

process ×1

tmpfs ×1

zram ×1