通过本文你可以学习到以下内容:
- linux i/o的基本原理,同步和异步i/o的流程分别是怎样的
- 学习使用biosnoop工具分析i/o性能
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) <