Kernel ext4
-
Upload
kai-sasaki -
Category
Technology
-
view
149 -
download
1
Transcript of Kernel ext4
ext4• ext3の後継として開発された
• Linux2.6.19から利用可能
機能 ext3 ext4
最大ファイルサイズ 2TB 16TB
ブロック管理方式 間接参照ブロック方式 エクステント方式 + 間接参照ブロック方式
遅延ブロック確保 - ○
タイムスタンプの単位 ミリ秒 ナノ秒
直接参照ブロック方式block1
block2
block3
block4
block5
block6
block7
inode
例えば1GBのファイルをもつだけで 1G/4K = 262144
のエントリを消費してしまう
エクステント方式• 論理ブロックファイルの先頭からブロックサイズで分けた単位
• 物理ブロックブロックデバイス上のオフセットをブロックサイズで分けた単位
• エクステント論理ブロックと物理ブロックを一対一に対応させるための単位
ext4の作成とマウント$ sudo su # ファイルシステムをデバイス上に作成 # mkfs -t ext4 /dev/sda1
# 作成されたデバイスをext4としてマウント # mount -t ext4 /dev/sda1 /mnt
# 既存のext2,ext3のディスクイメージを# ext4として再マウントすることもできる # mount -t ext4 /dev/DEV MOUNTPOINT
ext4への移行先の方法で移行は可能だけれどext4の多くの機能が無効化されたままになっている→ e2fsprogsを利用する
$ sudo su # e2fsprogsに含まれるtunefsコマンドを使って # エクステント機能を有効にする # tune2fs -O extent /dev/sda1
ext4への移行機能が有効化されたかどうかは同じくe2fsprogs に同封されているdebugfsコマンドを利用する
$ debugfs -R stats /dev/xvda1 Filesystem volume name: cloudimg-rootfs Last mounted on: / … Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recoveryextent flex_bg # <- extentがある
※ただしextent機能に関してはtune2fsコマンドで無効化できない
ext4のチューニングext4は/sys/fsにチューニングに関する特殊ファイルを持っている
$ ll /sys/fs/ext4/xvda1/ total 0 drwxr-xr-x 2 root root 0 Apr 8 11:52 ./ drwxr-xr-x 4 root root 0 Apr 8 11:52 ../ -r--r--r-- 1 root root 4096 Apr 8 11:52 delayed_allocation_blocks -rw-r--r-- 1 root root 4096 Apr 8 11:52 err_ratelimit_burst -rw-r--r-- 1 root root 4096 Apr 8 11:52 err_ratelimit_interval_ms -rw-r--r-- 1 root root 4096 Apr 8 11:52 extent_max_zeroout_kb -rw-r--r-- 1 root root 4096 Apr 8 11:52 inode_goal -rw-r--r-- 1 root root 4096 Apr 8 11:52 inode_readahead_blks -r--r--r-- 1 root root 4096 Apr 8 11:52 lifetime_write_kbytes -r--r--r-- 1 root root 4096 Apr 8 11:52 max_writeback_mb_bump -rw-r--r-- 1 root root 4096 Apr 8 11:52 mb_group_prealloc …
lifetime_write_kbytes• ファイルシステムに書き込まれたデータ総量を表す
• 書き込み制限のあるSSDなどにマウントしている場合には寿命予測のため重要なメトリクスになる
• mountしてからの値が知りたければsession_write_kbytesを見る
# cat /sys/fs/ext4/xvda1/lifetime_write_kbytes 1294237 # <- kb単位
# cat /sys/fs/ext4/xvda1/session_write_kbytes 238196
lifetime_write_kbytes
$ cat /sys/fs/ext4/xvda1/session_write_kbytes 238196 $ dd if=/dev/urandom of=/tmp/file bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 9.83144 s, 10.7 MB/s $ cat /sys/fs/ext4/xvda1/session_write_kbytes 340692
mb_stream_reqext4ではマルチブロック確保処理を実装- group PA (group事前確保)- inode PA (inode事前確保)
group PAでは対象となるファイルブロックを物理的に近い領域に配置する。inode PAではあるひとつのファイルを物理的に連続した領域に配置する。
mb_stream_reqext4ではマルチブロック確保処理を実装- group PA (group事前確保)- inode PA (inode事前確保)
group PAでは対象となるファイルブロックを物理的に近い領域に配置する。inode PAではあるひとつのファイルを物理的に連続した領域に配置する。
どういう場合に使い分けられるか?
mb_stream_req/* * files smaller than MB_DEFAULT_STREAM_THRESHOLD are served * by the stream allocator, which purpose is to pack requests * as close each to other as possible to produce smooth I/O traffic * We use locality group prealloc space for stream request. * We can tune the same via /proc/fs/ext4/<parition>/stream_req */ #define MB_DEFAULT_STREAM_THRESHOLD 16 /* 64K */
- 16ブロック以下: group PA- それ以上: inode PA
設定ファイルなどは16ブロック以下のためgroup PAにより物理的に 局所化され、起動時のディスクシークが短くてすむ
スナップショット• CoWの下でB-treeを利用することで効率的な スナップショットが可能になる
root #0
branch A branch B branch C
“A” “B” “C” “D” “E” “F”
root #0
branch A branch B branch C
“A” “B” “C” “D” “E” “F”
root #1
複数デバイス• ひとつのファイルシステム下に複数のブロックデバイスを登録する機能
• ソフトウェアRAIDの機能も備えているRAID0, RAID1, RAID10, RAID5, RAID6 が実装されている
# btrfs device add <Disk Device> <Path>
透過的圧縮ファイル書き込み時にBtrfsが自動でデータを圧縮してデータを書き出す
アプリケーションで意識することなるディスク使用量を節約することが可能
# mount -t btrfs -o compress=lzo <Dev> <Mnt>