Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コピーオンライト型ファイルシステムと ランダム書き込み

コピーオンライト型ファイルシステムと ランダム書き込み

以下動画のスライドです
https://youtu.be/2cRETcddWHA

Satoru Takeuchi PRO

November 14, 2026

Transcript

10 slides
  1. はなすこと • 過去にコピーオンライト型書き込みのファイルシステムについて紹介した その112 システム強制終了時にファイルシステムの整合性を保つ ~ コピーオンライト編 ~ ◦ •

    そこに書いた以下の文言について実機確認 • 細かい書き込みが続くとデータが断片化して性能が落ちがち ◦ • とくにランダム I/Oに弱いHDD 比較対象 ◦ ◦ ext4: ファイル更新時、元々データがあった場所に書き込む Btrfs: ファイル更新時、別の場所に書き込む (コピーオンライトする ) 2
  2. 実験環境 • • • • OS: Ubuntu 26.04.1 x86_64 kernel:

    7.0.0-43-generic ディスク: HDD(SEAGATE ST3000DM001) ファイルシステム: $ mount | grep /mnt/ /dev/sda1 on /mnt/ext4 type ext4 … /dev/sda2 on /mnt/btrfs type btrfs … • ファイル: $ ls -lh /mnt/ext4/test -rw-rw-r-- 1 sat sat 1.0G Nov 14 20:04 /mnt/ext4/test $ ls -lh /mnt/btrfs/test -rw-rw-r-- 1 sat sat 1.0G Nov 14 20:06 /mnt/btrfs/test 3
  3. ファイルの連続性とスループット性能 • /mnt/<ファイルシステムタイプ>/testはブロックデバイス内で連続 $ xfs_io -c fiemap /mnt/ext4/test /mnt/ext4/test: 0:

    [0..507903]: 278528..786431 1: [507904..1015807]: 802816..1310719 2: [1015808..1523711]: 1327104..1835007 3: [1523712..2031615]: 1851392..2359295 4: [2031616..2097151]: 2375680..2441215 $ xfs_io -c fiemap /mnt/btrfs/test /mnt/btrfs/test: 0: [0..2097151]: 4253696..6350847 • シーケンシャル読み出しのスループットはほぼ同じ # echo 3 >/proc/sys/vm/drop_caches … $ dd if=/mnt/ext4/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.86796 s, 136 MB/s $ dd if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.95307 s, 135 MB/s 4
  4. 2つのファイルに細かいランダム書き込み • 4KiBのランダム書き込みを合計64MiB実施 ◦ 1回書き込むごとにデータをディスクに同期させる $ fio --name=test --filename=/mnt/ext4/test --rw=randwrite

    --bs=4k --size=64m --ioengine=sync --fsync=1 … $ fio --name=test --filename=/mnt/btrfs/test --rw=randwrite --bs=4k --size=64m --ioengine=sync --fsync=1 … 5
  5. 2つのファイルに細かいランダム書き込み • 4KiBのランダム書き込みを合計64MiB実施 ◦ 1回書き込むごとにデータをディスクに同期させる $ fio --name=test --filename=/mnt/ext4/test --rw=randwrite

    --bs=4k --size=64m --ioengine=sync --fsync=1 … $ fio --name=test --filename=/mnt/btrfs/test --rw=randwrite --bs=4k --size=64m --ioengine=sync --fsync=1 … • この後それぞれのファイルをシーケンシャル読み出しするとどうなるか? 6
  6. ext4の場合 • in-place書き込みなのでデータは依然連続 $ xfs_io -c fiemap /mnt/ext4/test /mnt/ext4/test: 0:

    [0..507903]: 278528..786431 1: [507904..1015807]: 802816..1310719 2: [1015808..1523711]: 1327104..1835007 3: [1523712..2031615]: 1851392..2359295 4: [2031616..2097151]: 2375680..2441215 • シーケンシャル読み出しのスループットも変わらない $ sudo su root@coffee:/home/sat# echo 3 >/proc/sys/vm/drop_caches … sat@coffee:~$ dd if=/mnt/ext4/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.81697 s, 137 MB/s 7
  7. Btrfsの場合 • 書き込むごとにデータが移動し、最終的には16000個以上に断片化 $ xfs_io -c fiemap /mnt/btrfs/test /mnt/btrfs/test: 0:

    [0..7]: 6438152..6438159 1: [8..15]: 6439256..6439263 … 16335: [131064..131071]: 6358464..6358471 16336: [131072..2097151]: 4384768..6350847 • シーケンシャル読み出しのスループットも約88%劣化 # echo 3 >/proc/sys/vm/drop_caches … $ dd if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 66.4659 s, 16 MB/s 8

More Decks by Satoru Takeuchi

Other Decks in Technology