知识卡片

bio-request-request_queue的三层结构

专业/工作 · 551.g

内容

Linux块层用三层结构描述一次I/O在内核中的流转:bio描述磁盘上一块连续位置与Page Cache中若干页之间的映射关系,是最基本的I/O单元;多个连续的bio会被合并成一个request,代表一次具体的I/O请求;request再进入该块设备专属的request_queue排队等待被驱动处理。当固态硬盘的响应能力达到每秒几十万次而不是机械硬盘的几百次时,所有I/O集中排在一个队列上会造成中断集中到单个CPU、多核访问同一队列产生锁竞争,于是块层引入了多队列模型(blk-mq),让不同CPU核心可以并行提交和处理各自队列上的请求。发散:这是”单一瓶颈资源随负载能力提升而被拆分为多份”的典型案例,和网络协议栈从单队列网卡走向RSS多队列网卡是同一动机。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第3章《Linux存储栈》