[Linux Kernel Block Layer第一篇] block layer架构设计

Block-layer bounce buffering bounces out of the kernel 因此,Hellwig 提交了一组补丁,使得在启用了高端内存支持的系统上,这四个驱动全部无法加载,从而将 bounce buffer 的用户数量归零。将这些内存分配给用户空间确实缓解了燃眉之急,但不久之后,内核无法将高端内存用于自身操作的问题也暴露出来:可用于内核的低端内存实在太少,难以支撑系统高效运行。有趣的是,添加到 2.3.27 的 bounce buffering 代码中曾留有一条注释,说它将在 2.5 版本中“移动到块层”,因为当时计划对块设备代码进行一次大规模重构。在某些情况下它仍是不可避免的。 阅读详情

目录

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. 问题

看到上面架构图之后我们会想到很多的问题:

  1. block layer怎么支持配置hardware queue的数量和队列深度?
  2. 如果存在多个hardware queue时,怎么管理software queue和hardware queue的映射关系
  3. block layer什么时候将software queue数据转发到hardware queue,以及hardware queue是怎么转发数据到block driver
  4. blk-mq架构内核是支持io scheduler算法的:比如kyber或者mq-deadline,这种调度算法引入之后,调度算法内部的队列和上图中software queue是什么关系?

上述问题在后续的分析文章当中都会一一得到答案。

T113-S3 SPI NAND 启动失败排查:从 Kernel Panic 到 rootfs 挂载的 3 种解决方案 本文详细解析了全志 T113-S3 平台从 SD 卡切换至 SPI NAND 存储介质时,系统启动出现 Kernel Panic 和 rootfs 挂载失败的三大解决方案。重点涵盖 UBI 配置匹配、SPI NAND 驱动支持验证及系统编译选项检查,帮助开发者高效解决嵌入式存储介质切换的典型问题。 阅读详情

相关推荐

Qwen3.5 GDN Prefill Kernel优化:面向真实部署的CUDA底层重构

Prefill阶段是大语言模型推理的关键瓶颈,其性能本质取决于计算、访存与硬件特性的深度协同。传统通用attention kernel因采用保守内存布局、固定warp调度和高频kernel launch,在处理Qwen系列特有的GDN(Generalized Dynamic Ngram)机制时,极易引发显存带宽浪费、shared memory bank冲突及CUDA运行时错误。本文聚焦Prefill底层优化原理,解析如何通过数据驱动的内存访问设计、BNDS张量布局重构、chunked prefill ker

congji3817的博客 428

linux block layer第一篇bio 子系统数据结构及初始化

介绍: block layer在内核中起着承上(文件系统层)启下(设备驱动层)的作用,struct bio是block层的基本数据结构,可以理解成将bio输入block层,由block layer对其加工处理,然后再输出给底层。与bio相关的代码涉及bio内存管理、提交、合并拆分、完成时的回调处理等内容,是内核中一个很小的子系统,该文对其中涉及的代码进行分析,作为笔记,以备查阅。 内核源码:linux-5.10.3 bio数据结构 bio是block层最基本的结构,用来描述io请求属性及状态。从内

geshifei的博客 8829

Unity3D 集成 SQLite 数据库实战:从零搭建到数据可视化

本文详细介绍了在Unity3D项目中集成SQLite数据库的完整实战流程。从SQLite的轻量、稳定、易用特性讲起,逐步指导开发者完成环境配置、驱动集成、C#脚本编写(涵盖连接、建表、增删改查),并进阶演示了数据模型封装与在Unity UI中实现数据可视化的方法。最后提供了多线程访问、路径差异、性能优化等关键避坑指南,帮助开发者构建可靠高效的本地数据管理方案。

weixin_29291069的博客 91

从存储UFS角度梳理Linux系统框架,包括文件系统层、Block层、驱动层

从存储UFS的角度汇总一些Android系统知识

u010479987的博客 3794

ubuntu通过qemu安装银河麒麟V10_Arm_v8 (kylin_v10_飞腾/鲲鹏版)

一、windows下安装vmware虚拟机 二、ubuntu下载地址 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.3-live-server-amd64.iso 三、vmware中新建虚拟机,并使用ubuntu-20.04.3-live-server-amd64.iso作为启用盘 。。。在虚拟机中安装ubuntu(略) 四、配置ssh(如果ssh登录不上时配置) 修改openssh的配置 vi /etc/s

u010533742的博客 8703

