本文主要是介绍[Linux Kernel Block Layer第一篇] block layer架构设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1. single queue架构
2. multi-queue架构(blk-mq)
3. 问题
随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构,导致cpu锁竞争问题严重,本文先提纲挈领的介绍内核block layer的架构演进,然后根据最新的架构研究内核源码的实现细节,直击内核block layer本质原理。
1. single queue架构
可以看到整个block layer只有一个硬件派发队列(相对于软件派发队列而言,下面讲到multi-queue架构就知道了),太多了竞争导致性能下降:
2. multi-queue架构(blk-mq)
为了避免多cpu导致的锁竞争,当前内核引入了multi-queue架构,有几层含义:
1. 两层的queue架构
per-cpu的software queue,避免cpu锁竞争
2. hardware queue
充分发挥快速存储设备的并发能力,块设备驱动支持配置多个hardware queue
3. 问题
看到上面架构图之后我们会想到很多的问题:
- block layer怎么支持配置hardware queue的数量和队列深度?
- 如果存在多个hardware queue时,怎么管理software queue和hardware queue的映射关系
- block layer什么时候将software queue数据转发到hardware queue,以及hardware queue是怎么转发数据到block driver
- blk-mq架构内核是支持io scheduler算法的:比如kyber或者mq-deadline,这种调度算法引入之后,调度算法内部的队列和上图中software queue是什么关系?
上述问题在后续的分析文章当中都会一一得到答案。
这篇关于[Linux Kernel Block Layer第一篇] block layer架构设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!