二十五、Linux性能优化实战学习笔记Linux 磁盘I/O是怎么工作的?(下)

天蓝Sea

关注

阅读 73

2022-01-20

目录

磁盘性能指标

注意点

使用场景

性能测试工具 fio

磁盘 I/O 观测

iostat指标解读  

进程 I/O 观测

pidstat

iotop

 问题

如何判断是随机io还是顺序io?


磁盘性能指标

使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标,是衡量磁盘性能的基本指标。

  1. 使用率,是指磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味着磁盘 I/O 存在性能瓶颈。
  2. 饱和度,是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求。
  3. IOPS(Input/Output Per Second),是指每秒的 I/O 请求数
  4. 吞吐量,是指每秒的 I/O 请求大小
  5. 响应时间,是指 I/O 请求从发出到收到响应的间隔时间

注意点

结合读写比例、I/O 类型(随机还是连续)以及I/O 的大小,综合来分析。不能孤立看某一个指标。

使用场景

在数据库、大量小文件等这类随机读写比较多的场景中,IOPS 更能反映系统的整体性能

在多媒体等顺序读写较多的场景中,吞吐量才更能反映系统的整体性能

性能测试工具 fio

不同 I/O 大小(一般是 512B 至 1MB 中间的若干值)分别在随机读、顺序读、随机写、顺序写等各种场景下的性能情况

磁盘 I/O 观测

iostat 是最常用的磁盘 I/O 性能观测工具,它提供了每个磁盘的使用率、IOPS、吞吐量等各种常见的性能指标,当然,这些指标实际上来自 /proc/diskstats

-d -x 表示显示所有磁盘 I/O 的指标

阿里云ESC只有一个磁盘设备. 

[root@ninesun ~]# iostat -d -x 1
Linux 5.10.60-9.al8.x86_64 (ninesun) 	01/18/2022 	_x86_64_	(1 CPU)

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
vda              0.01    0.37      0.39      4.45     0.00     0.31  15.61  45.93    1.39    1.81   0.00    33.49    12.09   0.74   0.03

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
vda              1.00    0.00      8.00      0.00     0.00     0.00   0.00   0.00    1.00    0.00   0.00     8.00     0.00   1.00   0.10

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
vda              0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
vda              0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
vda              0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00

生产环境GP数据库的一个节点的的iostat

iostat指标解读  

  •  %util ,就是我们前面提到的磁盘 I/O 使用率;
  • r/s+ w/s ,就是 IOPS;
  • rkB/s+wkB/s ,就是吞吐量;
  • r_await+w_await ,就是响应时间

从 iostat 并不能直接得到磁盘饱和度。饱和度通常也没有其他简单的观测方法,不过,你可以把观测到的,平均请求队列长度或者读写请求完成的等待时间,跟基准测试的结果(比如通过 fio)进行对比,综合评估磁盘的饱和情况。

进程 I/O 观测

iostat 只提供磁盘整体的 I/O 性能数据

对于某个进程使用pidstat 和 iotop 这两个工具。

pidstat

pidstat 的输出你能看到,它可以实时查看每个进程的 I/O 情况,包括下面这些内容。

  • 用户 ID(UID)和进程 ID(PID) 。
  • 每秒读取的数据大小(kB_rd/s) ,单位是 KB。
  • 每秒发出的写请求数据大小(kB_wr/s) ,单位是 KB。
  • 每秒取消的写请求数据大小(kB_ccwr/s) ,单位是 KB。

iotop

它是一个类似于 top 的工具,你可以按照 I/O大小对进程排序,然后找到 I/O 较大的那些进程。

前两行分别表示,进程的磁盘读写大小总数和磁盘真实的读写大小总数。因为缓存、缓冲区、I/O 合并等因素的影响,它们可能并不相等。
剩下的部分,则是从各个角度来分别表示进程的 I/O 情况,包括线程 ID、I/O 优先级、每秒读磁盘的大小、每秒写磁盘的大小、换入和等待 I/O 的时钟百分比等

 问题

如何判断是随机io还是顺序io?

跟踪进程的系统调用或者磁盘的I/O,根据读写的相对位置可以判断

将/dev/sda直接挂载到某个目录和将磁盘只一个分区后,/dev/sda1挂载到某个目录,这两种挂载的区别是什么?

区别是你怎么创建文件系统的,是使用分区还是整块磁盘
 

精彩评论(0)

0 0 举报