Linux文件系统、磁盘I/O是怎么工作的
内容提要
Linux操作系统的文件系统和磁盘I/O是核心功能之一,文件系统管理文件的树状结构,磁盘上以逻辑块为最小单元进行管理。虚拟文件系统VFS提供统一接口,支持不同文件系统。磁盘性能指标包括使用率、饱和度、IOPS、吞吐量和响应时间。常用工具有iostat、pidstat和iotop。
延伸解读
inode与dentry:理解文件系统缓存的关键
文章指出,inode记录文件元数据并与文件一一对应,dentry维护目录结构,两者多对一。硬链接通过不同dentry指向同一inode实现。这些结构会缓存到内存,可通过/proc/slabinfo或slabtop查看。例如,执行find / -name会全盘扫描,导致xfs_inode、proc_inode_cache、dentry、inode_cache等缓存升高,但后续查找会更快。这解释了文件系统性能与缓存的关系。
I/O分类的实际影响:从缓冲到异步
文章将文件I/O分为四类:缓冲/非缓冲(是否用标准库缓存)、直接/非直接(是否用页缓存,O_DIRECT标志)、阻塞/非阻塞(是否阻塞线程,O_NONBLOCK标志)、同步/异步(是否等待完成,O_SYNC/O_DSYNC/O_ASYNC标志)。这些分类影响程序行为与性能。例如,数据库可能用直接I/O绕过页缓存,而异步I/O通过信号通知避免等待。理解这些有助于在开发或调优时选择合适的I/O方式。
磁盘性能指标:使用率与饱和度的区别
文章强调五个基本指标:使用率、饱和度、IOPS、吞吐量、响应时间。使用率是磁盘处理I/O的时间百分比,但即使100%也可能接受新请求;饱和度反映繁忙程度,达到100%则无法接受新请求。随机读写多的场景(如数据库)IOPS更重要,顺序读写多的场景(如多媒体)吞吐量更重要。iostat可提供使用率、IOPS、吞吐量、响应时间,但饱和度需结合平均队列长度或等待时间与基准测试对比评估。
I/O调度算法:根据场景选择
通用块层通过I/O调度优化性能,Linux支持NONE、NOOP、CFQ、DeadLine四种算法。NONE用于虚拟机,NOOP适合SSD,CFQ为每个进程维护队列并支持优先级,适合桌面等大量进程场景,DeadLine为读写创建不同队列,适合数据库等I/O压力大的场合。选择调度算法需考虑磁盘类型和负载特征,例如SSD常用NOOP,而数据库可能用DeadLine以确保请求期限。
Q&A
Linux文件系统的基本结构是什么?
Linux文件系统的基本结构包括索引节点(inode)、目录项(dentry)、超级块和逻辑块。
什么是虚拟文件系统VFS,它的作用是什么?
虚拟文件系统VFS是Linux内核中的一个抽象层,提供统一接口以支持不同文件系统,使用户层和内核其他子系统可以方便地交互。
Linux中如何分类文件I/O?
文件I/O可以分为缓冲与非缓冲I/O、直接与非直接I/O、阻塞与非阻塞I/O、同步与异步I/O等。
如何监测Linux磁盘的性能?
可以使用工具如iostat、pidstat和iotop来监测Linux磁盘的性能指标,包括使用率、IOPS、吞吐量和响应时间。
机械磁盘和固态磁盘的主要区别是什么?
机械磁盘由盘片和读写磁头组成,读写速度较慢;固态磁盘由固态电子元件组成,读写速度更快且不需要磁头寻址。
Linux文件系统的性能指标有哪些?
常见的性能指标包括使用率、饱和度、IOPS、吞吐量和响应时间。