GNU/Linux >> Linux の 問題 >  >> Linux

noatimeでLinuxシステムのパフォーマンスを向上させる

自宅のコンピューターでLinuxをアップグレードするときはいつでも、私が通常行うタスクのリストがあります。それらは何年にもわたって習慣になっています。ファイルをバックアップし、システムをワイプし、最初から再インストールし、ファイルを復元してから、お気に入りの追加アプリケーションを再インストールします。また、いくつかのシステム調整を行います。私はこれらの微調整のいくつかを長い間行ってきたので、最近、まだそれらを行う必要があるかどうか疑問に思いました。

1つの微調整はatime 、これはLinux上のすべてのファイルの3つのタイムスタンプの1つです(これについては後で詳しく説明します)。具体的には、atimeを無効にする価値があるのではないかと思いました。 最近のLinuxシステムでは。 atime以降 ファイルにアクセスするたびに更新されますが、システムのパフォーマンスに大きな影響を与えたと理解しています。

最近、コンピューターをFedora 32にアップグレードし、atimeをオフにしました。 習慣から私のアップグレードされたシステムで。しかし、私はまだする必要がありましたか?私はそれをさらに調査することにしました。これが私が見つけたものです。

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

noatimeを理解するには 、一歩下がって、Linuxファイルシステムに関するいくつかのことと、カーネルがファイルとディレクトリにタイムスタンプを適用する方法を理解する必要があります。ファイルとディレクトリの最終更新日はすでにご存知でしょう。 ls -lでそれを見ることができます (長い)ディレクトリリスト、またはファイルマネージャでファイルの詳細を確認する場合。しかし、舞台裏では、Linuxカーネルはファイルとディレクトリのいくつかのタイムスタンプを追跡します。

  1. ファイルが最後に変更された日時(mtime
  2. ファイルが最後に変更された日時(ctime
  3. ファイルが最後にアクセスされた日時(atime

statを使用できます ファイルまたはディレクトリのこれらの詳細を表示するコマンド。これが/etc/fstabの例です テストサーバーの1つにあるファイル:

$ 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

出力から、このファイルは、システムをインストールした2019年4月25日に作成されたことがわかります。私の/etc/fstab ファイルの最終更新日は2019年5月16日で、他の属性もほぼ同時に変更されました。

/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は非常に一般的でした。

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

受信トレイに新着メールがあるかどうかをプログラムはどのようにして知るのですか? Biffは、最終更新時刻(受信トレイファイルが新しいメールメッセージで更新されたとき)と最終アクセス時刻(最後にメールを読んだとき)を比較します。変更がアクセスよりも新しい場合、biffは、最後にメールを読んでからメールメッセージが到着したことを認識し、通知します。 Mutt電子メールクライアントは、新しいメッセージが到着したときにアラートを出すのと同じようなことをします。

その最終アクセス時刻は、ファイルシステムの統計とパフォーマンスの調整を行う必要がある場合にも役立ちます。大規模なLinuxシステムでは、管理者はファイルシステムを適切に調整できるように、何にアクセスされているかを知る必要がある場合があります。

ただし、最近のほとんどのプログラムでは最終アクセス時刻が不要になったため、それを使用しないという議論がありました。 2007年、LinusTorvaldsと他の数人のカーネル開発者がatimeについて話し合いました。 とそのパフォーマンスの問題。 Linuxカーネル開発者のIngoMolnárは、atimeについてこの観察を行いました。 およびext3ファイルシステム:

すべてのLinuxデスクトップとサーバーが、一定のatime更新による顕著なIOパフォーマンスの低下によって損傷を受けているのに、実際のユーザーは2人だけです。tmpwatch[ctimeを使用するように構成できるため、大きな問題ではありません]といくつかのバックアップツール。 (わかりました。メールで通知してください。)数万のアプリケーションのうち。

しかし、人々はまだそれを必要とするいくつかのプログラムを使用しており、atimeを削除しています それらのユーザープログラムを壊すでしょう。そして、Linuxカーネル開発のルールは、ユーザースペースを壊さないことです。

関係の妥協

Linuxディストリビューションには多くのソフトウェアアプリケーションが含まれており、ユーザーは特定のニーズに合わせて他のプログラムをダウンロードしてインストールできます。これがオープンソースオペレーティングシステムの主な利点です。しかし、それはファイルシステムのパフォーマンスを調整する上で物事をより困難にします。 atimeが必要ですか 、またはそれを削除すると、システム上の何かが壊れますか?

妥協案として、Linuxカーネル開発者は新しいメソッドrelatimeを実装しました パフォーマンスと互換性のバランスをとることを目的とした、わずかに異なるパフォーマンス測定値です。 mount manページにはrelatimeについて書かれています :

アクセス時間は、以前のアクセス時間が現在の変更または変更時間よりも前であった場合にのみ更新されます。 …Linux2.6.30以降、カーネルはデフォルトでこのオプションによって提供される動作になります(noatimeが指定されていない場合)…さらに、Linux 2.6.30以降、ファイルの最終アクセス時刻が1日以上経過すると常に更新されます。

つまり、最新のLinuxシステム(2009年にリリースされたLinux 2.6.30以降)はすでにrelatimeを使用しています。 、これにより、パフォーマンスが大幅に向上します。つまり、/etc/fstabを微調整する必要はありません。 ファイルとrelatimeに依存することができます カーネルのデフォルト。

noatimeを使用したシステムパフォーマンスの調整

ただし、最大のパフォーマンスを得るためにシステムを微調整する場合は、atimeを無効にしてください。 2020年も引き続き有効なオプションです。

このパフォーマンスの調整は、非常に高速な最新のドライブ(NVMEや高速SSDなど)ではあまり目立たない場合がありますが、それでも少しブーストがあります。

atimeを必要とするソフトウェアを使用していないことがわかっている場合 、noatimeを設定すると、パフォーマンスがわずかに向上します。 /etc/fstabで ファイル。これにより、カーネルは最終アクセス時刻を追跡しないようになり、パフォーマンスがわずかに低下してatimeが継続的に更新されるのを回避できます。 ファイルシステム内。 noatimeを追加します Linuxファイルシステムのオプションとして、通常はデフォルトのエントリの後:

/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

これは、次に再起動したときに有効になります。


Linux
  1. straceを使用したLinuxでのシステムコールの理解

  2. Linuxシャットダウンコマンド(例付き)

  3. Linuxでのファイルパーミッションと例

  1. Linuxでの並べ替えコマンドと例

  2. Linuxのトラブルシューティング101:システムパフォーマンス

  3. FAT ファイル システムで rsync を使用するにはどうすればよいですか?

  1. LinuxでのCronを使用したシステムタスクのスケジューリング

  2. Sysstatを使用してLinuxシステムのパフォーマンスを監視する方法

  3. Linux で ext4 ファイルシステムのパフォーマンスを向上させるためのマウント オプションは何ですか