initramfs 可以分页到交换磁盘吗?

initramfs 可以分页到交换磁盘吗?

我使用的是initramfs通过 PXE 启动 Centos。已使用的内存在或 via 的initramfs“缓存”值中列出。/proc/meminfofree

由于我需要计算性能数据,因此我需要知道所使用的内存是否initramfs可回收(即可以换出到磁盘)。通常,文件系统树中只有很小的一部分/被实际使用,因此大部分都initramfs可以被换出。

读到这里我得到了相互矛盾的信息。一些消息来源声称其initramfs行为类似于initrd并且基于ramfs,这意味着所声明的内存不能被调出以进行交换。其他消息来源声称这initramfs本质tmpfs上意味着它可以被调出以进行交换。

哪个是真的?文件系统中未使用的部分initramfs可以调出到交换空间吗?

答案1

编辑:答案已更新/更正。

虽然关于此主题的内核文档说“Rootfs 是 ramfs 的一个特殊实例(或 tmpfs,如果启用的话)[...]”,它实际上仍然是一个 ramfs,如代码中的简短查看所示(rootfsmm/shmem.c)。

一些补丁(参见例如这里这里)被发送到Linux 内核邮件列表 (lkml)改变这一点。但他们没有被接受。原因之一是,您通常不会在 initramfs 阶段或在嵌入式系统中启用交换。

initramfs 映像被提取到 rootfs。在用户空间(通常switch_root称为 from /init)切换到新根之前,它会删除 rootfs 的内容,以便仅保留空 ramfs 的最小内存量。因此,在此之后,您基本上可以忽略它的内存使用情况,并且是否可以换出它的问题几乎是无关紧要的。

答案2

正如您所说,文件数据只有在使用,而不是rootfs实现时才能进行分页。tmpfsramfs

自 Linux v3.12 起,tmpfs在某些情况下使用。如果我正确地阅读了代码,这仅有的如果您不通过root=选项,就会发生这种情况。您可以通过传递 来强制使用 ramfs rootfstype=ramfs,但不能通过传递 `rootfstype=tmpfs 来强制使用 tmpfs。

如果您有该stat命令,stat -f .将确认您是否使用ramfs等效、等效tmpfs或完全不同类型的文件系统。


这已实施于:

6e19eded3684“initmpfs:如果指定了 rootfstype= 或 root=,则使用 initramfs”

命令行选项 rootfstype=ramfs 获取旧的 initramfs 行为,当 root= 定义时,使用 ramfs 而不是 tmpfs 作为存根(出于美观原因)。

由于两个原因,这有点令人困惑。首先,它有效地覆盖了紧邻其之前的提交中的逻辑:

16203a7a942 “initmpfs:启用 CONFIG_TMPFS 时使 rootfs 使用 tmpfs”

有条件地调用适当的 fs_init 函数和 fill_super 函数。

root=其次,文档中似乎没有提到 的测试,即使在 v4.17 中也是如此:

https://github.com/torvalds/linux/blob/v4.17/Documentation/filesystems/ramfs-rootfs-initramfs.txt

如果启用 CONFIG_TMPFS,rootfs 将默认使用 tmpfs 而不是 ramfs。要强制使用 ramfs,请将“rootfstype=ramfs”添加到内核命令行。

相关内容