Linuxシステムのパフォーマンスを向上させる方法はいくつも存在する。I/Oスケジューラを変更したりTRIMを有効にしたり色々あるが、まだハードドライブディスクをメインストレージに使っていたときから noatime
マウントオプションを使っていた。
Linuxを新たにインストールしたとき /etc/fstab
に noatime
というマウントオプションを追加し 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の説明文
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/power_management_guide/relatime
Relatime
ではatime
データを維持しますが、ファイルがアクセスされる度の書き込み動作はしません。このオプションを有効にすると、ファイルが変更された、つまりatime
が更新された (mtime
) 場合、またはファイルが最後にアクセスされてから一定以上の時間 (デフォルトでは 1 日) が経過している場合に限り、atime
データがディスクに書き込まれます。
そして現代のLinuxディストリビューションのほとんどは relatime
を使用している。
逆に以前採用されていた厳密な atime
を利用するには strictatime
というマウントオプションを付け加えるそうだ。
結論
つまりはシステムが壊れるリスクを犯してまで fstab
を編集して notime
にしてもあまりメリットがない。多くのディストリビューションで relatime
が使われているということは notime
にしても大きな違いはないということなのだろう。特にメインストレージを高速な半導体が使われている現代、その差は微々たるもの。
Linuxカーネルの relatime
が上手にアクセス時刻を管理してくれる。
だが atime
を利用するプログラムを全く使っていないのならば notime
にすることでドライブへの書き込みが減らしてみるのも良いかもしれない。体感できるほどのパフォーマンス向上はないかもしれないが、常に atime
がアクセスをトラッキングしている状態よりもホンの少しベンチマーク結果がよくなるかもしない。
Photo by Agê Barros on Unsplash
コメント