Linux memo 2020/04/07 ext4編

● discard(block)
mqが入ってきたあたりから設計の変更がよくわからん、、
ioctlからはBLKDISCARD BLKSECDISCARDができる。
secure(BLKDEV_DISCARD_SECURE)はioctlからしか来ない。
これらioctlを叩くためのコマンドとしてblkdiscard(util-linux)がある、BLKZEROOUTもできるらしい。
fstrimコマンド(util-linux)は、ioctlでFITRIMをFilesystemに送る。
ext4に限らずFilesystemは、このioctlに対し、すべての未使用領域へblk discardする。

● discard(Filesystem)
ext4: デフォルトオプションでdiscardが指定されている場合、もしくはmount時にdiscardを指定すると、ファイルを消したときに__blkdev_issue_discard()などからREQ_OP_DISCARDなどを発行する。
fat: discardのmountオプションを指定すると、ファイルを消したときにsb_issue_discard()からREQ_OP_DISCARDなどを発行する
f2fs: discardオプションはデフォルトで有効っぽい?foreground(同期ガベコレ)とbackground(issue_discard_thread())とでやってるっぽい。
ただ、Filesystemで都度DISCARDするやり方は最近は、パフォーマンス面であまり選ばれない。よほど大きいサイズ限定でやるか、fstrimのようなメンテ時だけの処理にするか、な感じかと思う。
f2fsだけは、Filesystemの構造が違う点からも、実際はどう使われてんのかよくわからない。

● 書き込み回数サマリ
/proc/sys/vm/block_dumpを見れば、submit_bio()したcomm, pid, W/R, bi_sector, devname, countがわかる。
blktraceで書き込みログを取る方法もある。
あとはこんな記事。
https://qiita.com/takeoverjp/items/7d5d74858220d1dff46d
eMMCの場合は、泥臭くても、ops->request()の直前(__mmc_start_request())にpr_infoでも入れるのが簡単だと思う

● ext4のcrtime対応
ext4にはinodeにi_crtimeを含むが、これを取り出す方法が長らくdebugfsコマンドくらいしかなかった。Linux-4.11からstatxシステムコールが追加されて、これを取り出せるようになった。
kernel/fs/stat.cのcp_statx()
kernel/fs/ext4/inode.cのext4_getattr()

● statfsの空き容量の話
kernel/fs/ext4/super.cのext4_statfs()
ext4_r_blocks_count()と、clusterのs_resv_clusters(オンメモリ)が関連する。
前者は、superblockに書かれたs_r_blocks_countで、rootしか使えない予約領域を表す。
後者は、ext4_set_resv_clusters()で設定される値で、extentが有効な場合にcluster部分に2%(か4096ブロック)の予約を入れるようだ。
ちなみに、関連する似たようなシステムコールは思いの外たくさんあることをはじめて知った。
statfs, fstatfs, statfs64, fstatfs64, statvfs, ustat

● mke2fs.confのルール
Qiitaにまとめたのでこちらを参照。
ext4フォーマットするときはmke2fs.confに注意しようという話
https://qiita.com/rarul/items/0f8e426d6e2d3ff643dd

このブログ記事について

このページは、らるるが2020年4月 7日 02:25に書いたブログ記事です。

ひとつ前のブログ記事は「Linux memo 2020/04/05 eMMC編」です。

次のブログ記事は「Linux memo 2020/04/14」です。

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

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0