AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 432547
Accepted
Petr
Petr
Asked: 2012-09-28 04:27:58 +0800 CST2012-09-28 04:27:58 +0800 CST 2012-09-28 04:27:58 +0800 CST

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

  • 772

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

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

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

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

linux
  • 3 3 个回答
  • 12605 Views

3 个回答

  • Voted
  1. Best Answer
    Fran
    2012-09-28T05:08:49+08:002012-09-28T05:08:49+08:00

    这不是一个好主意TM。

    你会喜欢一个大/tmp分区,像这样安装(来自你的/etc/fstab)

    tmpfs  /dev/tmp  tmpfs  defaults,nosuid,nodev,noexec,noatime,nodiratime,size=6000M 0 0
    

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

    /dev/sdb1  swap  swap  defaults  0 0
    

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

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

    总之

    如果你真的想使用你的 500GB 磁盘,你可以将你的 500GB 磁盘挂载/tmp到一个非日志文件系统上,并禁用 atime 和 diratime(例如。ext2)。SWAP这比处理正在运行的机器要快得多

    • 12
  2. Arnout
    2017-09-02T06:16:47+08:002017-09-02T06:16:47+08:00

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

    将实际的文件系统放在 /tmp 上确实会产生开销,因为文件系统会竭尽全力确保磁盘上的数据在系统故障的情况下不会损坏。对于在启动时清理的 /tmp,这显然只是开销。使用 tmpfs 可以避免这种开销。

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

    所以底线是:视情况而定,您应该尝试两种选择,看看哪一种效果最好。

    挂载 tmpfs 时,请记住明确设置大小。默认是物理 RAM 的一半,所以只有 3GB。

    • 4
  3. Perkins
    2019-11-13T16:25:44+08:002019-11-13T16:25:44+08:00

    当您通常没有太多数据/tmp,但偶尔会在有限的时间内消耗无穷无尽的 GB 数据时,这实际上是一个好主意。问题是 linux 交换系统对您的用例了解不够,无法正确执行。它通常会优先于程序页面转储或交换缓存,但这并没有真正帮助。可以使用 cgroups 来实现您的目标,这是当临时数据保存在程序内存中时,但我不确定在这种情况下如何配置 cgroups(我想您可以使用 FUSE tmpfs ...) . 幸运的是,这不是必需的。您可以使用 zram 和支持设备获得所需的行为。

    zram-init是自动设置 zram 的程序,zram 是一种压缩的 ram 块设备。配置中通常有一个zram-init安装/tmp为 zram 的示例。它会像下面这样

    type0=/tmp
    flag0= 
    size0=524288 # 500G of logical space
    mlim0=2G # 2G of memory
    back0=/dev/loop0 # (or /dev/sdxN, your large slow drive)
    notr0= 
    maxs0=4 # maximum number of parallel processes for this device
    algo0=zstd 
    labl0=tmp # the label name
    uuid0= 
    args0= 
    

    这将压缩任何写入 /tmp 的内容并将其存储在内存中。通常的压缩率在 50% 左右。它最多会消耗 2G 的物理内存。如果物理内存不足,它将获取最旧的文件并将它们推入支持设备,仍然是压缩的。请注意,压缩和解压缩文件确实会产生一些 CPU 开销,但这通常会被减少的 IO 所抵消。

    类似的设置可以与 cgroups 结合使用,让某些进程交换而不会对整体系统性能产生不利影响。

    • 2

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve