カーネルのどの部分がioリクエストを管理しますか?

カーネルのどの部分がioリクエストを管理しますか?

私はブロックI / Oレイヤーを知っていますLinux I/O スタックI / O要求を管理してスケジュールします。しかし、このコードがどこにあるのかわかりません。実際、私はこの階層に対応するカーネルのコード部分を見たいと思います。

答え1

IOスケジューリングはblk_finish_plug関数呼び出しから始まり、この関数自体はIOスケジューラーのエレベーター_add_req_fnメソッドを呼び出します。

以下は、新しいIOの書き込み保存フェーズを追加するためにこの関数を呼び出す例です。

#0  deadline_add_request at block/deadline-iosched.c:102
#1  __elv_add_request at block/elevator.c:717
#2  blk_flush_plug_list at block/blk-core.c:2746
#3  blk_finish_plug at block/blk-core.c:2762
#4  generic_writepages at mm/page-writeback.c:1052
#5  do_writepages at mm/page-writeback.c:1065
#6  writeback_single_inode at fs/fs-writeback.c:388
#7  writeback_sb_inodes at fs/fs-writeback.c:549
#8  writeback_inodes_wb at fs/fs-writeback.c:592
#9  wb_writeback at fs/fs-writeback.c:724
#10 wb_check_background at fs/fs-writeback.c:804
#11 wb_do_writeback at fs/fs-writeback.c:879
#12 bdi_writeback_thread at fs/fs-writeback.c:913
#13 kthread at kernel/kthread.c:96

スタックトレースに記載されているファイル、特にblk-core.cファイルのblk_finish_plugメソッドを表示できます。遮断の仕組みの詳細については、以下で確認できます。https://lwn.net/Articles/438256/

関連情報