Block multi-queue
Updated: Sep 21st, 2023
blk-mq属于Linux Storage Stack中的Block Layer。
在如今的低延迟、高吞吐的新型存储设备下,原有的为HDD实现的单队列I/O框架成为了存储系统的瓶颈。单队列I/O框架一方面锁竞争导致其多核扩展性较差,同时会带来远程内存访问的问题,另外也无法充分利用如今支持多硬件队列的高性能存储设备,如SSD的优势。因此blk-mq框架提出了多软件队列-多硬件队列的I/O模型。首先每个核一个软件队列,提升了软件队列一层的扩展性(可以各自进行请求调度、聚合),然后不同的软件队列映射到不同的硬件队列中,充分利用硬件中的并行I/O能力。
传统单队列框架存在的问题
现在的多队列框架
#QUESTION : 目前硬件队列和软件队列的映射关系是如何确定的?有什么限制吗?
一些研究
- blk-mq 存在这样的问题:Software Queue只能对应一个Hardware Queue,这样子的话,在单个core上同时运行延迟敏感型应用和吞吐敏感型应用时,吞吐敏感型应用会把队列阻塞住,产生Head of Line现象,导致延迟敏感型应用的延迟表现非常糟糕。在这样的背景下,blk-switch[1]优化了Software Queue和Hardware Queue的对应关系:每个应用类别有自己的Software Queue,对于吞吐敏感型应用,还可以将自己的请求转发到别的核上的Hardware queue来处理。
参考资料
- kernel docs
- SYSTOR’13 Linux Block I/O
- Multi-queue 架构分析
- Linux Multi-Queue Block IO Queueing Mechanism (blk-mq) Details
- High Performance Storage with blk-mq and scsi-mq
相关文献
[1]
J.
Hwang, M. Vuppalapati, S. Peter, and R. Agarwal, “Rearchitecting
Linux Storage Stack for µs Latency and High Throughput,” 2021,
pp. 113–128 [Online]. Available: https://www.usenix.org/conference/osdi21/presentation/hwang.
[Accessed: 23-Jul-2021]