noatime オプションが Linux システムのパフォーマンスを向上させる方法とその理由

Atime アップデートはシステムのパフォーマンスに影響を与えます。 そこで何が起こっているのか、そしてそれに対して何をすべきか - 記事をお読みください。

noatime オプションが Linux システムのパフォーマンスを向上させる方法とその理由
自宅のコンピューターで Linux を更新するときは、常に特定の問題を解決する必要があります。 長年にわたって、これが習慣になりました。ファイルをバックアップし、システムを消去し、すべてを最初からインストールし、ファイルを復元し、お気に入りのアプリケーションを再インストールします。 システム設定も自分で変更します。 時間がかかりすぎることもあります。 そして最近、この頭痛は私に必要なのだろうかと思いました。

時間 Linux のファイルの XNUMX つのタイムスタンプのうちの XNUMX つです (これについては後で詳しく説明します)。 特に、最近の Linux システムでは atime を無効にすることが依然として得策なのかどうか疑問に思っていました。 atime はファイルにアクセスするたびに更新されるため、システムのパフォーマンスに大きな影響を与えることがわかりました。
最近 Fedora 32 にアップグレードし、習慣で atime を無効にすることから始めました。 本当に必要なのかと思いました。 私はこの問題を研究することに決め、これが私が調べたものです。

ファイルのタイムスタンプについて少し

これを理解するには、一歩下がって、Linux ファイル システムと、カーネルがファイルとディレクトリにタイムスタンプを付ける方法についていくつかのことを思い出す必要があります。 次のコマンドを実行すると、ファイルとディレクトリの最終変更日を確認できます。 ls -l (長い) または単にファイルマネージャーでそれに関する情報を確認することもできます。 ただし、舞台裏では、Linux カーネルはファイルとディレクトリのいくつかのタイムスタンプを追跡しています。

  1. ファイルが最後に変更されたのはいつですか (mtime)
  2. ファイルのプロパティとメタデータが最後に変更されたのはいつですか (ctime)
  3. ファイルが最後にアクセスされたのはいつですか (atime)
  4. コマンドを使用できます STATファイルまたはディレクトリに関する情報を表示します。 ここにファイルがあります /etc/fstab 私のテストサーバーのXNUMXつから:

$ 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 ファイル システムについて次のように述べています。

「実際のユーザーは tmpwatch (ctime を使用するように構成できるため、大きな問題ではありません) と XNUMX 人だけであるにもかかわらず、すべての Linux デスクトップとサーバーが一定の atime 更新により顕著な I/O パフォーマンスの低下に見舞われているのは非常に奇妙です。いくつかのバックアップツール。」

しかし、人々は依然としてこのラベルを必要とするいくつかのプログラムを使用しています。 したがって、atime を削除すると、その機能が壊れてしまいます。 Linux カーネル開発者はユーザーの自由を侵害してはなりません。

ソロモンの解

Linux ディストリビューションには多くのアプリケーションが含まれており、さらにユーザーは必要に応じて他のプログラムをダウンロードしてインストールできます。 これはオープンソース OS の重要な利点です。 しかし、これにより、ファイル システムのパフォーマンスを最適化することが困難になります。 リソースを大量に消費するコンポーネントを削除すると、システムが中断される可能性があります。

妥協策として、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

変更は次回の再起動時に有効になります。

広告の権利について

Web サイトをホストするサーバーが必要ですか? 当社が提供するもの 信頼できるサーバー 毎日または 500 回限りの支払いで、各サーバーは XNUMX メガビットのインターネット チャネルに接続され、DDoS 攻撃から無料で保護されます。

noatime オプションが Linux システムのパフォーマンスを向上させる方法とその理由

出所: habr.com

コメントを追加します