如何进行Linux 磁盘I/O优化

66次阅读
没有评论

共计 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 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2526字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)