共计 2526 个字符,预计需要花费 7 分钟才能阅读完成。
如何进行 Linux 磁盘 I / O 优化,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
概述
分享下关于 linux 磁盘 I / 0 方面的优化,中间插一个 rac 方面的报错解决。
文件系统优化
** 动态调整请求队列数来提高效率, 默认请求队列数为:128, 可配置 512 **
[root@bo queue]# cat /sys/block/sda/queue/nr_requests128
** read_ahead, 通过数据预读并且记载到随机访问内存方式提高磁盘读操作,默认值 128,ceph 配置:8192 **
[root@bo queue]# cat /sys/block/sda/queue/read_ahead_kb128
** 关闭 *** 一次访问文件 (目录) 的时间戳 **
例如:
mount -t xfs -o defaults,noatime,nodiratime /dev/sda5 /data
** 大文件,大容量,大量文件数建议使用 xfs 文件系统 **
调整 I / O 调度算法
磁盘 IO 调度算法
[root@bo queue]# cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq]
centos6.x 默认为 cfq
调整为 deadline
[root@bo queue]# echo deadline /sys/block/sda/queue/scheduler [root@bo queue]# cat /sys/block/sda/queue/scheduler noop anticipatory [deadline] cfq
PS:这里在用 redhat6 部署 rac 的时候如果没配置会提示 I /0 scheduler 的警告,按上面配置就可以解决了。
I/0 scheduler 报错
多少个盘写多少个
** I/ O 调度算法介绍 **
CFQ(完全公平排队 I / O 调度程序) 默认
特点:
CFQ 试图均匀地分布对 I / O 带宽的访问, 避免进程被饿死并实现较低的延迟, 是 deadline 和 as 调度器的折中.
CFQ 赋予 I / O 请求一个优先级, 而 I / O 优先级请求独立于进程优先级, 高优先级的进程的读写不能自动地继承高的 I / O 优先级.
工作原理:
CFQ 为每个进程 / 线程, 单 *** 建一个队列来管理该进程所产生的请求, 也就是说每个进程一个队列, 各队列之间的调度使用时间片来调度,
以此来保证每个进程都能被很好的分配到 I / O 带宽.I/ O 调度器每次执行一个进程的 4 次请求.
NOOP(电梯式调度程序)
特点:
在 Linux2.4 或更早的版本的调度程序, 那时只有这一种 I / O 调度算法.
NOOP 实现了一个简单的 FIFO 队列, 它像电梯的工作主法一样对 I / O 请求进行组织, 当有一个新的请求到来时, 它将请求合并到最近的请求之后, 以此来保证请求同一介质.
NOOP 倾向饿死读而利于写.
NOOP 对于闪存设备,RAM, 嵌入式系统是 *** 的选择.
电梯算法饿死读请求的解释:
因为写请求比读请求更容易.
写请求通过文件系统 cache, 不需要等一次写完成, 就可以开始下一次写操作, 写请求通过合并, 堆积到 I / O 队列中.
读请求需要等到它前面所有的读操作完成, 才能进行下一次读操作. 在读操作之间有几毫秒时间, 而写请求在这之间就到来, 饿死了后面的读请求.
Deadline(截止时间调度程序)
特点:
通过时间以及硬盘区域进行分类, 这个分类和合并要求类似于 noop 的调度程序.
Deadline 确保了在一个截止时间内服务请求, 这个截止时间是可调整的, 而默认读期限短于写期限. 这样就防止了写操作因为不能被读取而饿死的现象.
Deadline 对数据库环境 (ORACLE RAC,MYSQL 等) 是 *** 的选择.
AS(预料 I / O 调度程序)
特点:
本质上与 Deadline 一样, 但在 *** 一次读操作后, 要等待 6ms, 才能继续进行对其它 I / O 请求进行调度.
可以从应用程序中预订一个新的读请求, 改进读操作的执行, 但以一些写操作为代价.
它会在每个 6ms 中插入新的 I / O 操作, 而会将一些小写入流合并成一个大写入流, 用写入延时换取 *** 的写入吞吐量.
AS 适合于写入较多的环境, 比如文件服务器
AS 对数据库环境表现很差.
** I/ O 调度算法总结 **
Anticipatory I/O scheduler 适用于大多数环境, 但不太合适数据库应用
Deadline I/O scheduler 通常与 Anticipatory 相当, 但更简洁小巧, 更适合于数据库应用, DATA/SAS 盘
CFQ I/O scheduler 为所有进程分配等量的带宽, 适合于桌面多任务及多媒体应用,默认 IO 调度器
NOOP I/O scheduler 适用于 SSD 盘,有 RAID 卡,做了 READ 的盘
** sysctl.conf 针对磁盘优化 **
vm.swappiness = [0 – 10] 默认是 60,太高了,如果是缓存服务器建议配置为 0
针对固态硬盘优化
1、关闭日志功能
2、fstab 里加挂载参数 data=writeback
3、启用 TRIM 功能
Linux 内核从 2.6.33 开始提供 TRIM 支持,所以先运行“uname -a”命令,查看自己的内核版本,如果内核版本低于 2.6.33 的,请先升级内核。
然后运行“hdparm -I /dev/sda”查看自己的硬盘支不支持 TRIM 技术,如果支持,你会看到
Data Set Management TRIM supported
如果上面两个条件都满足了,就可以在 fstab 中添加 discard 来开启 TRIM 功能,如:
原始的 UUID=2f6be0cf-2f54-4646-b8c6-5fb0aa01ef23 / ext4 defaults,errors=remount-ro 0 1
改后的 UUID=2f6be0cf-2f54-4646-b8c6-5fb0aa01ef23 / ext4 discard,defaults,errors=remount-ro 0 1
关于如何进行 Linux 磁盘 I / O 优化问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。