Share
Embed
Transcript
9 slides
-
はなすこと • • ファイルシステムは使い込むほどに同じファイル内のデータがブロックデバイス内 の複数の場所に断片化して性能が劣化していく 極端なケースがBtrfsにランダム書き込みを繰り返したとき ◦ • • その120
コピーオンライト型ファイルシステムと ランダム書き込み この状況を改善するデフラグという機能を紹介 例としてランダム書き込みによって断片化したBtrfs上のファイルのデフラグをする 2 -
実験環境 • • • • OS: Ubuntu 26.04.1 x86_64 kernel:
7.0.0-43-generic ディスク: HDD(SEAGATE ST3000DM001) ファイルシステム: $ mount | grep /mnt/ /dev/sda2 on /mnt/btrfs type btrfs … • ファイル: $ ls -lh /mnt/btrfs/test -rw-rw-r-- 1 sat sat 1.0G Nov 14 20:06 /mnt/btrfs/test $ xfs_io -c fiemap /mnt/btrfs/test /mnt/btrfs/test: 0: [0..2097151]: 8448000..10545151 3 -
ランダム書き込みによるデータの断片化 $ sudo sysctl vm.drop_caches=3 vm.drop_caches = 3 $ dd
if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.87863 s, 136 MB/s $ fio --name=test --filename=/mnt/btrfs/test --rw=randwrite --bs=4k --size=64m --ioengine=sync --fsync=1 … $ xfs_io -c fiemap /mnt/btrfs/test /mnt/btrfs/test: 0: [0..7]: 10632456..10632463 1: [8..15]: 10633560..10633567 … 16335: [131064..131071]: 10552768..10552775 16336: [131072..2097151]: 8579072..10545151 $ sudo sysctl vm.drop_caches=3 vm.drop_caches = 3 $ dd if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 66.5081 s, 16 MB/s 4 -
btrfsでファイルをデフラグする方法 • btrfs filesystem defragmentコマンド 📝 btrfsコマンドは長いので省略して ”btrfs fi def”のように書ける
◦ • 特徴 ◦ ◦ ファイル/ディレクトリ単位で実行。再帰的に実行もできる コマンドはデフラグが終わったら完了 5 -
実行結果 $ btrfs fi def /mnt/btrfs/test $ xfs_io -c fiemap
/mnt/btrfs/test /mnt/btrfs/test: 0: [0..62975]: 12642304..12705279 1: [62976..63487]: 14739456..14739967 2: [63488..115199]: 12705280..12756991 3: [115200..131071]: 14739968..14755839 4: [131072..2097151]: 8579072..10545151 $ sudo sysctl vm.drop_caches=3 vm.drop_caches = 3 $ dd if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.08959 s, 133 MB/s 6 -
btrfs filesystem defragmentコマンドの詳細 • 様々なオプションがある ◦ ◦ • -s, -l:
ファイル内でデフラグする領域を指定する -t: サイズがnバイト以上の領域 (extent)はデフラグ対象にしない 内部的には雑に言うとファイルを前から順番に読み出してシーケンシャルに書いて いるだけなので、次のような難点がある ◦ ◦ ◦ ファイルサイズが大きいほど時間がかかる read only snapshotはデフラグできない 他のファイルとのデータ共有が解除される ▪ 📝 duperemoveコマンドで共有を復活されることもできる 7