BLOCK
文章平均质量分 89
介绍通用block子系统相关知识
HZero.chen
随风潜入夜,润物细无声
展开
-
关于sdcard读写速率慢的问题排查
1.前言前段时间测试同事在用androbench测试sdcard速率时,发现我们的机器总是比对比机器(三星S7)在读写速率方面慢很多,我们的机器读取速率基本在21MB/S左右,而对比机器一般在40MB/S左右。本文就介绍如上问题分析解决的整个过程。2. 启动时的卡模式识别通过启动时的打印可以看到我们的机器在识别卡的速率模式时,主要有两种情况:卡识别情况一通过三星S7对比样机的bugreport可以看到,同样一张卡(sandisk class10 32G UHI卡),三星 s7识别为ultra原创 2022-03-20 23:16:45 · 4774 阅读 · 0 评论 -
nullb driver分析2-nullb初始化流程分析
0.前言文档目的: 主要以null block dev为例来研究多队列的工作机制内核版本:4.19本文主要通过分析null blk块设备的初始化流程,来理解多队列的初始化,流程。1. null_initnull_init |--config_group_init(&nullb_subsys.su_group) |--configfs_register_subsystem(&nullb_subsys) |--register_blkdev(0, "n...原创 2020-11-06 10:56:52 · 723 阅读 · 0 评论 -
nullb driver分析0-环境搭建
目录0.前言1.环境搭建方法使能null block dev driver编译选项挂载configfs文件系统使能null block设备为后备存储设备模拟上电格式化为ext文件系统挂载文件系统2.代码修改3. 测试方法0.前言本系列文章主要从null block dev驱动(位于drivers/block/)着手来分析block多队列机制,本文只是简要说明相关环境搭建的方法。内核版本:kernel 4.191.环境搭建方法使能null block dev driver编译选项本文选择将null原创 2020-11-14 10:38:23 · 631 阅读 · 0 评论 -
nullb driver分析1-基本数据结构说明
0.前言内核版本:4.19文档目的: 主要以null_dev为例来研究多队列的工作机制, 为了能够凸显多队列的工作流程。本文主要罗列了null blk dev设备以及与之关联的多队列的基本数据结构之间的关联,并做简要说明。2.主要数据结构struct nullbnull block设备数据描述符,它包含request_queue,nullb->q->queuedata被初始化为nullb其中list用于链入null block链表的连接件struct.原创 2020-11-09 15:39:22 · 624 阅读 · 1 评论 -
nullb driver分析6-blk-mq相关定时器
目录0.前言1. 多队列的定时器处理函数laptop_mode_timer_fnblk_rq_timed_out_timer/blk_mq_timeout_work(TODO)blk_mq_requeue_work(TODO)blk_delay_work(单队列)0.前言内核版本:4.19文档目的: 主要以null_dev为例来研究多队列的工作机制, 为了能够凸显多队列的工作流程,只对block层做重点分析说明,对其它代码只做注释性说明。本文主要介绍跟多队列相关的定时器,这些定时器的出处来源于blk原创 2020-11-18 15:54:43 · 715 阅读 · 2 评论 -
block多队列分析 - 2. block多队列的初始化
目录1. 前言1. null_init|- -blk_mq_alloc_tag_set|- -blk_mq_init_queue_data1. 前言本专题文章是对多队列部分学习的笔记。主要以null_dev为例来研究多队列的工作机制, 为了能够凸显多队列的工作流程,只对block层做重点分析说明,对其它代码只做注释性说明。本文主要通过分析null blk块设备的初始化流程,来理解多队列的初始化,流程。kernel版本:5.10平台:arm64注:为方便阅读,正文标题采用分级结构标识,每一级用一原创 2021-05-10 17:13:32 · 2115 阅读 · 3 评论 -
nullb driver分析5-读裸设备过程(禁用调度器)
0.前言内核版本:4.19文档目的: 主要以null_dev为例来研究多队列的工作机制。本文主要以ext4文件系统为例,介绍null block dev读流程。注意本文所述流程是在开启blk-mq调度器的情况下进行的,禁用方法为null blk驱动中g_no_sched设为1。1.通过/dev/nullb设备节点读取我们知道在创建设备节点的时候,通过系统调用mknod,最终会为设备文件创建inode,并通过init_special_inode来初始化inode->i_fo.原创 2020-11-14 10:18:05 · 254 阅读 · 0 评论 -
block多队列分析 - 3. 读文件过程
目录1. 前言1.通过文件系统读取nullb上的文件1. 前言本专题文章是对多队列部分学习的笔记。主要以null_dev为例来研究多队列的工作机制, 为了能够凸显多队列的工作流程,只对block层做重点分析说明,对其它代码只做注释性说明。本文主要通过分析文件系统(ext4为例)读取null blk的流程,来理解多队列的读取流程。kernel版本:5.10平台:arm64注:为方便阅读,正文标题采用分级结构标识,每一级用一个"-“表示,如:两级为”|- -", 三级为”|- - -“1.通过原创 2021-05-12 17:23:33 · 1705 阅读 · 0 评论 -
nullb driver分析3-读文件过程(禁用调度器)
0.前言内核版本:4.19文档目的: 主要以null_dev为例来研究多队列的工作机制。本文主要以ext4文件系统为例,介绍null block dev读流程。注意本文所述流程是在关闭blk-mq调度器的情况下进行的。1.通过文件系统读取nullb上的文件(禁用调度器)通过在null blk drv的copy_from_nullb中加dump_stack可以读调用流程通过perf也可以看到类似的流程new_sync_readvfs_read |--rw..原创 2020-11-11 11:02:54 · 832 阅读 · 0 评论 -
nullb driver分析4-读文件过程(使能调度器)
0.前言内核版本:4.19文档目的: 主要以null_dev为例来研究多队列的工作机制。本文主要以ext4文件系统为例,介绍null block dev读流程。注意本文所述流程是在开启blk-mq调度器的情况下进行的,开启方法为null blk驱动中g_no_sched设为0。1.通过文件系统读取nullb上的文件new_sync_readvfs_read|–rw_verify_area(READ, file, pos, count)–__vfs_read(file, buf, count,原创 2020-11-14 09:59:25 · 432 阅读 · 0 评论 -
block多队列分析 - 1.概述
目录1. 前言2. 领域模型1. 前言本专题文章是对多队列部分学习的笔记。主要以null_dev为例来研究多队列的工作机制, 为了能够凸显多队列的工作流程,只对block层做重点分析说明,对其它代码只做注释性说明。本文是概述部分,说明多队列的基本原理,基本框架和工作流程。kernel版本:5.10平台:arm64注:为方便阅读,正文标题采用分级结构标识,每一级用一个"-“表示,如:两级为”|- -", 三级为”|- - -“2. 领域模型nullbnullb为null dev的数原创 2021-05-10 17:13:18 · 2015 阅读 · 1 评论 -
通用block基础学习笔记 - 2. 添加磁盘到系统
目录1. 前言2. 添加磁盘涉及的主要对象3. alloc_disk4. add_disk|- -register_disk|- - -bdget|- - -blkdev_get5. 小结参考文档1. 前言本专题我们开始学习通用block层的相关内容。本专题主要参考了《存储技术原理分析》、ULA、ULK的相关内容。本文介绍添加磁盘到系统的过程。什么时候分配和添加磁盘到系统?底层驱动发现设备希望当做磁盘设备来使用时或块设备驱动程序需要生成一个逻辑设备作为磁盘使用都会执行磁盘添加。在这个过程中,block子原创 2021-04-29 15:55:17 · 2064 阅读 · 0 评论 -
通用block基础学习笔记 - 1.概述
目录1. 前言2. I/O子系统总体结构参考文档1. 前言本专题我们开始学习通用block层的相关内容。本专题主要参考了《存储技术原理分析》、ULA、ULK的相关内容。本文为概述部分kernel版本:5.10FS: minix平台:arm64注:为方便阅读,正文标题采用分级结构标识,每一级用一个"-“表示,如:两级为”|- -", 三级为”|- - -“2. I/O子系统总体结构通用块层:为各种类型的设备建立了一个统一的模型,通用块层的主要工作是接受上层(FS)发出的磁盘请求,并原创 2021-04-29 15:55:06 · 799 阅读 · 0 评论