第4章-4 linux 磁盘IO

        上一篇:《第4章-3 linux 内存管理》,接着了解磁盘IO

IO 处理过程

IO 优化从以下几方面入手:

文件系统

1. 文件系统类型

        在 rhel6.4 之前 ext4 性能比 xfs 好,因为 xfs 有 lock 争用的 bug。

        从 rhel6.4 开始,xfs 的 bug 被解决,xfs 性能比 ext4 好。

2. 在挂载文件时添加参数:noatime,nodiratime

        默认方式下,在文件被访问、创建、修改等时候 linux 会记录下文件的一些时间戳(文件创建时间、最近一次修改时间和最近一次访问时间)。系统运行的时候要访问大量文件,如果能减少一些动作(比如减少时间戳的记录次数等)将会显著提高磁盘 IO 的效率。

mount –t ext4 –o rw,noatime ,nodiratime /dev/sda6 /data

通用块层

        该层就涉及到 IO 调度算法。系统中所有进程申请的 IO 操作,全部在这里进行排队,等待调度,然后写回磁盘。调度算法有四种:

        1. Anticipatory: 推迟 IO 请求(大约几个微秒),以期能对他们进行排序,获得更高效率,适用于个人 PC 单磁盘系统;

        2. CFQ(Complete Fair Queuing):完全公平的排队调度算法,也就是每一个进程组之间按照公平的方式来调度 IO。

        显然适合多用户的系统,但是不适合作为数据库系统的 IO 调度算法。在数据库系统中,数据库进程肯定是IO 最多的一个进程组,然后它却只能获得和其它进程一样多的 IO 调度机会,显然这是不合理的。数据库系统绝对不要使用该调度算法。

        3. Deadline: 按照截止期限来循环在各个 IO 队列进行调度,确保达到最终期限的请求被优先处理。一般 mysql 系统建议采用该调度算法。

        4. NOOP: 简单的 FIFO 队列进行调度,No operation 的意思是,它没有进行额外的将临近的 IO 进行合并的操作,所以它对 CPU 的使用极少。该调度算法特别适合于 SSD。因为 SSD 在对待顺序 IO 和随机 IO 没有什么区别。所以它不需要对临近的 IO 进行合并。避免了合并操作对 CPU 的使用。

磁盘

        对于随机读多的系统而言,磁盘很容易成为瓶颈所在,一般的优化就是使用 RAID或者换 SSD

更改 I/O 调度方法

临时修改:

例如:想更改到 noop 电梯调度算法:

cat /sys/block/sda/queue/scheduler
echo noop > /sys/block/sda/queue/scheduler

永久修改

CentOS6:
# vim /boot/grub/menu.lst

更改到如下内容:

kernel /boot/vmlinuz-2。6。32-504.el6 ro root=LABEL=/ elevator=deadline rhgb quiet
CentOS7:
[root@localhost ~]# grubby --update-kernel=ALL --args="elevator=deadline"
[root@localhost ~]# reboot
[root@localhost ~]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq


IO 瓶颈检测

使用 iostat 查看磁盘 IO

        1. 显示单位: 默认 iostat 是以磁盘的 block 为单位,也可以使用 -k 来指定以 kilobytes 为单位,或者使用 -m 指定 megabytes 为单位;

        2. 统计开始时间:默认 iostat 和 vmstat 相似,默认第一次/行都是从开机到目前的一个数据,可以使用 -y 选项去掉第一次/行的数据;

        3. CPU 与磁盘: iostat 默认会显示 cpu 和磁盘的数据,如果只要 cpu 数据可以使用 -c 选项,如果只需要磁盘数据,可以使用 -d 选项;

        4. 时间间隔和重复次数:[interval [times]] 表示磁盘统计数据的间隔时间和次数;

iostat 指标解读

IO 瓶颈指标参考:

        CPU 的 %iowait io 等待很高;

        磁盘的 avgqu-sz 数值很大;

        await 数值很高;

        %util 数值很高;

可能预示着磁盘存在瓶颈或者磁盘出现问题或者故障。

使用 iotop 找到 IO 最多的进程/线程

        a) 利用左右键 可以选择排序的字段,默认按照 IO>倒序,可以按照 SWAPIN,DISK WRITE 等等字段排序,使用左右方向键即可;

        b) 利用 p 键 可以在按照 进程显示 和按照 线程显示之间切换;

        c) 利用 r 键可以改变排序的方向:倒序 和 顺序

磁盘 IO 测试

eg:stress -d 1 --hdd-bytes 3G
-d forks
--hdd forks 产生多个执行 write()函数的进程
--hdd-bytes bytes 指定写的 Bytes 数,默认是 1GB
--hdd-noclean 不要将写入随机 ASCII 数据的文件 Unlink(清除)

        解释:-d 1:一个写进程。写入固定大小通过 mkstemp()函数写入当前目录;你也可以指定向磁盘中写入固定大小的文件,这个文件通过调用 mkstemp()产生并保存在当前目录下,默认是文件产生后就被执行unlink(清除)操作,但是你可以使用“ --hdd-noclean ”选项将产生的文件全部保存在当前目录下,这会将你的磁盘空间逐步耗尽。

         上一篇:《第4章-3 linux 内存管理

         下一篇:《第4章-5 linux 网络管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值