Linux6.2内核存储架构图
2023-06-04 19:03:38 5 举报
The Linux Storage Stack Diagram (Linux kernel 6.2)的详细说明中文图
作者其他创作
大纲/内容
virtio作为通用的IO虚拟化模型virtio相关驱动:virtio、virtio-pci、virtio-net、virtio-blk等virtio驱动主要有两种:virtio-blk用于virtio块设备,以及virtio-net用于virtio网络设备
dmsetup
Snapshot快照
各种磁盘接口(总线)类型的对比:ATA硬盘是传统的桌面级硬盘,通常也被称为IDE(Integrated DriveElectronics)硬盘,这是一种并行总线硬盘,目前ATA硬盘已经逐步走向没落。SATA口的硬盘又叫串口硬盘,从名称上我们就可以看出来这种类型的硬盘是ATA硬盘的升级版(可能不太严谨)!这种硬盘采用点对点的连接方式,支持热插拔。转速为7200RPM,主要容量有750GB、1TB、2TB、4TB等。目前被广泛应用家用PC、某些服务器存储。SCSI 直译为小型计算机系统专用接口。它是一种连接主机和外围设备的接口,支持包括硬盘、光驱及扫描仪在内的多种设备。SCSI总线是一种并行总线,常用于企业级存储领域。其优点是适应面广,性能高,硬盘转速快(15000RPM),缓存容量大,CPU占用率低,扩展性远优于IDE硬盘,并且支持热插拔。缺点是价格昂贵,安装复杂。接口速率目前已经发展到320MB/s,基本已经达到极限。将来有被其串行版本SAS取而代之的趋势SAS跟SATA 硬盘有点类似,都是采用串行技术以获得更高的传输速度。SAS 的接口技术可以向下兼容SATA。具体来说,二者的兼容性主要体现在物理层和协议层的兼容。在物理层,SAS 接口和SATA 接口完全兼容,SATA 硬盘可以直接使用在SAS的环境中,从接口标准上而言,SATA 是SAS 的一个子标准,因此SAS 控制器可以直接操控SATA 硬盘,但是SAS 却不能直接使用在SATA的环境中,SATA 控制器并不能对SAS硬盘进行控制。SAS是一种全双工、点对点、双端口的接口。主要用于高性能企业存储领域。这种类型的硬盘转速为15000RPMFC(Fibre Channel)即为光纤通道技术,最早应用于SAN(存储局域网络)。FC接口是光纤对接的一种接口标准形式,其他的常见类型为:ST、SC、LC、MTRJ等。FC-AL支持全双工工作方式,其利用类似SATA/SAS所用的4芯连接,提供一种单环拓扑结构,一个控制器能访问126个设备。这是一种串行设备
块设备驱动程序
......
各种磁盘接口(总线)类型的对比
内存
FireVVire
dust
loop
Raw flash
Virtual Host
zram
network
target_core_rd
nvme-rdma
SMB
Hyper-V
存储设备硬盘/固态硬盘
ATA Contorller
SD卡/多媒体卡
SCSI low level drivers
RDMA
n64cart
Fibre Channel
PCIe NVMe
UBI
PCIe
/dev/vd*
它提供一种方式可以让开发者在用户空间实现文件系统,而不需要修改内核。这种方式更加灵活,但效率会更低。FUSE 直接面向的是用户文件系统,也不会调用Block层。
Adaptec SmartHBA/RAID
mq_deadline
target_core_user
ata_piix
虚拟化设备
Persistent Memory
IBM服务器
固态硬盘
mpi3mr
nvmet
mmap(anonym pages)
NVMe over
LSI HBA
用户空间
/dev/n64cart
/dev/zram*
virtio_scsi
Request-based dm targets
IBM DASD
bcahe
/dev/pmem
应用层
MTD(Memory Technology Device)
brd
三大存储协议介绍
Request Queue
AHCI
target_core_file
zero
Page Cache
基于Block设备的文件系统(Block-based FS)
网络文件系统(Network FS)
LVM2 CLI 逻辑卷管理器客户端
N64 cartridge
(总线层面)
BIOS(block I/Os)
基于物理存储设备的文件系统,用来管理设备的存储空间
device mapper架构
SCSI简介
小结:SCSI协议就是一个存储设备与服务器之间接口通讯的一个规范AHCI和NVMe是针对特定硬件上的存储协议
scsi_tansport_fc
null_bulk
NVMe transport drivers
堆栈式文件系统(Stackable FS)
NVMe Layer
TCP
U.2
iscsi_tcp
以物理页为单位对磁盘文件进行缓存。内核基于物理块访问物理文件系统,为了提供磁盘的存取效率,引入了缓冲区缓存机制,通过虚拟文件系统访问的块的内容缓存在内存中
/dev/rssd*
/dev/nvme*n*
Core device mapper
SATA
SATA接口是作为对老式ATA接口的一种改进SATA或串行ATA是较新的接口标准,旨在取代ATA
Adaptec RAID
磁盘文件系统(Mapping Layer)
内核空间
系统调用层(Linux API)
/dev/loop*
N64游戏主机存储设备
pmem
font color=\"#000000\
内核块设备I/O流程
Boradcom MPI3.0 HBA/RAID
(存储硬件层面)
vmare_pvscsi
虚拟文件系统层VFS
ISCSI
cache
smartpqi
SD-/MMC-Card
sbp_target
内核内专门用于管理块设备的子系统,内核通过映射层(Mapping Layer)即磁盘文件系统,确定要读写数据在物理设备上的位置,将文件访问映射为设备访问。通用块层:负责一个I/O请求在上层文件系统与底层物理磁盘之间的关系
应用
read-only access
fibre Channel HBA driver
USB
Direct I/O
userspace
存储协议
SCSI mid layerSCSI upper level drivers
NVM Express(NVMe)即非易失性内存主机控制器接口规范(NVMHCIS),是一个逻辑设备接口规范。它是与AHCI类似的、基于设备逻辑接口的总线传输协议规范(相当于通讯协议中的应用层),用于访问通过PCI Express(PCIe)总线附加的非易失性存储器介质(例如采用闪存的固态硬盘驱动器),虽然理论上不一定要求 PCIe 总线协议。
bio
M.2
NVMeF
memory
NVMe
virtio_blk
Linux 6.2内核存储架构图The Linux Storage Stack Diagram (Linux Kernel 6.2)
/dev/nullb*
Fibre Channel
sysfs(transport attrib.)
MTD
dasd
NFS
nvme(pci)
iSCSI
DRBD:分布式块设备复制,用于通过网络在服务器之间对块设备(硬盘,分区,逻辑卷)进行镜像,已解决磁盘单点故障问题(2)DRBD工作位于Buffer Cache和I/O调度器之间,数据经过Buffer Cache之后,DRBD模块通过TCP/IP协议栈经过网卡和备用节点建立数据同步(3)DRBD工作模式由:主从模式,双主模式
每个块设备在块层都有一个request_queue与之对应
mtdblock
drbd
多队列模型:传统机械硬盘只有一个队列,造成全部I /O集中到一个CPU上,所有CPU访问一个队列也会出现锁问题,在多核处理器架构上为了充分发挥并行,固态硬盘采用对队列模型,实现系统的并行
target_core_iblock
VMare虚拟机
nvme-loop
Production Use
mtip32XX
SPI-NAND
multipath多路径
/dev/rbd*
delay
传输协议
libata
用户空间文件系统(FUSE)
malloc
|(1)Page Cache 页缓存I/O合并的三个位置 ->|(2)Plug List 每个进程都有一个Plug队列(蓄流功能) |(3)I/O调度器
(存储驱动程序层面)
/dev/ubiblock*
target_core_pscsi
megaraid_sas
Raw NAND
通用块层
SCSI
Buffered I/O (标准I/O):(1)数据会先被复制到内核的缓冲区,再从内核的缓冲区复制到应用程序的用户地址空间(2)没有CPU干预下,通过DMA实现磁盘和Page Cache之间直接的数据传输(3)应用程序地址空间要和磁盘空间传输数据需要经过内核缓冲区Direct I/O:(1)实现数据直接在应用程序地址空间和磁盘进行传输,避开复杂的系统级别的缓存结构,执行自定义的数据读/写管理(2)优点:减少内核缓冲区和用户空间的数据复制次数,降低文件读/写时所带来的CPU负载能力以及内存宽带的占用率(3)不经过内核缓冲区直接进行磁盘读写,会引起阻塞,所以通常Direct I/O和AIO异步I/O一起使用
tcm_loop
block接口
nvme-fc
lb_srpt
dm-multipath
infiband/ROCE/iWarp
Transport Classes
SCSI(英语:Small Computer System Interface),即小型计算机系统接口。SCSI是一种智能的通用接口标准。一种用于a href=\"http://www.zzbaike.com/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA\" title=\"计算机和智能设备之间(a href=\"http://www.zzbaike.com/wiki/%E7%A1%AC%E7%9B%98\" #0645ad\"=\"\" original-title=\"硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。它是各种计算机与外部设备之间的接口标准。1、SCSI接口是一个通用接口,在SCSI母线上可以连接主机适配器和八个SCSI外设控制器,外设可以包括磁盘、磁带、CD-ROM、可擦写光盘驱动器、打机、扫描仪和通讯设备等。 2、SCSI是个多任务接口,设有母线仲裁功能。挂在一个SCSI母线上的多个外设可以同时工作。SCSI上的设备平等占有总线。 3、SCSI接口可以同步或异步传输数据,同步传输速率可以达到10MB/s,异步传输速率可以达到1.5MB/s。 4、SCSI接口接到外置设备时.它的连接电缆可以长达6m
md(RAID)
BIOS (block I/Os)
Request based drivers(基于处理Request请求的驱动程序)
nbd
对象存储
tcm_q2axxx
Micron PCIe美光 PCIe SSD 固态硬盘
libata是Linux内核中,用来支持ATA主机控制器和设备的一个库。libata提供了一个ATA驱动API,ATA和ATAPI设备类型传输,ATA设备SCSI与ATA转换(T10 SAT标准)
/dev/st*
ioctl接口
ubi
伪文件系统(Pseudo FS)
存储接口协议
iscsi_target_mod
/dev/sd*
2023/06/03 王少罕
..._sas
mmc
devices mapper(dm)通用设备映射机制
tcm_usb_gadget
嵌入式存储设备
PCIe:通道协议,在物理表现上就是主板上那些PCIe接口。这些通道协议,属于总线协议,能够直接连接CPU,因而几乎没有延时
文件存储
tcm_vhos
nvme-tcp
mirror镜像
/dev/mtdblock*ro
2.6内核为了支持逻辑卷管理引入了通用设备映射机制,为实现那些用于存储资源管理的块设备驱动提供了一个高度的模块化的内核架构,实现对I/O请求进行过滤或者重定向等工作。device mapper机制分为内核空间的device mapper驱动和用户空间的device mapper库device mapper在内核中被注册为一个块设备驱动程序,包含三个重要的对象:Mapper device :表示一个逻辑设备,Target device:表示一个物理设备,物理空间段Mapping Table:表示逻辑设备(Mapper device)到物理设备(Target device)的映射关系
over Ethernet
美光 PCIe SSD 固态硬盘
bfq
I/O调度层
/dev/ublkb*
linear
物理接口
ahci
上层协议
/dev/mmcblk*p*
request
Debugging Use
Physical Devices 物理设备
持久化内存设备
bio :Linux I/O请求的基本单元,描述了磁盘内操作位置与Page Cache中的页的映射关系
hyperv_storage
块存储
blk_mq(多队列模型)
nvmet固态硬盘扩展
/dev/ng*
/dev/rd*
kyber
调度算法:noop(FIFO),deadline(优化电梯算法),CFQ(完全公平队列)默认I/O调度算法
switch
clone
虚拟文件系统VFS
mpt3_sas
request:由多个bio或者多个request合并而来,用来描述单次I/O请求
libdevmapper用户空间的device mapper库
Mapping接口
/dev/dasd*
ublkb
virtio_pcvirtio的PCI设备实现
存储协议目前主流的有三种,AHCI、NVMe、SCSI。 HDD 磁盘和早期 SSD 磁盘的传输协议一般采用AHCI(高级主机控制器接口,Advanced Host Controller Interface)。AHCI 为单队列模式,主机和 HDD/SSD 之间通过单队列进行数据交互。对于 HDD 这种慢速设备来说,主要瓶颈在存储设备,而非 AHCI协议。不同于 HDD 的顺序读写特点,SSD 可以同时从多个不同位置读取数据,具有高并发性。因此对于 SSD,AHCI 的单队列模式成为了限制并发性的瓶颈。随着存储介质的演进,SSD 盘的 IO 带宽越来越大,访问延时越来越低。AHCI 协议已经不能满足高性能和低延时 SSD 的需求, NVMe(NVM Express 非易失性内存主机控制器接口规范)应运而生。NVM(non-volatile memory)是固态硬盘(SSD)的常见的闪存形式。此规范主要是为基于闪存的存储设备提供一个低延时、内部并发化的原生界面规范,也为现代CPU、计算机平台及相关应用提供原生存储并发化的支持,令主机硬件和软件可以充分利用固态存储设备的并行化存储能力。相比此前机械硬盘驱动器(HDD)时代的AHCI,NVMe/NVMHCI降低了I/O操作等待时间、提升同一时间内的操作数、更大容量的操作队列等。基于 NVMe 的驱动器可实现高达 16Gbps 的吞吐量,且当前供应商正在推动 32Gbps 或更高的吞吐量产品的应用。在 IO 方面,许多基于 NVMe 的驱动器,其 IOPS 可以超过 50 万,部分可提供 150 万、200 万甚至1000 万 IOPS。与此同时,许多驱动器的延迟低于 20 微秒,部分低于 10 微秒。SCSI即小型计算机接口(Small Computer System Interface),指的是一个庞大协议体系,到目前为止经历了SCSI-1/SCSI-2/SCSI-3变迁。 SCSI协议定义了一套不同设备(磁盘,磁带,处理器,光设备,网络设备等)利用该框架进行信息交互的模型和必要指令集。SCSI协议本质上同传输介质(SATA线,PCIE线,网线等)无关,SCSI可以在多种介质上实现,甚至是虚拟介质。例如基于光纤的FCIP(Fiber Channel over IP)链路协议,基于SAS(Serial Attached SCSI)的链路协议,基于虚拟IP链路的iSCSI协议。通俗点说SCSI协议就是一个存储设备与服务器之间接口通讯的一个规范。因为这种“兼容各种传输介质”的特性,存储网络都是以 SCSI协议为基础框架,前端传输网络层一直以 FC(光纤通道,Fiber Channel)网络为主,后端则以 SAS(串行 SCSI 技术,Serial Attached SCSI)网络为主,这构成了服务器间以 IP 为主要互联手段的 IP 存储网络。iSCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口)是一种由IBM公司研究开发的IP SAN技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,基于 TCP/IP的协议连接iSCSI服务端(Target)和客户端(Initiator),使得封装后的SCSI数据包可以在通用互联网传输,最终实现iSCSI服务端映射为一个存储空间(磁盘)提供给已连接认证后的客户端
Target device
aacraid
I/O Scheduler I/O调度器
target_core_mod
log
RestFull
bcache:块层缓存,使用固态硬盘作为硬盘驱动器的缓存。三种缓存策略:写回,写透,write around可以将固态硬盘资源池化,一块固态硬盘形成一个缓存池对应多块硬盘驱动器,并且支持从缓存池中划分出瘦分配的纯Flash卷thin-flash LUN.LUN是存储设备上可以被应用服务器识别的独立存储单元,LUN的空间来源于存储池,存储池来源于组成磁盘阵列的若干个块硬盘
/dev/nbd*
Mapping Table
LIO (Linux-IO)
...
tcm_fc
/dev/sr*
rbd
LSI RAID
SCSC RDMA
(可选)devices on top normal block device
Block Layer块层
BIO based drivers(基于处理BIO请求的驱动程序)
页缓存Page Cache(文件缓存Flie Cache)
Mapper device
SPI-NOR
特殊文件系统(Special Purpose FS)
0 条评论
回复 删除
下一页