一般的基本request queue和io scheduler的bio请求处理
standard request handling
1.
generic_make_request -> make_request_fn (blk_queue_bio calls io_scheduler to merge/append the request into the associated request queue)
2.
dirver unplug -> q->request_fn (driver registered while initing the queue) -> blk_fetch_request (return a request from queue and start a timer for it) -> driver starts io
unplug from scheduler
1.
schedule -> sched_submit_work -> blk_schedule_flush_plug -> blk_flush_plug_list -> queue_unplugged -> blk_run_queue_async -> mod_delayed_work(kblockd_workqueue, &q->delay_work, 0)
2.
kblockd_workqueue scheduled -> blk_delay_work (q->delay_work) -> __blk_run_queue -> __blk_run_queue_uncond -> q->request_fn (driver registered)
job done & wake up request task
1.
driver dma done & irq arrived -> queue_work(driver_wq, <request_done>)
2.
driver_wq scheduled -> __blk_end_request -> __blk_end_bidi_request -> blk_finish_request -> __blk_put_request -> freed_request -> wake_up(&rl->wait[sync])
generic block layer io request processing
最新推荐文章于 2024-01-21 20:36:58 发布