为 /tmp 使用 tmpfs + 一个非常大的交换分区而不是常规文件系统?

Pet*_*etr 9 linux swap tmp tmpfs

我有 Linux 服务器,并且有一个备用的 500GB 磁盘分区。我想格式化它并将其用于/tmp。服务器偶尔会运行一些大数据处理任务,因此 /tmp 可能会保存 GB 的临时数据。

然后我有了一个想法,我可以将它添加为交换分区,然后将 /tmp 挂载到 tmpfs。这个想法合理吗?

服务器有 6GB 的 RAM,因此在大多数情况下 /tmp 上的数据只会在 RAM 中,具有明显的速度优势。问题是,如果 /tmp 上有 10-20GB 的数据,系统将如何执行?与简单地将 /tmp 挂载到 ext4 分区相比,性能如何?感谢帮助。

编辑:很明显,当 tmpfs 的使用量达到 RAM 限制时,系统将开始换出内存。但是 Linux 是否足够智能以换出 tmpfs 数据并将“常规”数据保存在 RAM 中?如果是,那么我想它的行为是合理的。如果没有,那么整个系统将受到严重影响。

Fra*_*ran 12

这不是一个好主意TM

您可以使用/tmp像这样安装的大分区(从您的/etc/fstab

tmpfs  /dev/tmp  tmpfs  defaults,nosuid,nodev,noexec,noatime,nodiratime,size=6000M 0 0
Run Code Online (Sandbox Code Playgroud)

您可以将外部驱动器添加为一个巨大的交换分区

/dev/sdb1  swap  swap  defaults  0 0
Run Code Online (Sandbox Code Playgroud)

当达到极限时,您的机器将开始将页面从 RAM 交换到磁盘——此时,平均负载将达到顶峰,机器将停止。

以任何方式依赖 SWAP 都是一个坏主意,你最好卖掉你的 500GB 驱动器并简单地购买更多的 RAM -它很便宜。

总之

如果您真的想使用 500GB 磁盘,您可以将 500GB 磁盘安装在/tmp禁用 atime 和 diratime 的非日志文件系统上(例如ext2)。这将是显着快于处理的是一台SWAP荷兰国际集团

  • 为什么投反对票?我并不是在宽恕这一行动——而是提供了一种如何去做的方法。问题是这是否可能以及如何去做——而不是这是否是一个好主意。我已经明确表示这是一个坏主意 - 如果他需要更快的`tmp`访问,实际的解决方案应该只是购买更多的RAM。 (3认同)
  • 这里的每个人似乎都同意这是一个坏主意。但是,内核文档中的 tmpfs.txt 将其列为 tmpfs 的用例之一。@Fran,您是否有数据支持您的可怕断言,即它会导致颠簸?显然,这取决于 /tmp 上会发生什么。 (3认同)

小智 6

这可能是一个合理的想法。

将实际文件系统放在 /tmp 上确实会产生开销,因为文件系统会花费大量时间来确保磁盘上的数据在系统故障时不会损坏。对于在启动时清理的 /tmp 来说,这显然只是开销。使用 tmpfs 可以避免这种开销。

另一方面,文件系统还确保文件在磁盘上以优化访问时间的方式组织 - 即,它们将避免碎片。典型的顺序文件访问(大部分)将导致顺序磁盘访问,这比随机访问更有效。这种效应在旋转硬盘上比在 SSD 上更明显。swap+tmpfs 组合不能轻易做到这一点,因为 swap 不知道哪块内存属于哪个文件,而 tmpfs 不知道页面如何映射到物理内存或磁盘。然而,对于大文件,它应该可以很好地工作,因为 tmpfs 和 swap 都会在这种情况下尝试保持事物的连续性。至少,只要交换上有大量可用空间(否则就会出现碎片),并且写入发生得足够慢,以至于它们有机会被换出。

所以底线是:这取决于情况,您应该尝试这两种选择,看看哪一种最有效。

当您挂载 tmpfs 时,请记住明确设置大小。默认值为物理 RAM 的一半,即 3GB。