一、如何正确分析IO性能

1.1 BLKTRACE分析IO性能

之前的文章已经说明,要是系统发生I/O性能问题,我们常用的命令是无法精确定位问题(内核I/O调度器消耗的时间和硬件消耗的时间,这个不能作为性能指标),这时候blktrace就可以用来分析,它记录了I/O整个过程,从中可以分析是I/O调度器慢还是硬件响应慢。

1.2 BLKTRACE原理

# man blktrace

DESCRIPTION:
  blktrace is a block layer IO tracing mechanism which provides detailed information about request queue operations up to user space.
  There are three major components: a kernel component, a utility to record the i/o trace information for the kernel to user space,
  andutilities to analyse and view the trace information. # 大概意思就是说:
# blktrace是一个块层(block layer)IO跟踪机制,将请求队列的详细信息发送到用户空间
# 主要有三个组件:
# 1. 内核组件
# 2. 记录内核到用户空间的I/O追踪信息的程序
# 3. 分析、展示I/O追踪信息的程序

1.2.1 执行过程分析

  • 可能会被Device Mapper映射到其它设备 Remap
  • 可能会因为I/O请求size太大而被拆分成多个I/O请求  Split
  • 可能因为与其它I/O请求的物理位置相邻而合并  Merge
  • 然后通过Device driver交给硬件;如:分布式存储经过HBA、光纤、SAN交换机(网络)等最后到达存储设备,设备完成I/O请求之后再把结果返回给用户空间。如下图:

1.3 执行过程解析

通过blktrace将结果输出到屏幕,然后用blkparse将屏幕中的结果作为输入,最后将分析结果输出到屏幕,需要注意的是blktrace不具备分析功能,需要借助blkparse进行分析!!!

# blktrace -d /dev/sda -o - | blkparse -i -
8,0 0 1 0.000000000 8702 A WS 13104216 + 8 <- (8,3) 11258968
8,0 0 2 0.000001717 8702 Q WS 13104216 + 8 [mysqld]
8,0 0 3 0.000003721 8702 G WS 13104216 + 8 [mysqld]
8,0 0 4 0.000004734 8702 I WS 13104216 + 8 [mysqld]
8,0 0 5 0.000006124 8702 D WS 13104216 + 8 [mysqld]
8,0 0 6 0.000035396 0 C WS 13104216 + 8 [0]
8,0 0 7 1.000409841 8702 A WS 13104216 + 8 <- (8,3) 11258968
8,0 0 8 1.000410566 8702 Q WS 13104216 + 8 [mysqld]
8,0 0 9 1.000412044 8702 G WS 13104216 + 8 [mysqld]
8,0 0 10 1.000412785 8702 I WS 13104216 + 8 [mysqld]
8,0 0 11 1.000413498 8702 D WS 13104216 + 8 [mysqld]
8,0 0 12 1.000438822 0 C WS 13104216 + 8 [0]
8,0 0 13 1.018085707 20501 A W 96409432 + 8 <- (8,3) 94564184
8,0 0 14 1.018085964 20501 Q W 96409432 + 8 [kworker/u32:0]
8,0 0 15 1.018086720 20501 G W 96409432 + 8 [kworker/u32:0]
8,0 0 16 1.018087010 20501 I W 96409432 + 8 [kworker/u32:0]
8,0 0 17 1.018087394 20501 D W 96409432 + 8 [kworker/u32:0]
8,0 0 18 1.018093866 20501 A W 96411880 + 8 <- (8,3) 94566632
8,0 0 19 1.018094103 20501 Q W 96411880 + 8 [kworker/u32:0]
8,0 0 20 1.018094495 20501 G W 96411880 + 8 [kworker/u32:0]
8,0 0 21 1.018094639 20501 I W 96411880 + 8 [kworker/u32:0]
8,0 0 22 1.018094963 20501 D W 96411880 + 8 [kworker/u32:0]
8,0 0 23 1.018106915 0 C W 96409432 + 8 [0]

1.3.1 字段解释

  • 第一列:主次设备号
  • 第二列:CPU
  • 第三列:序列号
  • 第四列:时间戳
  • 第五列:PID进程号
  • 第六列:具体事件 后续详解
  • 第七列:具体的动作(读、写等)
  • 第八列:磁盘起始块 + 操作的块的数量
  • 第九列:进程名和具体的命令

1.3.2 第六列解释

  • A:IO被重新映射到不同的设备
  • C:IO请求执行完毕
  • D:IO请求进入Driver
  • G:IO请求生成
  • I:IO请求进入IO调度器队列
  • M:IO返回与队列中的请求合并
  • P: 当一个I/O入队一个空队列时,Linux会锁住这个队列,不处理该I/O,这样做是为了等待一会,看有没有新的I/O进来,可以合并
  • Q:即将生成IO请求
  • S:没有可用的request结构体,也就是I/O满了,只能等待有request结构体完成释放
  • T:超时断开
  • U:当队列中已经有I/O request时,会放开这个队列,准备向磁盘驱动发送该I/O。
  • X: 对于做了Raid或进行了device mapper(dm)的设备,进来的IO可能需要切割,然后发送给不同的设备

1.3.3 第六列代表了IO经过的各阶段

