
linux io栈
文章平均质量分 85
Wang20122013
喷泉有了压力才优美,滴水有了坚持才有了穿石。顶住压力,享受压力,坚持奋斗。
展开
-
SCSI Upper Layer 与LLD的联系——sd_probe
sg_format --format /dev/ada --size=512关闭PI,sg_readcap /dev/sda -l 显示是否开启pi,sg_inq /dev/sda sg_inq /dev/sda -x 只是表示支持。转载 2022-07-07 17:43:03 · 578 阅读 · 0 评论 -
scsi eh(scsi error handle)处理流程
内核文档Documentation/scsi/scsi_eh.txtscmd为scsi cmd的简称。scsi_eh_scmd_add()作用:将发生error的scmd加入到eh中。发生error有两种情况:1).scmd执行完成了,但是结果为error。2).scmd执行超时了,即一直没有返回,发生了timeout。scsi_eh_scmd_add()在两处被调用:1).scsi_times_out函数 => scmd超时处理函数,将timeout的scmd加入eh2).scsi转载 2022-03-31 10:05:57 · 2114 阅读 · 0 评论 -
Linux中磁盘扫描流程描述
通常SCSI总线适配器作为PCI设备的形式存在,其在计算机体系结构中的位置如下图所示:在系统初始化时会扫描系统PCI总线,由于scsi host adapter挂接在pci总线上,因此会被pci扫描软件扫描得到,并且生成一个pci device(PDO)。然后扫描软件需要为该pci device加载相应的驱动程序。在linux系统中,遍历pci bus上存在的所有驱动程序,检查是否有符合要求的驱动程序存在,这里假设scsi host是marwell的设备,那么,如果存在marwell提供的scsi ho转载 2021-12-23 11:13:35 · 1132 阅读 · 0 评论 -
Linux IO系统分析(在Linux用户空间,有三种方式提交对SCSI设备请求到通用块层)
一、概述Linux内核中SCSI子系统由SCSI上层,中间层,底层驱动模块三部分组成,负责管理SCSI资源和处理其他子系统,如文件系统,提交到SCSI子系统中的IO请求。因此,理解SCSI子系统的IO处理机制对理解整个SCSI子系统至关重要,同时也有助于理解整个Linux内核的IO处理机制。二、SCSISCSI设备访问请求的提交分为两个步骤:用户空间提交请求到通用块层通用块层提交块请求到SCSI子系统 用户空间提交请求到同样块层: 在Linux用户空间,有三种方式提交对SCSI设备请转载 2021-12-23 10:46:25 · 769 阅读 · 0 评论 -
linux IO Block layer 解析
早期的 Block 框架是单队列(single-queue)架构,适用于“硬件单队列”的存储设备(比如机械磁盘),随着存储器件技术的发展,支持“硬件多队列”的存储器件越来越常见(比如 NVMe SSD),传统的单队列架构也因此被改成了多队列(multi-queue)架构。早在 3.13 内核就已经加入了多队列代码,但是还不太稳定,经过多年的发展 multi-queue 越来越稳定,linux 5.0+ 已经默认使用 multi-queue。本篇文章介绍 Block 层框架及调度器相关知识,让读者对 Bloc转载 2021-09-30 11:06:42 · 1098 阅读 · 0 评论 -
Linux 块设备之Block Layer层架构演变
前言Block Layer层在整个I/O中负责承上启下,上接文件系统,下接块驱动。一、1.0版本首先我们来了解几个重要的数据结构1.1 biobio代表了一次I/0请求,代表一个块设备的一个扇区或者多个连续扇区的数据请求,扇区是块设备的最小访问单元,bio是文件系统发给Block Layer层的。1.2 requestrequest代表块设备可以处理的一次任务单元,一个request由一个bio或者多个扇区相连的bio组成。1.3 架构图二、2.0版本目前只支持单个进程访问块设备。为转载 2021-09-30 10:26:47 · 631 阅读 · 0 评论 -
bio,request,request_queue的关系
通用块层的核心数据结构称为bio描述符,它描述了块设备的io操作。每一个bio结构都包含一个磁盘存储区标识符(存储区中的起始扇区号和扇区数目)和一个或多个描述与IO操作相关的内存区段(bio_vec数组)bio结构中的字段/* * main unit of I/O for the block layer and lower layers (ie drivers and * stacking drivers) */struct bio { struct bio *bi_next; /* req转载 2021-09-30 09:48:30 · 894 阅读 · 0 评论 -
Multi-queue 架构分析
Linux上传统的块设备层(Block Layer)和IO调度器(如cfq)主要是针对HDD(hard disk drivers)设计的。我们知道,HDD设备的随机IO性能很差,吞吐量大约是几百IOPS(IOs per second),延迟在毫秒级,所以当时IO性能的瓶颈在硬件,而不是内核。但是,随着高速SSD(Solid State Disk)的出现并展现出越来越高的性能,百万级甚至千万级IOPS的数据访问已成为一大趋势,传统的块设备层已无法满足这么高的IOPS需求,逐渐成为系统IO性能的瓶颈。为了适转载 2021-09-29 13:39:23 · 869 阅读 · 0 评论