Linux memo 2020/02/04

● SIGKILLのハンドル
SIGKILLはユーザランドでシグナルハンドリングできずそのままプロセスが終了させられる。が、しょせんはシグナルの扱いなので、kernel内では他のシグナルと同様の扱いをされる。つまり、寝ていたタスクは起こされ、kernel空間の外へ追い出す方向に処理が進み、システムコールの呼び元の直前までいって、そこでタスク終了処理が行われる。

ただ、SIGKILLは、スレッドが終了するだけでなくプロセスが終了するので、SIGKILLをハンドルしたタスク以外の同じプロセスに属する他のタスクも終了する。それがどこで行われているかというと、kernel/kernel/signal.cのcomplete_signal()の後半、sig_fatal()のときにwhile_each_thread()で&t->pending.signalにSIGKILLを立てている。つまり、最初にシグナルを受けたスレッドと比較して起こされるまでちょっとだけ遅延する。

● ext4のinodeのブロックマッピング
filefrag(8)コマンドを使えば、inodeの中身の論理位置とblockデバイスの位置とのマッピングを表示できる。
filegragはioctl(FS_IOC_FIEMAP)で情報を取得している。
ext4のextentでできるだけ物理連続にfilemapを作ろうと思った場合、ioctl(FALLOC_FL_KEEP_SIZE)もしくはposix_fallocate(3)でpreallocするという方法がある。
参考:C言語で、作成したファイルが断片化しないようにする方法。(Linux編) - Qiita
https://qiita.com/Sickly_Life/items/d1c73ca2b497910576fc

● ext4のquotaの設定
ext4でquotaを使うかどうかは、superblockのFilesystem featuresにquotaが立っているかどうかで決まる。
quotaの情報は、Filesystemの中の隠しinodeに記載されている。inode番号は、EXT4_USR_QUOTA_INO(==3), EXT4_GRP_QUOTA_INO(==4)のもの...じゃなくて、superblockのs_usr_quota_inum, s_grp_quota_inum, s_prj_quota_inumに記載された番号になる。通常は、mkfs.ext4やtune2fsがFilesystemを作るときに、EXT4_USR_QUOTA_INO, EXT4_GRP_QUOTA_INOを指定しているはず。(Todo: s_prj_quota_inumの初期値)
quotaを使うためにはCONFIG_QUOTAを有効にする必要がある。ext4はkernel/fs/quota/以下にある共通コードを使ってQUOTA機能を実現する。inodeの中身を直接渡して、中身には踏み込まずに、QUOTQ機能を実装しているようにみえる(ToDo: inodeの中身)
参考:ext4のDisk Quotaあれこれ - Qiita
https://qiita.com/takeoverjp/items/0f4966bbead0b5e3bf4f
ちなみに、quotaに限らず、inodeの中身をダンプしたい場合はdebugfs(8)コマンドのdumpが使える。

このブログ記事について

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

ひとつ前のブログ記事は「LIFEBOOK WU2/C3 SSD載せ替え」です。

次のブログ記事は「「みずほ銀行システム統合、苦闘の19年史 史上最大のITプロジェクト「3度目の正直」」読んだ」です。

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

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0