Linux:noatime でパフォーマンスは向上するのか?

Linux
この記事は約4分で読めます。
スポンサーリンク

Photo by Agê Barros on Unsplash

Linuxシステムのパフォーマンスを向上させる方法はいくつも存在する。I/Oスケジューラを変更したりTRIMを有効にしたり色々あるが、まだハードドライブディスクをメインストレージに使っていたときから noatime マウントオプションを使っていた。

Linuxを新たにインストールしたとき /etc/fstabnoatime というマウントオプションを追加し atime を無効化することが私の習慣になっている。このオプションが本当に有効なのかどうか調べてみた。

スポンサーリンク

タイムスタンプの概要

atime について知るにはタイムスタンプについて知る必要があるため少し解説する。

Linux カーネルはユーザやプログラムがファイルやディレクトリにアクセス、改変やステータス変更する度にそのタイムスタンプという形で正確な日時を記録する。これらのタイムスタンプは3つの仕分けされている。

  • mtime―改変が加えられた日時
  • ctime―ステータス(権限やファイル名など)が変更された日時
  • atime―アクセスされた日時

ファイルやディレクトリのタイムスタンプ詳細は stat コマンドで簡単に調べることができる。

stat 実行例

$ stat ~/.bashrc
  File: ~/.bashrc
  Size: 225       	Blocks: 8          IO Block: 4096   通常ファイル
Device: 803h/2051d	Inode: 6816146     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    nemo)   Gid: ( 1000/    nemo)
Access: 2020-06-28 00:02:05.448690829 +0900
Modify: 2020-06-28 00:01:58.795430313 +0900
Change: 2020-06-28 00:01:58.805430202 +0900
 Birth: 2020-06-28 00:01:58.792097017 +0900

これらのタイムスタンプは古いUnixプログラムを実行するときに使われることがある。例えばローカルでメールボックスを管理している場合など、通知するプログラムなどに使われていた。

最後の atime というタイムスタンプはビッグデータを扱うサーバのパフォーマンスチューニングを行う際に使われることはあるが、通常のデスクトップやサーバ用途だと必要とするプログラムは少ないようだ。

atime の必要性は過去にもカーネルデベロッパーの間で議論になった。

しかし、既存のユーザスペースの破壊が懸念されたため、atime が無効化されることは見送りになった。

その後いくつかの妥協案が出されLinuxカーネル2.6.30(2009年)から relatime が組み込まれた。

relatime

relatime マウントオプションは旧来の触られたらすぐになんでもスタンプを押す atime とは違い、アクセスされてから少し時間(約1日)を置いて書き込みを行う仕組みのようだ。

touch コマンドでファイルにアクセスなどをすれば atimeは更新されるかもしれないが、VimやEmacsなどでファイルを開いたくらいではすぐにアクセス時刻が反映されないのだ。

この結果、書き込み量が大幅に減らせる。

Red Hatの説明文

Relatime では atime データを維持しますが、ファイルがアクセスされる度の書き込み動作はしません。このオプションを有効にすると、ファイルが変更された、つまり atime が更新された (mtime) 場合、またはファイルが最後にアクセスされてから一定以上の時間 (デフォルトでは 1 日) が経過している場合に限り、atime データがディスクに書き込まれます。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/power_management_guide/relatime

そして現代のLinuxディストリビューションのほとんどは relatime を使用している。

逆に以前採用されていた厳密な atime を利用するには strictatime というマウントオプションを付け加えるそうだ。

結論

つまりはシステムが壊れるリスクを犯してまで fstab を編集して notime にしてもあまりメリットがないということだ。多くのディストリビューションで relatime が使われているということは notime にしても大きな違いはないということだろう。

Linuxカーネルの relatime が上手にアクセス時刻を管理してくれる。

だが atime を利用するプログラムを全く使っていないのならば notime にすることでドライブへの書き込みが減らしてみるのも良いかもしれない。体感できるほどのパフォーマンス向上はないかもしれないが、常に atime がアクセスをトラッキングしている状態よりもホンの少しベンチマーク結果がよくなるかもしない。

コメント

タイトルとURLをコピーしました