Linux优化之磁盘预读readahead

0    938    1

👉 本文共约1070个字,系统预计阅读时间或需5分钟。

简介

在内存中读取数据比从磁盘中读取数据要快很多,增加linux内核预读,对于大量顺序读取的操作,可以有效减少I/O的等待时间。该参数值建议在实际环境中测试再决定设置多大值。

磁盘预读可以改善顺序读的性能,并且测试发现每个读请求的大小也受预读大小的影响,也就是发生了 IO 合并。

Linux的文件预读readahead,指Linux系统内核将指定文件的某区域预读进页缓存起来,便于接下来对该区域进行读取时,不会因缺页(page fault)而阻塞。因为从内存读取比从磁盘读取要快很多。预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一。

查看和配置

可以使用blockdev来查看或配置磁盘预读的值。

blockdev用法:

可用命令有:

通过如下命令查看disk的预读设置:

请注意,8192的单位是个,也就是8192个sectors(扇区),而上面4096的单位是KB,其中8192sectors*512bytes/1024=4096KB

查看所有disk:

上面第二列RA列的单位是个,也就是这么多个sectors.

设置sda的预读为16484,单位是sectors.

值得注意,当存储环境中用到多路径聚合软件时,请修改多路径聚合软件聚合之后的磁盘名称,如下是举例:

通过上面的修改可以看到,修改会立即生效,但是这么设置重启OS后会失效,因此,建议建立udev规则来保证重启OS后不会失效。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

注意,在上面的输出中36000c2939dfa82377c155d4b4a8d0acd是sda的WWID。8192是sda的预读大小,KB为单位。

另外,也可以命令写入配置文件/etc/rc.local,否则重启就会失效。

参考

https://www.cnblogs.com/dkblog/archive/2011/11/10/2244631.html

https://blog.csdn.net/kunyus/article/details/104620057

https://www.cnblogs.com/kerrycode/p/4743015.html

https://en.wikipedia.org/wiki/Readahead

http://www.hustyx.com/cpp/96/

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部