IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 的磁盘 IO 性能 -> 正文阅读

[系统运维]Linux 的磁盘 IO 性能

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 的输出示例:

[root@web02 ~]# iostat -d -x 1
Linux 3.10.0-514.21.2.el7.x86_64 (web02) 	04/22/2022 	_x86_64_	(16 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.07    0.09    0.79     2.31    26.43    65.06     0.01    7.33    1.65    7.99   0.40   0.04
sda               0.00     0.06    0.07    2.75     3.92    58.17    44.09     0.00    1.09    2.60    1.05   0.53   0.15
dm-0              0.00     0.00    0.05    0.46     3.06     6.12    36.53     0.00    1.48    2.91    1.34   0.75   0.04
dm-1              0.00     0.00    0.00    0.00     0.00     0.00    16.69     0.00    0.16    0.16    0.00   0.16   0.00
dm-2              0.00     0.00    0.09    2.21     2.35    46.99    42.82     0.01    3.34    1.66    3.41   0.50   0.11
dm-3              0.00     0.00    0.02    1.00     0.76    31.47    63.32     0.00    1.25    2.20    1.23   0.63   0.06
dm-4              0.00     0.00    0.00    0.00     0.02     0.01    58.38     0.00    3.19    3.25    2.09   3.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               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
sda               0.00     0.00    1.00    1.00     8.00    16.00    24.00     0.01    4.50    9.00    0.00   4.50   0.90
dm-0              0.00     0.00    1.00    1.00     8.00    16.00    24.00     0.01    4.50    9.00    0.00   4.50   0.90
dm-1              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
dm-2              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
dm-3              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
dm-4              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

^C

在这里插入图片描述

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

  • %util 是我们前面提到的磁盘 I/O 使用情况
  • r/sw/s 是 IOPS
  • rkB/swkB/s 是吞吐量
  • r_awaitw_await 是响应时间

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

进程 I/O 观察

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

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

例如,要使用 pidstat

[root@web02 ~]# pidstat -d 1
Linux 3.10.0-514.21.2.el7.x86_64 (web02) 	04/22/2022 	_x86_64_	(16 CPU)


04:13:35 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:13:36 PM     0     27761      0.00      7.69      0.00  redis-server

04:13:36 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:13:37 PM     0       964      0.00     12.00      0.00  auditd
04:13:37 PM     0      1389      0.00     36.00     24.00  rsyslogd
04:13:37 PM     0      1727      0.00     16.00      0.00  sniper
04:13:37 PM     0     27761      0.00      4.00      0.00  redis-server

04:13:37 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:13:38 PM  1005      1656      0.00     20.00      0.00  java
04:13:38 PM     0      1727      0.00     12.00      0.00  sniper
04:13:38 PM  1005      7872      0.00      8.00      0.00  java
04:13:38 PM     0     27761      0.00      8.00      0.00  redis-server
04:13:38 PM     0     43321      0.00      8.00      0.00  sshd
04:13:38 PM  1006     43328      0.00      4.00      0.00  bash

04:13:38 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:13:39 PM     0      1727      0.00      4.00      0.00  sniper
04:13:39 PM     0     27761      0.00      4.00      0.00  redis-server

04:13:39 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:13:40 PM     0     27761      0.00      8.00      0.00  redis-server

04:13:40 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:13:41 PM     0      1726      0.00      4.00      0.00  sniper
04:13:41 PM     0     27761      0.00     20.00      0.00  redis-server
^C

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
Average:        0       964      0.00      1.99      0.00  auditd
Average:        0      1389      0.00      5.96      3.97  rsyslogd
Average:     1005      1656      0.00      3.31      0.00  java
Average:        0      1726      0.00      0.66      0.00  sniper
Average:        0      1727      0.00      5.30      0.00  sniper
Average:     1005      7872      0.00      1.32      0.00  java
Average:        0     27761      0.00      8.61      0.00  redis-server
Average:        0     43321      0.00      1.32      0.00  sshd
Average:     1006     43328      0.00      0.66      0.00  bash
[root@web02 ~]# 

在这里插入图片描述

![
在这里插入图片描述

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 的进程。

iotop

在这里插入图片描述

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

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

结论

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

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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 11:09:45  更:2022-04-23 11:11:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:46:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码