最新のFedoraとUbuntuではrelatimeもnoatimeもいらない?

(2008/6/14 13:35 追記)
続き書きました http://d.hatena.ne.jp/shiumachi/20080614/1213415948

要約

前回の検証で、マウントオプションに noatime や relatime をつけても
オプションなしのときと性能が変わらないという結果を報告しました*1*2
しかし、調査の結果、Fedora8、Fedora9、Ubuntu8.04 LTS などでは
カーネルのコンパイルオプションに default_relatime がついていることが
判明しました。
そのため、各ファイルシステムに noatime や relatime オプションを
つける必要はなくなっています。

relatimeについての調査

relatime マウントオプションについて調査していたところ、
LWN.netに atime 周りの議論のまとめ記事が掲載されていました*3
これによると、

  • Ingo Molnar が atime の仕様、つまりIO性能を思いっきり劣化させていることににキレた「こいつは多分過去最大のクソッタレな Unix の仕様だぜ」
  • すぐにこの問題にどう対処すべきかという議論に変わっていった。従来の対処方法の一つとして noatime オプションがあるが、これはメールソフトやバックアップツールの挙動をおかしくするのでディストリビュータはあまり使いたがらない。
  • そこで 2.6.20 で開発されたのが relatime マウントオプション。
  • しかしこれでもまだ混乱するツールがあったりするので、Linus が「何とかせい」と Ingo に言った。
  • で、開発されたのが default_relatime 及び relatime_interval の2つのブートオプション。詳細は後述するが、これらを実装するパッチは 2.6.24 でマージされる予定(実際に入れられている)。

とのこと。

(2008/6/10 t追記)
実際にはまだメインツリーにマージされていません。
しかし、Fedora8 や Fedora9 では linux-2.6-smarter-relatime.patch という
パッチとして取り込まれています。
(未確認ですがおそらくUbuntu 8.04 LTS も同様でしょう)


ここでまず、2つのブートオプションについて説明します。

新しいブートオプション

default_relatime

このブートオプションがオンになっていると、カーネルは
全てのファイルシステムでデフォルトで relatime オプションをつけて
マウントします。
カーネルのコンパイルオプションで、CONFIG_DEFAULT_RELATIME が y に
なっている場合はデフォルトがオンです。
オフにする場合はブート時オプションで以下のように入力します。

default_relatime=0

relatime_interval

このブートオプションで秒数を指定すると、その秒数よりも古い atime だけが更新されるようになります。
デフォルトは 86400 (つまり丸一日)です。
コンパイルオプションがないようですが、常時稼動しているんでしょうか?

ディストリビューションの確認

ここで、/boot/config-<カーネルバージョン> をチェックしてみますと、
Fedora8, kernel-2.6.42.5-85.fc8では以下のオプションが確認されました。

CONFIG_DEFAULT_RELATIME=y
CONFIG_DEFAULT_RELATIME_VAL=1

同様の結果が、Fedora9(2.6.25系)、Ubuntu 8.04 LTS(2.6.24系)でも
確認されています。

つまり、default_relatime=0 を指定しなければ、いくら /etc/fstab に
マウントオプション書いても(あるいは書かなくても) まともな検証に
なるはずがありませんね。

大変失礼いたしました。

結論

今回の調査結果からは、最新のディストリビューションでは
atime に関するマウントオプションを気にする必要がなくなったことが
わかりました。
atime による性能劣化を気にされる方も、そうでない方も今まで通り
デフォルトでご利用されていれば問題はないでしょう。
逆に、relatime の動作がシステムに影響を与える場合は
ブートオプションに default_norelatime=0 をつければいいことが
わかりました。

さらなる真実を求めて

……さて、上記の話、本当でしょうか?
私もまだドキュメントを読んだだけですので、正直どこまで本当なのか
わかりません。
というわけで、検証してみることにします。
また、より適した検証方法も探ることにします。

(続く)

補足:relatimeオプションが使用可能なディストリビューションについて

上記の通り、relatimeオプションは 2.6.20 から使えるようになっています。
逆に言えば、それ以前のカーネルを採用しているディストリビューションでは
まだ使えません。
Red Hat系では以下のようになっています。

ディストリビューション カーネルバージョン relatimeの有無
Red Hat Enterprise Linux 5 2.6.18系 無し(5.1時点)
CentOS 5 2.6.18系 無し(5.1時点)
Fedora8 2.6.24〜 有り
Fedora9 2.6.25〜 有り
Red Hat Enterprise Linux 6 不明 ほぼ確実に入ってくる

おそらく RHEL6 系では relatime オプションはもちろん、
default_relatime ブートオプションもほぼ確実に入ってきますので、
従来システム構築時に noatime マウントオプションを指定していた方は
注意していた方がいいかと思います。

*1:http://d.hatena.ne.jp/shiumachi/20080605/1212661605

*2:findによる検証が間違っている件についてはここでは置いておく

*3:http://lwn.net/Articles/244829/