noatime 选项如何以及为何提高 Linux 系统的性能

Atime更新会影响系统性能。 那里发生了什么以及该怎么办 - 阅读这篇文章。

noatime 选项如何以及为何提高 Linux 系统的性能
每当我在家里的计算机上更新 Linux 时,我都必须解决某些问题。 多年来,这已经成为一种习惯:我备份文件,擦除系统,从头开始安装所有内容,恢复文件,然后重新安装我最喜欢的应用程序。 我还更改了系统设置以适合自己。 有时需要太多时间。 最近我想知道我是否需要这种头痛。

一次 是 Linux 中文件的三个时间戳之一(稍后会详细介绍)。 特别是,我想知道在较新的 Linux 系统上禁用 atime 是否仍然是一个好主意。 由于每次访问文件时 atime 都会更新,因此我意识到它对系统性能有重大影响。
我最近升级到了 Fedora 32,出于习惯,我首先禁用了 atime。 我想:我真的需要它吗? 我决定研究这个问题,这就是我挖掘的内容。

关于文件时间戳的一些知识

要弄清楚这一点,您需要退一步并记住有关 Linux 文件系统以及内核如何为文件和目录添加时间戳的一些知识。 您可以通过运行命令查看文件和目录的最后修改日期 ls -l(长) 或者简单地通过在文件管理器中查看有关它的信息。 但在幕后,Linux 内核会跟踪文件和目录的多个时间戳:

  1. 文件上次修改时间是什么时候 (mtime)
  2. 上次更改文件属性和元数据是什么时候 (ctime)
  3. 文件上次访问是什么时候 (atime)
  4. 你可以使用命令 统计查看有关文件或目录的信息。 这是文件 / etc / fstab文件 来自我的一台测试服务器:

$ stat fstab
  File: fstab
  Size: 261             Blocks: 8          IO Block: 4096   regular file
Device: b303h/45827d    Inode: 2097285     Links: 1
Access: (0664/-rw-rw-r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2019-04-25 21:10:18.083325111 -0500
Modify: 2019-05-16 10:46:47.427686706 -0500
Change: 2019-05-16 10:46:47.434686674 -0500
 Birth: 2019-04-25 21:03:11.840496275 -0500

这里可以看到这个文件是我25年2019月XNUMX日安装系统时创建的。 我的档案 / etc / fstab文件 最后一次修改是在 16 年 2019 月 XNUMX 日,所有其他属性大约在同一时间进行了更改。

如果我复制 / etc / fstab文件 对于新文件,日期会更改以表明它是新文件:

$ sudo cp fstab fstab.bak
$ stat fstab.bak
  File: fstab.bak
  Size: 261             Blocks: 8          IO Block: 4096   regular file
Device: b303h/45827d    Inode: 2105664     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:53:58.443659981 -0500
 Birth: 2020-05-12 17:53:58.442659986 -0500

但如果我只是重命名该文件而不更改其内容,Linux 将只更新文件修改的时间:

$ sudo mv fstab.bak fstab.tmp
$ stat fstab.tmp
  File: fstab.tmp
  Size: 261             Blocks: 8          IO Block: 4096   regular file
Device: b303h/45827d    Inode: 2105664     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:54:24.576508232 -0500
 Birth: 2020-05-12 17:53:58.442659986 -0500

这些时间戳对于某些 Unix 程序非常有用。 例如,biff 是一个程序,当您的电子邮件中有新消息时,它会通知您。 现在很少人用 牛排,但在邮箱位于系统本地的时代,biff 相当常见。

该程序如何知道您的收件箱中是否有新邮件? biff 比较上次修改时间(当收件箱文件更新为新电子邮件时)和上次访问时间(您上次阅读电子邮件的时间)。 如果更改发生在访问之后,那么 biff 就会知道有新信件已到达,并将通知您。 Mutt 电子邮件客户端的工作方式大致相同。

如果您需要收集文件系统使用情况统计信息并调整性能,则上次访问时间戳也很有用。 系统管理员需要知道正在访问哪些对象,以便他们可以相应地配置文件系统。

但大多数现代程序不再需要这个标签,因此有人建议不要使用它。 2007 年,Linus Torvalds 和其他几位内核开发人员在性能问题的背景下讨论了 atime。 Linux 内核开发人员 Ingo Molnar 对 atime 和 ext3 文件系统提出了以下观点:

“很奇怪的是,由于不断的 atime 更新,每个 Linux 桌面和服务器都会遭受明显的 I/O 性能下降,即使只有两个真正的用户:tmpwatch [可以配置为使用 ctime,所以这不是一个大问题] 和一些备份工具。”

但人们仍然使用一些需要这个标签的程序。 因此删除 atime 会破坏它们的功能。 Linux内核开发者不应该侵犯用户自由。

所罗门的解决方案

Linux发行版中包含了很多应用程序,此外,用户还可以根据自己的需要下载并安装其他程序。 这是开源操作系统的一个关键优势。 但这使得优化文件系统的性能变得困难。 删除资源密集型组件可能会破坏系统。

作为折衷方案,Linux 内核开发人员引入了新的中继时间选项,旨在在性能和兼容性之间取得平衡:

atime 仅当上次访问时间小于当前修改或状态更改时间时才会更新...从 Linux 2.6.30 开始,内核默认使用此选项(除非指定了 noatime)...另外,从 Linux 2.6.30 开始。 1、如果文件的最后访问时间超过 XNUMX 天,则始终更新该文件。

现代 Linux 系统(自 2.6.30 年发布的 Linux 2009 起)已经使用了中继时间,这应该会带来非常大的性能提升。 这意味着您不需要配置该文件 / etc / fstab文件,并且使用中继时间,您可以依赖默认值。

使用 noatime 提高系统性能

但如果您想调整系统以获得最佳性能,禁用 atime 仍然是可能的。

在非常快的现代驱动器(例如 NVME 或快速 SSD)上,性能变化可能不是很明显,但有一个小幅增加。

如果您知道自己没有使用需要 atime 的软件,则可以通过启用文件中的 noatime 选项来稍微提高性能 /etc/fstab。 此后,内核将不会不断更新atime。 挂载文件系统时使用 noatime 选项:

/dev/mapper/fedora_localhost--live-root /          ext4   defaults,noatime,x-systemd.device-timeout=0 1 1
UUID=be37c451-915e-4355-95c4-654729cf662a /boot    ext4   defaults,noatime        1 2
UUID=C594-12B1                          /boot/efi  vfat   umask=0077,shortname=winnt 0 2
/dev/mapper/fedora_localhost--live-home /home      ext4   defaults,noatime,x-systemd.device-timeout=0 1 2
/dev/mapper/fedora_localhost--live-swap none       swap   defaults,x-systemd.device-timeout=0 0 0

更改将在您下次重新启动时生效。

由于宣传

您需要服务器来托管您的网站吗? 我公司提供 可靠的服务器 每日或一次性付费,每台服务器都连接到500兆比特的互联网通道,并免费抵御DDoS攻击!

noatime 选项如何以及为何提高 Linux 系统的性能

来源: habr.com

添加评论