ext4のmountが遅い

eMMC上のext4でmountするのに約700msec前後かかって遅い。正しくumountしておくと早い、1分以上何もせずにしてから落とすと早い、syncしてから落とすと早い、という症状からどうもjournalっぽいと推測していたけど、いろいろアレな圧力がかかったので、マジメに調べてみた。

その結果やっぱりjournalだったというのはいいとして、結局のところ、journal replay の結果を commit しようとしていてその書き込みを同期にしていたので書き込み待ちで時間を取られていた。周辺コード読む限り、journalはそのうちmount後の書き込みで使い回されるけどそれが該当journalを上書きする前にreplay結果が書き出される保障がない(それが起こった瞬間に電源断が走るとjournalで戻せなくなる)、という点を懸念してのようだった。うーん、ケースとしては起こりにくいんだけど、確かに起こりうる系だなぁ。

というわけで、該当箇所を非同期書き込みに変更するパッチ(linux_journal_replay_nosync_2.diff)を用意してみたものの、電源断が起こりうるものにはさすがにこれは適用しない方がいいと思われる。

ちなみに、ext4 は Read Only で mountしても journal replay結果をcommitする(ディスクに書き込みをする)という挙動をする。え?それってありなの・・・

(※2017/01/12(Thu)追記) ドキュメントのroオプションのところにちゃんと書いてあった。
Mount filesystem read only. Note that ext4 will
replay the journal (and thus write to the
partition) even when mounted "read only". The
mount options "ro,noload" can be used to prevent
writes to the filesystem.

このブログ記事について

このページは、らるるが2016年10月11日 23:09に書いたブログ記事です。

ひとつ前のブログ記事は「環境変数とかaliasとかってどこに書くべきなの?」です。

次のブログ記事は「main()に来る前に呼ばれる関数の確認 (目次)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.5.0