当前位置: 首页 > 科技观察

如何监控Linux磁盘I-O性能

时间:2023-03-20 16:39:43 科技观察

在我之前的文章:《探讨 Linux 的磁盘 I/O》中,讲了Linux磁盘I/O的工作原理,我们了解到Linux存储系统I/O栈由文件系统组成层(文件系统层)、通用块层(generalblocklayer)和设备层(devicelayer)。其中,公共块层是Linux磁盘I/O的核心。向上,提供访问文件系统和应用程序块设备的标准接口;向下,将各种异构的磁盘设备抽象为统一的块设备,响应文件系统和应用程序发送的I/O。在本文中,我们将了解磁盘性能指标以及如何查看它们。LinuxDiskPerformanceMetrics在衡量磁盘性能时,我们通常会参考五个常用指标:利用率、饱和度、IOPS、吞吐量和响应时间。这五个指标是衡量磁盘性能的基本指标。利用率:磁盘处理I/O的时间百分比。利用率过高(如超过80%)通常表示磁盘I/O存在性能瓶颈。饱和度:指磁盘处理I/O的繁忙程度。过饱和意味着磁盘存在严重的性能瓶颈。当饱和度为100%时,磁盘无法接受新的I/O请求。IOPS(Input/OutputPerSecond):指每秒的I/O请求数。吞吐量:每秒I/O请求的大小。响应时间:指发送I/O请求到收到响应的时间间隔。这里需要注意的是,关于利用率,我们只考虑有无I/O,而不考虑I/O的大小。即当利用率为100%时,磁盘仍有可能接受新的I/O请求。一般来说,在为应用选择服务器时,首先要对磁盘的I/O性能进行benchmark,这样才能准确评估磁盘的性能,以确定其是否能够满足应用的需求。当然,这需要你测试不同I/O大小(通常在512B到1MB之间)在随机读、顺序读、随机写、顺序写等各种应用场景下的性能。磁盘I/O观察首先要观察的是每个磁盘的使用情况。iostat是最常用的磁盘I/O性能监控工具。它提供各种常见的性能指标,例如利用率、IOPS和每个磁盘的吞吐量。当然,这些指标实际上来自/proc/diskstats。这是iostat的示例输出:#-d-xmeansdisplayalldiskI/Operformance$iostat-d-x1Devicer/sw/srkB/swkB/srrqm/swrqm/s%rrqm%wrqmr_awaitw_awaitaqu-szrareq-szwareq-szsvctm%utilloop00.000.000.000.000。000.000.000.000.000.000.000.000.000.000.000.00.00.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00ssdb0.00sdb0.00sdb0.00sdb0.00sdb0.00sdb0.00s.00sdb0.00sdb0.000..00sdb0.00s.00sdb0.000.。000.000.000.000.000.000.000.000.00在上面的指标中,需要注意的是:%util是我们前面提到的磁盘I/O使用情况,r/s和w/s是IOPSrkB/s,wkB/s是吞吐量r_await和w_await是响应时间你可能已经注意到iostat并没有直接获取磁盘的饱和度。事实上,通常没有简单的方法来测量饱和度。但是,您可以将观察到的平均请求队列长度或完成读写请求的等待时间与基准测试结果(例如通过fio)进行比较,以对磁盘饱和度进行一般评估。进程I/O观察除了各个磁盘的I/O情况外,各个进程的I/O情况也是大家关注的重点。上面提到的iostat只是提供了观察磁盘的整体I/O性能数据。缺点是无法知道哪些进程正在读写磁盘。要观察进程的I/O,您还可以使用pidstat和iotop工具。例如使用pidstat$pidstat-d113:39:51UIDPIDkB_rd/skB_wr/skB_ccwr/siodelayCommand13:39:521029160.004.000.000rsyslogd从pidstat的输出可以看出可以实时查看各个进程的状态对于I/O案例,这包括以下内容:用户ID(UID)和进程ID(PID)。每秒读取的数据大小(kB_rd/s),单位为KB。每秒发送的写请求数据大小(kB_wr/s),单位为KB。每秒取消写入请求的数据大小(kB_ccwr/s),单位为KB。块I/O延迟(iodelay),包括等待同步块I/O和换入块I/O完成的时间,以时钟周期测量。除了使用pidstat实时查看进程磁盘I/O外,另一种常用的磁盘性能分析方法是根据I/O大小对进程进行排序。为此,我推荐iotop工具。它是一个类似于top的工具,您可以在其中按I/O大小对进程进行排序并找到具有更大I/O的进程。$iotopTotalDISKREAD:0.00B/s|TotalDISKWRITE:7.85K/sActualDISKREAD:0.00B/s|ActualDISKWRITE:0.00B/sTIDPRIOUSERDISKREADDISKWRITESWAPINIO>COMMAND15055be/3root0.00B/s7.85K/s0.00%0.00systemd-journa从这个输出可以可以看出,前两行分别代表进程的磁盘读写总大小和实际的磁盘读写总大小。由于缓存、缓冲、I/O合并等原因,它们可能不相等。剩下的部分从各个角度代表进程的I/O情况,包括线程ID、I/O优先级、每秒磁盘读取大小、磁盘每秒写入大小、换入百分比和等待I/O时钟百分比。结论在本文中,我介绍了Linux磁盘I/O性能指标和用于查看性能的工具。我们通常使用IOPS、吞吐量、利用率、饱和度和响应时间等多个指标来评估磁盘的I/O性能。可以使用iostat获取磁盘的I/O状态,也可以使用pidstat、iotop等观察进程的I/O状态。但在分析这些性能指标时,需要注意结合读写比、I/O类型、I/O大小等综合分析。