参考资料:
1. Linux性能优化之磁盘优化(三)
1 应用程序优化
应用程序的优化,核心就是尽可能利用缓存I/O来优化性能。
比如使用外部缓存系统类似Redis来构建自己的缓存系统;
使用fopen/fread等库函数来替代open/read等系统调用,因为库函数会有自己的缓存;
读写文件时,不要使用DirectI/O(O_DIRECT);
写文件时,不使用同步I/O(O_SYNC),等写完毕,显性调用fsync() /sync()进行同步;
将频繁访问的文件或数据放到内存中,减少对磁盘的读写。
上面的方式,要根据自己的实际场景进行取舍,比如是否使用同步I/O,使用同步I/O可以将内核缓冲区的数据输出到文件中,可以保证数据的完整性以及数据安全,但是另一方面也会降低系统的性能。
2 文件系统优化
优化文件系统的配置选项,如挂载时指定同步或异步写入async/sync、禁用atime等选项;
优化文件系统的缓存,优化脏页的刷新频率和限额、调整vfs_cache_pressure值 来优化内核回收目录项缓存和索引节点缓存的倾向。
3 磁盘优化
针对磁盘和应用程序I/O特性,选择不同的I/O调度算法;
在顺序读比较多的场景,增大磁盘的预读数据,可以调整内核选项 /sys/block/sdb/queue/read_ahead_kb或使用blockdev 工具进行设置;
优化内核块设备I/O的选项,调整磁盘队列的长度,提升磁盘的吞吐量。