커널의 어느 부분이 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/

관련 정보