Block multi-queue | My Note

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能力。

传统单队列框架存在的问题

Multi-queue 架构分析

现在的多队列框架

Multi-queue 架构分析

#QUESTION : 目前硬件队列和软件队列的映射关系是如何确定的?有什么限制吗?

一些研究

  1. blk-mq 存在这样的问题:Software Queue只能对应一个Hardware Queue,这样子的话,在单个core上同时运行延迟敏感型应用和吞吐敏感型应用时,吞吐敏感型应用会把队列阻塞住,产生Head of Line现象,导致延迟敏感型应用的延迟表现非常糟糕。在这样的背景下,blk-switch[1]优化了Software Queue和Hardware Queue的对应关系:每个应用类别有自己的Software Queue,对于吞吐敏感型应用,还可以将自己的请求转发到别的核上的Hardware queue来处理。

参考资料

  1. kernel docs
  2. SYSTOR’13 Linux Block I/O
  3. Multi-queue 架构分析
  4. Linux Multi-Queue Block IO Queueing Mechanism (blk-mq) Details
  5. 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]

Instead of authenticating the giscus application, you can also comment directly on GitHub.


Notes mentioning this note