1.3.4 IO的生命周期以及计算方法

  • Q2G:生成IO请求所消耗的时间,包括remap和split的时间
  • G2I:IO请求进入IO调度器所消耗的时间,包括了merge的时间
  • I2D:IO请求在IO调度器中等待的时间
  • D2C:IO请求在Driver上和硬件上所消耗的时间
  • Q2C:整个IO请求所消耗的时间即:Q2I + I2D + D2C = Q2C
  • 以上指标有助于进一步定位缓慢发生的地方
  • D2C:可以作为硬件性能的指标
  • I2D:可以作为IO调度器的性能指标

   后续通过写脚本可以非常值观的统计IO读写数量、延迟、块大小等信息!

Linux服务器I/O性能分析-2的更多相关文章

  1. Linux服务器I/O性能分析-1

    一.IOSTAT误区 1.1 误区-svctm Linux上的svctm是重要的I/O指标(I/O平均服务时间-单位毫秒),这个值直接反映了硬件的性能(I/O请求从SCSI层发出--->I/O完 ...

  2. Linux服务器I/O性能分析-3

    一.通过脚本分析IO的读/写数量.最大延迟.延迟的分布情况.块大小及数量 #!/bin/sh # # File Name : count_io.sh # Time : 2020-07-29-11:24 ...

  3. Linux服务器的那些性能参数指标

    Linux服务器的那些性能参数指标 一个基于Linux操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要, ...

  4. x86服务器中网络性能分析与调优 转

    x86服务器中网络性能分析与调优 2017-04-05 巨枫 英特尔精英汇 [OpenStack 易经]是 EasyStack 官微在2017年新推出的技术品牌,将原创技术干货分享给您,本期我们讨论 ...

  5. 转 Linux日志文件系统及性能分析

    日志文件系统可以在系统发生断电或者其它系统故障时保证整体数据的完整性,Linux是目前支持日志文件系统最多的操作系统之一,本文重点研究了Linux常用的日志文件系统:EXT3.ReiserFS.XFS ...

  6. linux下常见的性能分析工具

    转载于:http://bian5399.blog.51cto.com/3848702/834715 性能调优的主要目的是使系统能够有效的利用各种资源,最大的发挥应用程序和系统之间的性能融合,使应用高效 ...

  7. Linux服务器挂死案例分析

    问题现象: 在linux服务器上运行一个指定的脚本时,就会出现无数个相同进程的,而且不停的产生,杀也杀不掉,最后系统就陷入死循环,无法登陆,只能人工去按机器的电源键才可以.这够崩溃的吧? 问题分析过程 ...

  8. 服务器病了吗? Linux 服务器的那些性能参数指标

    一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当你的程序非正常工作的时候, ...

  9. Linux 服务器的那些性能参数指标

    一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当你的程序非正常工作的时候, ...

随机推荐

  1. the Agiles Scrum Meeting 6

    会议时间:2020.4.14 20:00 1.每个人的工作 今天已完成的工作 增量组:开发广播正文展开收起功能 issues:增量组:广播正文展开收起功能实现 完善组:修复冲刺部分的bug issue ...

  2. C++ 、Qt计算时间的方法

    原文链接:https://blog.csdn.net/chy555chy/article/details/53405072 Qt计算时间的两种方法: QTime elapsed() : ms QTim ...

  3. 计算机网络之应用层概述(C/S模型与p2p模型)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105582318 学习课程:<2019王道考研计算机网络> 学习目的 ...

  4. yum history使用详解(某次为解决误卸载软件的回退实验)

    [root@localhost ~]# yum history list #查看历史 Loaded plugins: fastestmirror ID | Command line | Date an ...

  5. linux中的分号 && ||

    几个符号的用法 ; 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行. && 顺序执行各条命令, 只有当前一个执行成功时候, 才执行后面的. & 放在启动参 ...

  6. 碰撞的蚂蚁 牛客网 程序员面试金典 C++ Java Python

    碰撞的蚂蚁 牛客网 程序员面试金典 C++ Java Python 题目描述 在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率.(这里的相撞是指存在任意两只 ...

  7. AtCoder Beginner Contest 220部分题(G,H)题解

    刚开始的时候被E题卡住了,不过发现是个数学题后就开始使劲推式子,幸运的是推出来了,之后的F题更是树形DP换根的模板吧,就草草的过了,看了一眼G,随便口胡了一下,赶紧打代码,毕竟时间不多了,最后也没打完 ...

  8. cf16C Monitor(额,,,,水数学,,)

    题意: 一块镜子长宽是a*b.现在要调整(切割)成x:y的比例. 问调整完的最大面积是多少. 思路: 先将x,y弄成最简比例,然后放大到不超过min(a,b)即可. 代码: ll a,b,x,y; l ...

  9. Linux 文本三剑客之 grep

    Linux 系统中一切皆文件. 文件是个文本.可以读.可以写,如果是二进制文件,还能执行. 在使用Linux的时候,大都是要和各式各样文件打交道.熟悉文本的读取.编辑.筛选就是linux系统管理员的必 ...

  10. Spring Security OAuth2 单点登录

    1. OAuth 2.0 OAuth(Open Authorization)为用户资源的授权提供了一个安全的.开放而又简易的标准.最简单的理解,我们可以看一下微信OAuth2.0授权登录流程: 通过O ...