macOS 12.7.6部署Ollama+Dify避坑指南

本文介绍了在macOS 12.7.6系统下部署Ollama和Dify的详细步骤及避坑指南。主要内容包括:1)关闭系统完整性保护(SIP)以允许修改系统目录;2)安装特定版本的Docker(2.1.0.5)和docker-compose(v2.38.2)以避免兼容性问题;3)配置Ollama服务并下载nomic-embed-text和deepseek-r1:7b模型;4)针对macOS调整Dify的docker配置文件,包括延长超时时间、修改存储路径、增加资源限制等关键设置。文中提供了完整的命令操作步骤和配置

Hi20240217的博客 3100

linux IO Block layer 解析

早期的 Block 框架是单队列(single-queue)架构,适用于“硬件单队列”的存储设备(比如机械磁盘),随着存储器件技术的发展,支持“硬件多队列”的存储器件越来越常见(比如 ...

内核工匠 6564

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 添加getchar();代码块解决无法查找或打开PDB文件。 错误提示: “Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Pro...

m0_46523403的博客 6416

Linux图形化配置界面memuconfig详解(三)-Enable the block layer

启用块图层。

weixin_44192279的博客 460

1.5元主控搞定高精度电流电压采集?STC8G1K08+INA180A3硬件设计全解析

本文详细解析了如何利用成本仅1.5元的STC8G1K08单片机与INA180A3电流检测放大器,构建一套高精度、低成本的电流电压采集系统。文章深入剖析了硬件设计精髓,包括利用MCU内部上拉电阻直驱数码管以节省成本、INA180A3的配置与计算,以及实现高频率采集并与上位机高速通信的软件策略,为嵌入式开发中的极致性价比设计提供了完整方案。

weixin_29166013的博客 599

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3366

linux block layer第二篇bio 的操作

摘要 linux block layer第一篇介绍了bio数据结构及bio内存管理,本文章介绍bio的提交、拆分、io请求合并、io请求完成时的回调处理。由于“bio的提交”涉及内容太多,所以该小节只描述一些概要信息,在介绍完multi-queue机制后(待整理),再对着代码细说submit_bio流程。 内核源码:linux-5.10.3 一、bio的提交(submit) 提交bio的函数是submit_bio,这个函数做完account工作统计读写量后,调用submit_bio_noacct进行

geshifei的博客 9693

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7322

Linux Kernel - The Block I/O Layer

固定大小的数据块称为块,常见块设备磁盘有硬盘,闪存等,随机访问,字符设备以序列数据流的方式访问,如键盘输入是一字节接一字节访问。由于块设备的复杂度,访问性能等原因,内核提供了一个子系统进行管理,即 Block I/O Layer。块设备最小可寻址单元称为扇区,扇区大小是一个设备的物理属性,大部分块设备为 512 B,CD-ROM 磁盘为 2KB。 ...

wu472269100的专栏 573

MoveIt 运动学、运动规划、混合规划、move_group

混合规划是运动规划方法的一个术语,它将异构运动规划器结合起来,以产生更稳健或反应更快的解决方案。这种通用方法在导航领域已经非常成熟,并在导航2等流行项目中成功实施。MoveIt 的混合规划架构结合了一对全局规划器和局部规划器,它们以不同的规划速度和问题范围并行、并发运行。全局规划器的任务是解决全局运动规划问题,这与 “感知-规划-行动 ”应用中使用的规划器非常相似。所使用的规划器算法应该是完整的,因此假定其计算时间相对较慢。此外,全局规划器不要求实时安全,这意味着无法保证规划器在特定期限内找到解决方案。

机器人控制与仿真应用 2131

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Linux3.19内核block层出现新变化,增加 multi-queue block layer

最近Linux的最新内核已经release到Linux-3.19-rc6,根据Linus的release note,大约再经过一次rc7版本就可以正式release了。Linux 3.19内核在block层的最大变化就是增加了一个multi-queue block layer,来更好的支持类似于NVME等支持multi-queue机制的设备。所谓的multi-queue机制就是在多核CPU的情况下

LDD施工队 8420

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux kernel block layer multi-queue

csdn_yds的专栏 897

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Linux arm 3.6.0kernel Configuration的menuconfig

在linux文件夹下,使用make menuconfig命令得到下面图案 General setup  --->    一般设置                                                                    Enable loadable module support  ---> 启用可装入模块支持       

无名的博客 940

linux block framework(4) - kernel devices.txt

LINUX ALLOCATED DEVICES (4.x+ version) 3 4 This list is the Linux Device List, the official registry of allocated 5 device numbers and /dev directory nodes for the Linux operating 6 system. 7 ...

weixin_41028621的博客 12万+

Linux那些事儿之我是Block层(引子)

很久以前,天还是蓝的,水也是绿的,庄稼是长在地里的,猪肉是可以放心吃的,耗子还是怕猫的,法庭是讲理的,上床是先结婚的,理发店是只管理发的,药是可以治病的,医生是救死扶伤的,拍电影是不需要陪导演睡觉的,照相是要穿衣服的,欠钱是要还的,孩子的爸爸是明确的,学校是不图挣钱的,白痴是不能当教授的,卖狗肉是不能挂羊头的,男就是男的女的就是女的.那时候Block层还是一部分附属于drivers/目录下一部分附

1万+

Linux Block Driver 分析

前段时间看了Linux Block Layber的相关代码,主要看了Linux最简单的IO调度器NOOP的实现。接下来总结下Linux BLOCK层work flow的机制。继续把SCSI 探测设备这一部分的内容添加进来。Block driver分析:从makefile入手# #Makefileforthekernelblocklayer # obj-$(CON...

weixin_34217711的博客 895

Kimi K2.5 Step 3.5:Flash Attention与Kernel级动态调度深度解析

大模型推理性能瓶颈已从计算转向访存与调度——核心矛盾是GPU计算单元与HBM内存带宽之间的‘带宽鸿沟’。Flash Attention通过Shared Memory优化qk^T计算,显著缓解访存压力;而Kernel级调度则进一步将算子融合、动态稀疏、异步卸载等能力下沉至CUDA内核层,实现计算-访存-调度的协同闭环。这种‘软硬协同’架构大幅提升长上下文、混合长度请求下的稳态吞吐密度与P99延迟稳定性,尤其适用于实时对话、多轮推理与文档分析等高要求场景。Kimi K2.5的Step 3.5正代表了这一技术演进

culi3182的博客 762

移植sbull至kernel version > 2.6.31

移植sbull至kernel version > 2.6.31      最近在看LDD3和ULK,学习kernel中块设备的驱动机制,kernel 2.6中block layer API已经变更了许多,主要有以下几点: 1. 对于request的请求处理机制,去除掉了原先的elv_next_request和blk_dequeue_request结构,取而代之的是blk_peek_

nevil的专栏 833

linux内核编译选项详解(二):Loadable Module and Block Layer Support

<br />[*] Enable loadable module support  ---><br /> 打 开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译 后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在 运行时可以使用modprobe命令来加载它到内核

zwj0403的专栏 1689

Anthropic Zero-Layer:大模型推理栈的静默蒸发与架构重构

大模型推理栈正经历从显式控制到隐式基础设施的关键演进。所谓‘Zero-Layer’,并非功能删除,而是将Prompt工程、上下文管理、输出格式校验等传统客户端职责,下沉为由厂商统一优化的协议级能力——其本质是LLM应用开发范式的TCP/IP化。这一转变基于token预算动态分配、流式响应语义重定义和KV cache级上下文压缩等底层原理,显著提升推理效率与系统稳定性,同时降低工程维护成本。它适用于构建RAG流水线、自研LLM网关或规模化部署Claude的企业技术团队,尤其影响prompt normaliza

weixin_34353714的博客 435

Anthropic Layer Zero:语义校验环归零带来的推理效率革命

大语言模型推理中的‘语义一致性校验’是保障输出可靠性的基础机制,其原理在于对生成过程中的关键节点进行实时语义偏移检测,以防止逻辑断裂或事实漂移。然而传统全量覆盖式校验带来显著计算冗余,导致长文本场景下延迟激增与资源浪费。技术价值体现在将校验从‘盲目遍历’升级为‘状态感知’,通过静态知识锚点(SKA)和动态决策快照(DDS)实现O(k)级轻量化控制。典型应用场景包括RAG增强检索、低延迟客服引擎、合规文档审查等对确定性与时效性双敏感的工业级AI服务。本文聚焦Anthropic最新落地的Layer Zero架构

迷彩风情 349
上一篇: Linux block_device gendisk和hd_struct到底是个啥关系
下一篇: 终于讲清楚了,Linux Cgroup机制以及其树形结构怎么创建的
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值