性能相关 磁盘 I/O 子系统
进程使用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
评论