IO的原理
磁盘
磁盘是块状设备,用来持久化数据,磁盘的性能明显劣于内存,系统用了缓存(cache)和缓冲(buffer)来弥补这部分的性能差异。
磁盘有许多类型有:IDE(hd),SATA(sd)还有网络存储等,序号一般从a-z。我们在这些设备上还可以进行分区,分区用0-9表示。
我们将磁盘分区挂载到文件系统的某个目录中使用
文件系统
linux通过文件系统操作磁盘中的数据。文件系统由目录项、索引块、超级块、逻辑块组成。
- 逻辑块:数据的最小单位是扇出一般是512b,磁盘为了加速访问将8个相邻的扇区组成了一个逻辑块进行操作,一个逻辑块4kb。逻辑块用来存储文件数据
- 索引块:存储索引节点(inode),索引节点存储了文件的原信息。比如大小、创建时间、权限、地址
- 目录项:存储文件和目录项之间的关系。
超级块:用来表示索引块、逻辑快使用情况。
缓存:
页缓存:加速磁盘IO访问
索引节点缓存:加速索引节点的访问
目录项缓存:加速目录项查找和访问vfs:隐藏各种磁盘的实现提供统一的接口
通用区:在vfs下层隐藏多种磁盘系统的实现,对上提供统一接口;对下提供多种io请求合并优化的策略。
重点指标
如图
工具
下面的表格是提供I/O的性能指标的工具:
以指标的维度看:
按照常用的排查思路我们看各工具: