hata
2025年7月30日 17時00分
マニュアルにbtrfsは、大きいファイルに小さい変更を頻繁に行う場合にCoWを無効にすることが推奨されています。
ログファイルのような追記するだけの使用法でも同じでしょうか?
調べましたが、btrfsはエクステント単位で構成されていて修正がある場合もエクステントを新しく作成し、切り替えるので
小さいファイルに追記する場合でも、大きいファイルに追記する場合でも同じことになるのではないかと思いました。
以上、よろしくお願いします。
==========
製品型番:A6400-D00Z
Debian/ABOSバージョン:v3.21.3-at.14
カーネルバージョン:5.10.237-0
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
コメント
hata
at_dominique.m…
2025年7月30日 17時34分
hataさん
お世話になっています、
マルティネです。
> マニュアルにbtrfsは、大きいファイルに小さい変更を頻繁に行う場合にCoWを無効にすることが推奨されています。
> ログファイルのような追記するだけの使用法でも同じでしょうか?
>
> 調べましたが、btrfsはエクステント単位で構成されていて修正がある場合もエクステントを新しく作成し、切り替えるので
自分の考えとしては、仮想マシンのディスクや大きいデータベース(※)ぐらいでしか CoW を無効化していいと思います。
ログの場合も確かに append し続けると CoW の場合での負担が大きいですが、append するたびに新しい extent が追加されるわけではありません。
e2fsprogs-extra パッケージの filefrag コマンドか btrfs-compsize パッケージの compsize コマンドで extent の数を確認できますので、試してみてください。
(具体的に、明確の sync がなければ複数の write でも結合されて一度で書き込みされますし、sync しても最後の extent が小さい場合はその extent を読み返して置き換えられています。in-place の書き込みでも eMMC の wear leveling で <4K の write で同じ事が裏で行ってますので、実際のコストは少ないと考えています)
また、他の影響としては CoW を無効化すると checksum (や圧縮)が無効になりますので、負担が少し減る分にはログの安全性が下がります(電源切断時の化け方にも影響あります)
ログの量によるかもしれませんが、一日に数十メガバイトまででしたら eMMC の寿命としても CPU の負担としても CoW を残してもいいと思いますし、チェックサムを残した方が好ましいと考えています。
※ sqlite の場合は CoW 無効化前に wal モードを有効化した方が大きく影響しますので、sqlite でもほとんどの場合に CoW を残していいと考えています
よろしくお願いします。