Linux 上的所有 tmpfs 实例是否共享同一个内存池?

Do all tmpfs instances on Linux share same memory pool?

我已经嵌入了 Linux 系统,它在 fstab 中定义了几个 tmpfs 挂载。其中一些挂载与 systemd 相关。

客户问为什么所有易变的 "RAM FS" 东西不只有一个支架。

问题:

  1. 是否为来自相同公共源(缓存或其他)的所有 tmpfs 实例分配了物理内存,以便我们不必手动管理它?
  2. 删除一个tmpfs挂载上的文件后,内存是否可以被其他挂载重用?
  3. 是否有 Linux 风格(或配置选项)为 tmpfs 静态分配内存?
  4. tmpfs 是否在内核中分配虚拟内存 space 或消耗与 tmpfs 定义大小成比例的其他宝贵资源?

引用自man tmpfs

  1. The tmpfs [...] contents reside in virtual memory. Virtual memory is a big topic, you can browse it on the net. The sources for physical memory may be RAM (I don't know if you count separate RAM modules as different source) or from swap or from any other source if you write your driver for it. Virtual memory is build on top of that. The memory can be compressed "on the fly" zswap and have more futures (like removing duplication KSM 等等),所以虚拟内存中的 5MB 并不是物理内存中的 5MB。我想每个 tmpfs 挂载点都有它自己的虚拟内存地址 space,但我认为这真的取决于实现。

  2. The [tmpfs] consumes only as much physical memory and swap space as is required to store the current contents of the filesystem..

  3. 我不太明白。我不知道 "static allocation" on a tmpfs/virtual 内存级别是什么意思。我想你可以编写自己的内核,它不会将指定的 RAM 模块添加到内存池中,或者只为该 RAM 模块创建一个内存池,然后编写你自己的内核驱动程序,它使用指定的 RAM 模块来实现你的目的,然后它将模拟 tmpfs.

  4. -

    4.1。是的,tmpfs 驱动程序从内核分配虚拟内存。

    4.2。 size=bytes Specify an upper limit on the size of the filesystem.。 tmpfs 中的资源有多大。您可以选择指定上限。我猜 tmpfs 内核驱动程序在加载时也会消耗一些内存,但这可以忽略不计。

  5. 由于开发人员和您计算机上的软件的分散,tmpfs 的东西不只有一个安装点。如果我编写一个将在内存中存储大块文件的应用程序,我将为我的应用程序安装一个 tmpfs。如果您编写另一个应用程序,您将为您的应用程序安装另一个 tmpfs。这样我们就不会一起写入同一个文件夹,我们可以为不同的应用程序使用相同的文件名。但标准方法是使用 /tmp 目录作为文件 (POSIX.1-2008) 的临时位置,并使用类似 mktemp 的功能在那里创建文件和文件夹,所以实际上有是安装在 PC 上的一个或两个 tmpfs。

  6. 如果您指的是 proc, sysfs, cgroup 或喜欢 devtmpfs(参见 udevd)和其他人,它们不是 tmpfs 并且是一个单独的主题。