引用
- 闪存物理结构
- 你所不知道到的NVMe
- 蛋蛋读NVMe之一:为什么刘备需要NVMe
- 蛋蛋读NVMe之二: 吉祥三宝
- 文件系统和裸块设备的page cache问题
- 原来PCIe这么简单,一定要看!
- EMC潘国林: 大话存储系列之月光宝盒(块存储)
- EMC潘国林: 大话存储系列之磁盘娶亲(RAID
- VFS- 内核是如何抽象文件系统的
- aufs-如何自己编写一个文件系统
- Ravi Kiran UVS: 写一个最简单的文件系统
- 打造用户态存储利器,基于SPDK的存储引擎Blobstore & BlobFS
- Barrier-enabled IO stack for Flash storage
- 内核文件系统XFS的一些最新进展
- 赵晨雨:从文件系统的数据结构看Linux内核设计
- 黄伟亮:ext4文件系统之裸数据的分析实践
- 黄伟亮: 探秘Linux的块设备和根
- 吴锦华/明鑫: 用户态文件系统(FUSE)框架分析和实战
- 新一代 Linux 文件系统 btrfs 简介-btrfs 的特性和使用
- Linux文件系统预读的情景分析
- 使用blktrace统计磁盘块I/O访问频率
- mpage机制中的BH_Boundary详解以及bio思想
- read 系统调用剖析
- Linux文件/磁盘统计df与du命令输出结果不同的原因研究
一. Linux Storage Stack
- VFS: 虚拟文件系统层。由于内核要跟多种文件系统打交道,而每一种文件系统所实现的数据结构和相关方法都可能不尽相同,所以,内核抽象了这一层,专门用来适配各种文件系统,并对外提供统一操作接口。
- xxx FS: 不同的文件系统实现自己的操作过程,提供自己特有的特征,具体不多说了,大家愿意的话自己去看代码即可。
- Page cache: 对page的缓存
- Block Layer: 由于绝大多数情况的io操作是跟块设备打交道,所以Linux在此提供了一个类似vfs层的块设备操作抽象层。下层对接各种不同属性的块设备,对上提供统一的Block IO请求标准。
- I/O scheduler: 因为绝大多数的块设备都是类似磁盘这样的设备,所以有必要根据这类设备的特点以及应用的不同特点来设置一些不同的调度算法和队列。以便在不同的应用环境下有针对性的提高磁盘的读写效率,这里就是大名鼎鼎的Linux电梯所起作用的地方。针对机械硬盘的各种调度方法就是在这实现的。
- device driver layer: request函数对请求队列中每个bio进行分别处理,根据bio中的信息向磁盘控制器发送命令。处理完成后,调用完成函数end_bio以通知上层完成。
简化图: