写点什么

性能相关 磁盘 I/O 子系统

用户头像
Linuxer
关注
发布于: 2020 年 09 月 01 日



  1. 进程使用write()系统调用写入文件。

2. 内核更新映射到文件的page cache。

3. 内核线程pdflush负责把页缓存刷入到磁盘中。

4. 文件系统层把各个块缓存放入一个bio结构,并且提交一个写入到块设备层的请求。

5. 块设备层从上层获得请求,执行I/O elevator操作,把请求放入到I/O请求队列中。

6. 磁盘驱动,例如SCSI或其它特定驱动将会负责写操作。

7. 磁盘驱动固件执行硬件操作,例如寻址、旋转、数据传送到磁盘的扇区。



因为存储器和磁盘的速度限制了整个系统性能,所以系统的整体性能并没有因 为处理器速度的提升而提升。但是,通过把常用数据放入到更快速度的内存中,以缓存机制 可以解决这个问题。



存储器层次

这项技术还带来了局部引用(Locality of reference)的好处,越高的的缓存命中率和越快的 内存,就能越快的获取到数据

局部性引用(Locality of reference)

最近使用过的数据即将被使用的可能性很高(时间局部性,temporal locality)。

使用过数据的附近数据被使用的可能性很高(空间局部性,spatial locality)

Linux在很多组件中用到了这个原则,例如页缓存、文件对象缓存(i-node缓存、目录条 目缓存等等)、预读缓冲区等



刷新脏缓冲区(Flushing a dirty buffer)

同步脏缓冲的进程叫做flush

块层

块层处理所有和块设备相关的操作。块层中的关键数据结构是bio。bio结构是文件系统层和块 层之间的一个接口。

块层处理bio请求,并且把请求链接到I/O请求队列中。这个链接操作叫做I/O elevator

作为参考,如果服务器 要处理很多小文件,设置较小的块大小比较好。如果服务是需要处理大文件的,较大的块大 小可能会提高性能。

I/O elevator



用户头像

Linuxer

关注

还未添加个人签名 2018.06.12 加入

还未添加个人简介

评论

发布
暂无评论
性能相关 磁盘I/O子系统