1. linux i/o基本原理

linux对每个磁盘或分区都维护有一个请求队列,i/o算法会进行操作的合并重排等操作以优化性能。
1.1 内核中几个重要的函数:
- blk_account_io_start/__blk_account_io_start: i/o请求放入request_queue
- blk_start_request/blk_mq_start_request: 内核将i/o请求从队列中取出并实际发送给具体的块设备处理
- blk_account_io_done/__blk_account_io_done: 块设备处理完i/o请求
2.常见路径:
2.1 i/o请求放入request_queue
- 通常我们写文件操作是异步的,写入操作只是写的文件关联的page_cache,有内核线程异步将page_cache写回块设备(生成bio请求并放入request_queue)
- direct_io或者sync操作会直接生成bio请求并放入request_queue.
Linux I/O 深入理解:从请求队列到设备处理
本文探讨了Linux I/O的基本原理,包括内核如何通过request_queue管理I/O请求,以及从队列中取出并提交给块设备处理的过程。重点介绍了blk_account_io_start和blk_start_request等关键函数的作用,并阐述了块设备完成I/O请求后的通知机制。
订阅专栏 解锁全文
422

被折叠的 条评论
为什么被折叠?



