iodepth 跟 linux 内核中 blk-mq 有关系吗?
iodepth 跟 linux 内核中 request_queue 有关系吗?
有没有大佬能详细解释一下,最好能从内核代码层面说清楚 iodepth 的实际作用。
1
liuchao719 2022-09-13 10:22:53 +08:00 1
看了一些回答,总结一下:iodepth 是控制异步 ioengine 的提交队列深度,如果正在执行的 I/O 数量达到了 iodepth ,就需要等待之前的执行完才可以继续提交;和 kernel 没有关系。
[1]. https://fio.readthedocs.io/en/latest/fio_doc.html#i-o-depth [2]. https://unix.stackexchange.com/questions/459045/what-exactly-is-iodepth-in-fio [3]. https://unix.stackexchange.com/questions/460491/how-does-fio-benchmark-set-iodepth |
2
litguy 2022-09-13 10:52:25 +08:00 1
iodepth 就是你提交给 OS 的最大未完成 io 数
也就是 fio 最多能提交多少 io 给 os 后端性能足够的情况下,这个值越大,iops 越高,但是会导致 io 服务的延迟增加 如果不想过多研究,可以认为和 kernel 没关系 因为这个是应用层自己确定自己要给下层发多少 io 进去的 事实上和 kernel 的这两个东西有关系 因为最终都要进入 block layer 的 queue 中排队 严格来说和更底层的硬件本身也有关系 在 SATA 时代,设备有上限,一个设备一个队列,单队列这个值最大只有 32 NVME 时代因为多队列,队列深度大大增加,可以看作无限制 因为限制到达前设备自己先吃不住了 |