The Storage Stack Diagram version 3.17, 2014-10-17 outlines the Linux storage stack as of Kernel version 3.17 ISCSI USB mmap Fibre over Fibre Channel Fibre Virtual Host Virtual FireWire (anonymous pages) Applications (Processes) LIO malloc vfs_writev, vfs_readv, ...... stat(2) (2) (2) write(2) chmod(2) VFS tcm_fc sbp_target tcm_usb_gadget tcm_vhost tcm_qla2xxx iscsi_target_mod block based FS Network FS pseudo FS special Page ext2 ext3 ext4 proc purpose FS target_core_mod direct I/O NFS coda (O_DIRECT) xfs tmpfs ifs smbfs ... pipefs futexfs ramfs target_core_file iso9660 gfs ocfs ... devtmpfs ... ceph usbfs target_core_iblock target_core_pscsi network

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

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 ... Queues cfq devices do) deadline

Hardware Hardware Dispatch ... Dispatch Queue Queues

Request Request BIO based Drivers based Drivers based Drivers

request-based device mapper targets /dev/nullb* /dev/vd* /dev/rssd* dm-multipath SCSI Mid Layer /dev/rbd* null_blk SCSI upper level drivers virtio_blk mtip32xx /dev/sda /dev/sdb ... sysfs (transport attributes) /dev/nvme#n# /dev/skd* rbd

Transport Classes nvme skd scsi_transport_fc network scsi_transport_sas SCSI low level drivers scsi_transport_... libata megaraid_sas qla2xxx iscsi_tcp virtio_scsi ...

ahci ata_piix ... aacraid lpfc mpt3sas vmw_pvscsi

network virtio_pci HDD SSD DVD LSI Qlogic para-virtualized Micron nvme stec drive RAID HBA SCSI PCIe Card device device Adaptec Emulex LSI 12Gbs VMware's RAID HBA SAS HBA para-virtualized SCSI Physical devices

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/