在系统I/O性能调优中,有时候文件系统的性能比磁盘性能更为重要。文件系统通过缓存、缓冲、异步I/O扥手段实现了对磁盘I/O的优化。
模型及概念
架构
文件系统I/O栈的一般模型
markdown画这种图有点心累…
系统调用直接调用磁盘设备子系统的的过程为裸I/O,穿过VFS和文件系统的是文件系统I/O,包括绕过了文件系统缓存的直接I/O。
VFS
虚拟文件系统接口给不同各类型的文件系统提供一个通用接口。文件系统类型主要有UFS/ext3/ext4/HSFS/PCFS/ZFS/btrfs
文件系统缓存
- 缓冲区高速缓存
缓冲区高速缓存用于块设备接口和磁盘之间。linux缓冲区高速缓存寄存在页缓存中,其大小是动态的,可以从/proc中查看。 - 页缓存
页缓存缓存了虚拟内存的页面,包括文件系统的页面。文件系统使用的内存脏页面由内核线程写回到磁盘上。写回发生的条件主要包括:
- 经过一段时间(30s)
- 调用了sync、fsync或msync等系统调用
- 过多的脏页面
- 页缓存已耗尽
写回线程可通过系统性能工具以内核任务的形式观察到。
- inode缓存
inode用于记录文件文件大小,设备标识符,用户标识符,用户组标识符,文件模式,扩展属性等元信息。
文件系统特性
- 块和区段
基于块的文件系统把数据存储在固定大小的块中,这种方式使得大文件需要大量的块指针和元数据块,而且会使得块的存在变得零散造成随机I/O。有些基于块的文件系统会采用连续摆放块、增大块大小的方案来避免该问题。 - 日志
- 写时复制
- 擦洗
检测坏盘,会严重影响性能。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。