The Storage Stack Diagram

version 4.10, 2017-03-10 outlines the Linux storage stack as of Kernel version 4.10 Virtual Host FireWire Fibre over ISCSI Channel Fibre USB mmap (anonymous pages) Applications (processes) LIO malloc

vfs_writev, vfs_readv, ...... stat(2) (2) (2) write(2) (2) VFS tcm_fc sbp_target tcm_usb_gadget tcm_vhost tcm_qla2xxx iscsi_target_mod Block-based FS Network FS Pseudo FS Special NFS proc purpose FS target_core_mod Direct I/O Page ifs iso9660 smbfs ... (O_DIRECT) pipefs futexfs ramfs target_core_file gfs ocfs ... usbfs ... devtmpfs Stackable FS

target_core_iblock FUSE

userspace (e.g. ) target_core_pscsi target_core_user network

stackable (optional) struct bio - sector on disk BIOs (block I/Os) Devices on top of “normal” BIOs (block I/Os) - sector cnt block devices - bio_vec cnt drbd LVM - bio_vec index mdraid - bio_vec list dm-crypt dm-mirror ... dm-cache dm-thin dm- dm-delay userspace

BIOs BIOs Block Layer BIOs

I/O scheduler blkmq Maps BIOs to requests multi queue hooked in device drivers noop Software (they hook in like stacked cfq ... queues devices do) deadline

Hardware Hardware dispatch ... dispatch queue queues

Request Request BIO based drivers based drivers based drivers

Request-based device mapper targets dm-multipath SCSI mid layer sysfs -mq /dev/* /dev/rbd* /dev/mmcblk*p* /dev/nullb* /dev/vd* /dev/rssd* /dev/skd* (transport attributes) SCSI upper level drivers /dev/sda /dev/sd* ... /dev/ubiblock* /dev/nbd* /dev/loop* /dev/nvme*n* /dev/rsxx* Transport classes scsi_transport_fc /dev/sr* /dev/st* zram ubi rbd nbd mmc loop null_blk virtio_blk mtip32xx nvme skd rsxx scsi_transport_sas scsi_transport_... network memory SCSI low level drivers libata megaraid_sas qla2xxx pm8001 iscsi_tcp virtio_scsi ufs ...

ahci ata_piix ... aacraid lpfc mpt3sas vmw_pvscsi

network

HDD SSD DVD LSI Qlogic PMC-Sierra Micron nvme stec para-virtualized virtio_pci mobile device drive RAID HBA HBA SCSI flash memory PCIe card device device Adaptec Emulex LSI 12Gbs VMware's SD-/MMC-Card RAID HBA SAS HBA para-virtualized IBM flash Physical devices SCSI adapter

The Linux Storage Stack Diagram http://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram Created by Werner Fischer and Georg Schönberger License: CC-BY-SA 3.0, see http://creativecommons.org/licenses/by-sa/3.0/