相比于 ext4,xfs 支持更大的磁盘分区和更大的文件数量,如 xfs 支持大于 16TB 的磁盘 。但是 xfs 文件系统的缺点在于无法收缩,而 ext4 则可以 。
第二,在选好文件系统后,还可以进一步优化文件系统的配置选项,包括文件系统的特性(如 ext_attr、dir_index)、日志模式(如 journal、ordered、writeback)、挂载选项(如 noatime)等等 。
比如,使用 tune2fs 这个工具,可以调整文件系统的特性(tune2fs 也常用来查看文件系统超级块的内容) 。而通过 /etc/fstab,或者 mount 命令行参数,我们可以调整文件系统的日志模式和挂载选项等 。
第三,可以优化文件系统的缓存 。
比如,你可以优化 pdflush 脏页的刷新频率(比如设置 dirty_expire_centisecs 和dirty_writeback_centisecs)以及脏页的限额(比如调整 dirty_background_ratio 和dirty_ratio 等) 。
再如,你还可以优化内核回收目录项缓存和索引节点缓存的倾向,即调整vfs_cache_pressure(/proc/sys/vm/vfs_cache_pressure,默认值 100),数值越大,就表示越容易回收 。
最后,在不需要持久化时,你还可以用内存文件系统tmpfs,以获得更好的 I/O 性能。tmpfs 把数据直接保存在内存中,而不是磁盘中 。比如 /dev/shm/,就是大多数 Linux 默认配置的一个内存文件系统,它的大小默认为总内存的一半 。
磁盘优化数据的持久化存储,最终还是要落到具体的物理磁盘中,同时,磁盘也是整个 I/O 栈的最底层 。从磁盘角度出发,自然也有很多有效的性能优化方法 。
第一,最简单有效的优化方法,就是换用性能更好的磁盘,比如用 SSD 替代 HDD 。
第二,我们可以使用 RAID,把多块磁盘组合成一个逻辑磁盘,构成冗余独立磁盘阵列 。这样做既可以提高数据的可靠性,又可以提升数据的访问性能 。
第三,针对磁盘和应用程序 I/O 模式的特征,我们可以选择最适合的 I/O 调度算法 。比方说,SSD 和虚拟机中的磁盘,通常用的是 noop 调度算法 。而数据库应用,我更推荐使用deadline 算法 。
第四,我们可以对应用程序的数据,进行磁盘级别的隔离 。比如,我们可以为日志、数据库等 I/O 压力比较重的应用,配置单独的磁盘 。
第五,在顺序读比较多的场景中,我们可以增大磁盘的预读数据,比如,你可以通过下面两种方法,调整 /dev/sdb 的预读大小 。
调整内核选项 /sys/block/sdb/queue/read_ahead_kb,默认大小是 128 KB,单位为KB 。使用 blockdev 工具设置,比如 blockdev --setra 8192 /dev/sdb,注意这里的单位是512B(0.5KB),所以它的数值总是 read_ahead_kb 的两倍 。第六,我们可以优化内核块设备 I/O 的选项 。比如,可以调整磁盘队列的长度/sys/block/sdb/queue/nr_requests,适当增大队列长度,可以提升磁盘的吞吐量(当然也会导致 I/O 延迟增大) 。
最后,要注意,磁盘本身出现硬件错误,也会导致 I/O 性能急剧下降,所以发现磁盘性能急剧下降时,你还需要确认,磁盘本身是不是出现了硬件错误 。
比如,你可以查看 dmesg 中是否有硬件 I/O 故障的日志 。还可以使用 badblocks、smartctl 等工具,检测磁盘的硬件问题,或用 e2fsck 等来检测文件系统的错误 。如果发现问题,你可以使用 fsck 等工具来修复 。
总结本文,我们一起梳理了常见的文件系统和磁盘 I/O 的性能优化思路和方法 。发现 I/O 性能问题后,不要急于动手优化,而要先找出最重要的、可以最大程度提升性能的问题,然后再从 I/O 栈的不同层入手,考虑具体的优化方法 。
记住,磁盘和文件系统的 I/O,通常是整个系统中最慢的一个模块 。所以,在优化 I/O 问题时,除了可以优化 I/O 的执行流程,还可以借助更快的内存、网络、CPU 等,减少 I/O调用 。
比如,你可以充分利用系统提供的 Buffer、Cache,或是应用程序内部缓存,再或者Redis 这类的外部缓存系统 。
【磁盘I/O性能优化的几个思路】
推荐阅读
- 轻薄、办公、高性能,这四款笔记本满足学生党所有需求
- 淘宝运营标题优化技巧 淘宝如何进行标题优化
- seo怎么做关键词排名 淘宝如何进行关键词优化
- 淘宝产品上下架时间怎么优化 淘宝上下架时间对宝贝排名的影响
- 淘宝seo搜索优化技巧 淘宝seo的三大相关包括
- 如何优化淘宝店铺宝贝的标题关键词? 如何优化淘宝标题
- 性能提升9倍的 nginx 线程池,你了解多少?
- 淘宝怎样优化关键词 淘宝如何提升关键词排名
- 淘宝关键词排名优化技巧 淘宝如何提升关键词排名
- 造型美观,性能均衡AOC战神937系列一体机评测