阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何监测 Linux 的磁盘 I/O 性能

144次阅读
没有评论

共计 2005 个字符,预计需要花费 6 分钟才能阅读完成。

在我之前的文章:《探讨 Linux 的磁盘 I/O》中,我谈到了 Linux 磁盘 I/O 的工作原理,我们了解到 Linux 存储系统 I/O 栈由 文件系统层(file system layer)通用块层(general block layer) 设备层(device layer)构成。

其中,通用块层 是 Linux 磁盘 I/O 的核心。向上,它为访问文件系统和应用程序的块设备提供了标准接口;向下,它将各种异构磁盘设备抽象为一个统一的块设备,并响应文件系统和应用程序发送的 I/O。

在本文中,我们来看看磁盘的性能指标以及如何查看这些指标。

Linux 磁盘性能指标

在衡量磁盘性能时,我们经常提到五个常见指标:利用率、饱和度、IOPS、吞吐量和响应时间。这五个指标是衡量磁盘性能的基本指标。

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

这里需要注意的是,关于利用率,我们只考虑有无 I/O,而不考虑 I/O 的大小。也就是说,当利用率为 100% 时,磁盘仍有可能接受新的 I/O 请求。

一般来说,在为应用选择服务器时,首先要对磁盘的 I/O 性能进行基准测试,这样才能准确评估磁盘性能,以判断是否能够满足应用的需求。

当然,这需要你在 随机读 顺序读 随机写 顺序写 等各种应用场景下测试不同 I/O 大小(通常是 512B ~ 1MB 之间)的性能。

磁盘 I/O 观察

首先要观察的是每个磁盘的使用情况。iostat 是最常用的磁盘 I/O 性能观察工具。它提供了各种常用性能指标,例如每个磁盘的 利用率 IOPS 和 吞吐量。当然,这些指标实际上来自 /proc/diskstats

以下是 iostat 的输出示例:

如何监测 Linux 的磁盘 I/O 性能

在上述指标中,您需要注意的是:

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

您可能已经注意到 iostat 不能直接获取磁盘的饱和度。事实上,通常没有什么简单的方法可以测量饱和度。但是,您可以将观察到的 平均请求队列长度 完成读写请求的等待时间 基准测试(例如通过 fio)的结果进行比较,以综合评估磁盘饱和度。

进程 I/O 观察

除了每个磁盘的 I/O 情况,每个进程的 I/O 情况也是大家关注的重点。

上面提到的 iostat 只提供了观察磁盘的整体 I/O 性能数据。缺点是无法知道哪些进程正在读写磁盘。要观察进程的 I/O,还可以使用 pidstat 和 iotop 工具。

例如,要使用 pidstat

如何监测 Linux 的磁盘 I/O 性能

从 pidstat 的输出可以看出,它可以实时查看每个进程的 I/O 情况,这包括以下内容:

  • 用户 ID (UID) 和进程 ID (PID)。
  • 每秒读取的数据大小 (kB_rd/s),以 KB 为单位。
  • 每秒发出的写请求数据的大小(kB_wr/s),单位为 KB。
  • 每秒取消写入请求的数据大小 (kB_ccwr/s),以 KB 为单位。
  • 块 I/O 延迟 (iodelay),包括等待同步块(synchronized block)I/O 和换入块(swap-in block)I/O 完成的时间,以 时钟周期 为单位。

除了使用 pidstat 实时查看进程磁盘 I/O 外,还有一个磁盘性能分析的常用方法是根据 I/O 大小对进程进行排序。为此,我推荐 iotop 工具。它是一个类似于 top 的工具,您可以按 I/O 大小对进程进行排序,并找到具有更大 I/O 的进程。

如何监测 Linux 的磁盘 I/O 性能

从该输出可以看到,前两行分别代表 进程的磁盘读写总大小 磁盘的实际读写总大小 。由于 缓存 缓冲区 I/O 合并 等因素,它们可能不相等。

剩下的部分从各个角度代表了进程的 I/O 情况,包括 线程 IDI/O 优先级 每秒磁盘读取大小 每秒磁盘写入大小 换入百分比 等待 I/O 时钟百分比

结论

在本文中,我介绍了 Linux 磁盘 I/O 的性能指标和查看性能工具。我们通常使用 IOPS吞吐量 利用率 饱和度 响应时间 等几个指标来评估磁盘的 I/O 性能。

可以使用 iostat 获取磁盘的 I/O 情况,也可以使用 pidstatiotop 等观察进程的 I/O 情况。但在分析这些性能指标时,要注意结合 读写比率 I/O 类型I/O 大小 等综合分析。

链接:https://blog.devgenius.io/linux-disk-i-o-performance-1e920faba23

(版权归原作者所有,侵删)

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-12-03发表,共计2005字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中