性能分析与调优: Linux 磁盘I/O 观测工具

目录

一、实验

1.环境

2.iostat

3.sar

4.pidstat

5.perf

6. biolatency

7. biosnoop

8.iotop、biotop

9.blktrace

10.bpftrace

11.smartctl

二、问题

1.如何查看PSI数据

2.iotop如何安装

3.smartctl如何使用


一、实验

1.环境

(1)主机

表1-1 主机

主机架构组件IP备注
prometheus

监测

系统

prometheus、node_exporter 192.168.204.18
grafana监测GUIgrafana192.168.204.19
agent 

监测

主机

node_exporter192.168.204.20

(2)磁盘I/O观测工具

表1-2 磁盘I/O观测工具

序号工具描述
1iostat单个磁盘的各种统计信息
2sar磁盘历史统计信息
3pidstat按进程列出磁盘I/O使用情况
4perf记录块I/O跟踪点
5biolatency把磁盘I/O延时汇总成直方图
6biosnoop带PID和延时来跟踪磁盘I/O
7iotop、biotop磁盘的top程序:按进程汇总磁盘I/O
8blktrace磁盘I/O事件跟踪
9bpftrace自定义磁盘跟踪
10smartctl磁盘控制器统计信息

2.iostat

(1) 打印CPU和磁盘自启动以来的统计信息

每秒1次,共计5次

[root@agent ~]# iostat 1 5

(2)-x扩展统计、-z 跳过零活设备

每秒1次,共计5次

[root@agent ~]# iostat -xz 1 5 

(3) -d 只关注磁盘统计信息(没有CPU)、-m 代表MB、-t代表时间戳、-p ALL 表示包括每个分区统计

每秒1次,共计1次

[root@agent ~]# iostat -dmtxz -p ALL 1 1

3.sar

(1) -d 报告磁盘汇总信息

每秒1次,共计5次

[root@agent ~]# sar -d 1 5

4.pidstat

(1)-d 输出磁盘I/O 的统计信息

每秒1次,共计5次

[root@agent ~]# pidstat -d 1 5

5.perf

(1) 查询块tracepoint

[root@agent ~]# perf list "block:*"

(2) 用栈踪迹来记录块设备问题

sleep 10  跟踪的持续时间为10秒

[root@agent ~]# perf record -e block:block_rq_issue -a -g sleep 10[root@agent ~]# perf script --header

(3)使用过滤器与块tracepoint

①跟踪所有大小不小于100KB的块I/O 完成事件,CTRL+C结束

[root@agent ~]# perf record -e block:block_rq_complete --filter 'nr_sector > 200'

②跟踪所有的块I/O 同步写完成事件,CTRL+C结束

[root@agent ~]# perf record -e block:block_rq_complete --filter 'rwbs == "ws"'

③ 跟踪所有的块I/O 写完成事件,CTRL+C结束

[root@agent ~]# perf record -e block:block_rq_complete --filter 'rwbs ~ "*W*"'

(4)磁盘I/O延时

① 记录磁盘发出和完成事件,睡眠60秒

[root@agent ~]# perf record -e block:block_rq_issue,block:block_rq_complete -a sleep 60

② 写入指定文件

[root@agent ~]# perf script --header > out.disk01.txt

③ 查看文件

[root@agent ~]# vim out.disk01.txt 

6. biolatency

(1)以直方图的形式显示磁盘I/O延时

①BCC跟踪块I/O 10秒

[root@agent ~]# biolatency 10 1

(2)-F 显示每个I/O标志位组的直方图,-m以毫秒为单位输出

[root@agent ~]# biolatency -Fm 10 1

7. biosnoop

(1) 输出每个磁盘I/O的单行摘要

[root@agent ~]# biosnoop

(2)离群点分析

①写入一个文件

[root@agent ~]# biosnoop > out.biosnoop01.txt

② 安装延时列将输出排序,并打印最后5个条目(高延时项目)

[root@agent ~]# sort -n -k 8,8 out.biosnoop01.txt | tail -5

③文本编辑器打开输出

[root@agent ~]# vim out.biosnoop01.txt 

④ 从最快到最慢遍历离群值,寻找第一列的时间

(3)排队时间

-Q 显示从创建I/O 到向设备发出的时间

[root@agent ~]# biosnoop -Q

8.iotop、biotop

(1) iotop

①  -b 批量模式来提供滚动输出(不清楚屏幕)、-d5 间隔时间为5秒、-o 显示I/O 进程

[root@agent ~]# iotop -bod5

(2)biotop

① 磁盘的top工具

[root@agent ~]# biotop 

9.blktrace

(1)块设备I/O 事件的自定义跟踪工具

[root@agent ~]# blktrace -d /dev/sda -o - | blkparse -i -

(2)等价命令

[root@agent ~]# btrace /dev/sda 

(3)活动功率

① -a issue 跟踪D活动(发出I/O)

[root@agent ~]# btrace -a issue /dev/sda

(4) 分析

① 查看磁盘

[root@agent tracefiles]# lsblk

② dev/sda 上使用blktrace来分析

[root@agent tracefiles]# blktrace -d /dev/sda -o out -w 10

③ 写入跟踪文件

[root@agent tracefiles]# blkparse -i out.blktrace.* -d out.bin

④ 分析I/O轨迹的btt

[root@agent tracefiles]# btt -i out.bin

⑤ 查看当前目录

[root@agent tracefiles]# ls

10.bpftrace

(1) 计数块I/O tracepoint事件

[root@agent tracefiles]#  bpftrace -e 'tracepoint:block:* { @[probe] = count(); }'

(2) 把块I/O 大小汇总成一张直方图

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue { @bytes = hist(args->bytes); }'

(3)计数块I/O 请求的用户栈踪迹

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue { @[ustack] = count(); }'

[root@agent ~]#  bpftrace -e 't:block:block_rq_insert { @[ustack] = count(); }'

(4)计数块I/O 类型的标识位

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue { @[args->rwbs] = count(); }'

(5)跟踪块I/O 错误,包括设备和I/O类型

[root@agent ~]#  bpftrace -e 't:block:block_rq_complete /args->error/ { printf("dev %d type %s error %d/n", args->dev, args->rwbs, args->error); }'

(6)计数SCSI操作码

[root@agent ~]#  bpftrace -e 't:scsi:scsi_dispatch_cmd_start { @opcode[args->opcode] = count(); }'

(7)计数SCSI结果码

[root@agent ~]#  bpftrace -e 't:scsi:scsi_dispatch_cmd_done { @result[args->result] = count(); }'

(8)计数SCSI驱动程序函数

[root@agent ~]#  bpftrace -e 'kprobe:scsi* { @[func] = count(); }'

(9)磁盘I/O大小

① 按请求进程名称细分的磁盘I/O大小分布

[root@agent ~]#  bpftrace -e 't:block:block_rq_issue /args->bytes/ { @[comm] = hist(args->bytes); }'

② 添加args->rwbs作为直方图键,输出将按I/O类型进一步细分

[root@agent ~]#  bpftrace -e 't:block:block_rq_insert /args->bytes/ { @[comm, args->rwbs] = hist(args->bytes); }'

11.smartctl

(1)输出 SMART(自监测、分析和报告技术)数据 

[root@agent ~]# smartctl --all  /dev/sda

二、问题

1.如何查看PSI数据

(1)命令

[root@agent ~]# cat /proc/pressure/io

 some开头的一行显示了一些任务(线程)受到影响的时间,full开头的一行显示了所有可运行任务受到影响的时间

2.iotop如何安装

(1)搜索

[root@agent ~]# yum search iotop

(2)安装

[root@agent ~]# yum install iotop -y                   

3.smartctl如何使用

(1)命令

[root@agent ~]# smartctl -h

(2)参数

Usage: smartctl [options] device============================================ SHOW INFORMATION OPTIONS =====-h, --help, --usageDisplay this help and exit-V, --version, --copyright, --licensePrint license, copyright, and version information and exit-i, --infoShow identity information for device--identify[=[w][nvb]]Show words and bits from IDENTIFY DEVICE data                (ATA)-g NAME, --get=NAMEGet device setting: all, aam, apm, dsn, lookahead, security,wcache, rcache, wcreorder, wcache-sct-a, --allShow all SMART information for device-x, --xallShow all information for device--scanScan for devices--scan-openScan for devices and try to open each device================================== SMARTCTL RUN-TIME BEHAVIOR OPTIONS =====-j, --json[=[cgiosuv]]Print output in JSON format-q TYPE, --quietmode=TYPE                                           (ATA)Set smartctl quiet mode to one of: errorsonly, silent, noserial-d TYPE, --device=TYPESpecify device type to one of:ata, scsi[+TYPE], nvme[,NSID], sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,p][,x][,N], usbprolific, usbsunplus, sntjmicron[,NSID], intelliprop,N[+TYPE], marvell, areca,N/E, 3ware,N, hpt,L/M/N, megaraid,N, aacraid,H,L,ID, cciss,N, auto, test-T TYPE, --tolerance=TYPE                                           (ATA)Tolerance: normal, conservative, permissive, verypermissive-b TYPE, --badsum=TYPE                                              (ATA)Set action on bad checksum to one of: warn, exit, ignore-r TYPE, --report=TYPEReport transactions (see man page)-n MODE[,STATUS], --nocheck=MODE[,STATUS]                           (ATA)No check if: never, sleep, standby, idle (see man page)============================== DEVICE FEATURE ENABLE/DISABLE COMMANDS =====-s VALUE, --smart=VALUEEnable/disable SMART on device (on/off)-o VALUE, --offlineauto=VALUE                                       (ATA)Enable/disable automatic offline testing on device (on/off)-S VALUE, --saveauto=VALUE                                          (ATA)Enable/disable Attribute autosave on device (on/off)-s NAME[,VALUE], --set=NAME[,VALUE]Enable/disable/change device setting: aam,[N|off], apm,[N|off],dsn,[on|off], lookahead,[on|off], security-freeze,standby,[N|off|now], wcache,[on|off], rcache,[on|off],wcreorder,[on|off[,p]], wcache-sct,[ata|on|off[,p]]======================================= READ AND DISPLAY DATA OPTIONS =====-H, --healthShow device SMART health status-c, --capabilities                                            (ATA, NVMe)Show device SMART capabilities-A, --attributesShow device SMART vendor-specific Attributes and values-f FORMAT, --format=FORMAT                                          (ATA)Set output format for attributes: old, brief, hex[,id|val]-l TYPE, --log=TYPEShow device log. TYPE: error, selftest, selective, directory[,g|s],xerror[,N][,error], xselftest[,N][,selftest], background,sasphy[,reset], sataphy[,reset], scttemp[sts,hist],scttempint,N[,p], scterc[,N,M], devstat[,N], defects[,N], ssd,gplog,N[,RANGE], smartlog,N[,RANGE], nvmelog,N,SIZE-v N,OPTION , --vendorattribute=N,OPTION                            (ATA)Set display OPTION for vendor Attribute N (see man page)-F TYPE, --firmwarebug=TYPE                                         (ATA)Use firmware bug workaround:none, nologdir, samsung, samsung2, samsung3, xerrorlba, swapid-P TYPE, --presets=TYPE                                             (ATA)Drive-specific presets: use, ignore, show, showall-B [+]FILE, --drivedb=[+]FILE                                       (ATA)Read and replace [add] drive database from FILE[default is +/etc/smartmontools/smart_drivedb.hand then    /usr/share/smartmontools/drivedb.h]============================================ DEVICE SELF-TEST OPTIONS =====-t TEST, --test=TESTRun test. TEST: offline, short, long, conveyance, force, vendor,N,select,M-N, pending,N, afterselect,[on|off]-C, --captiveDo test in captive mode (along with -t)-X, --abortAbort any non-captive test on device=================================================== SMARTCTL EXAMPLES =====smartctl --all /dev/sda                    (Prints all SMART information)smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda(Enables SMART on first disk)smartctl --test=long /dev/sda          (Executes extended disk self-test)smartctl --attributes --log=selftest --quietmode=errorsonly /dev/sda(Prints Self-Test & Attribute errors)smartctl --all --device=3ware,2 /dev/sdasmartctl --all --device=3ware,2 /dev/twe0smartctl --all --device=3ware,2 /dev/twa0smartctl --all --device=3ware,2 /dev/twl0(Prints all SMART info for 3rd ATA disk on 3ware RAID controller)smartctl --all --device=hpt,1/1/3 /dev/sda(Prints all SMART info for the SATA disk attached to the 3rd PMPortof the 1st channel on the 1st HighPoint RAID controller)smartctl --all --device=areca,3/1 /dev/sg2(Prints all SMART info for 3rd ATA disk of the 1st enclosureon Areca RAID controller)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS安装k8s单机/集群及一些命令

目录 前言 1. 安装docker 2. 安装要求 3.准备网络(如果只装单机版可跳过此部) 4. 准备工作 5. 安装 5.1. 配置阿里云yum k8s源 5.2 安装kubeadm、kubectl和kubelet 5.3 初始化,只在master执行,子节点不要执行 5.3.1 一些…

npm报错error:03000086:digital envelope routines::initialization error

1.可能是因为node版本过高,与现在的项目不符合 这是降低node版本的命令,然后重新运行 npm install npm8.1.2 -g 2.改下这个package.json "dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service serve",也…

编码器与解码器LLM全解析:掌握NLP核心技术的关键!

让我们深入了解:基于编码器和基于解码器的模型有什么区别? 编码器与解码器风格的Transformer 从根本上说,编码器和解码器风格的架构都使用相同的自注意力层来编码词汇标记。然而,主要区别在于编码器旨在学习可以用于各种预测建模…

【Android开发】不同Activity之间的数据回传实例(一)摘桃子游戏

一、功能介绍 该项目实现的功能主要有: 在首页显示一个按钮点击该按钮跳转到桃园页面在桃园页面,点击桃子会弹窗显示摘到几个桃子,同时被点击桃子消失,总桃子数1点击退出桃园会返回首页,首页桃子数会根据点击的桃子数…

数据结构与算法教程,数据结构C语言版教程!(第三部分、栈(Stack)和队列(Queue)详解)四

第三部分、栈(Stack)和队列(Queue)详解 栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解。 使用栈…

1.UnityProfiler性能分析提升性能

一 Stats重要参数详解 1.main thread 主线程 业务逻辑都在这里,我们调用Unity API都在这里;例如设置transform位置,main thread里面处理 2.render thread,渲染线程,负责渲染图像、执行渲染循环、处理GPU命令、帧同步。…

计算机网络系统结构-2020期末考试解析

【前言】 不知道为什么计算机网络一门课这么多兄弟,这份看着也像我们的学科,所以也做了。 一. 单选题(每题 2 分,共 20 题,合计 40 分) 1 、当数据由主机 A 发送到主机 B ,不参…

机器学习_7、KNN

数据采用:电离层数据 KNN完整的代码电离层数据资源-CSDN文库 代码 import os import csv import numpy as np from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import …

ChatGPT可以帮你做什么?

学习 利用ChatGPT学习有很多,比如:语言学习、编程学习、论文学习拆解、推荐学习资源等,使用方法大同小异,这里以语言学习为例。 在开始前先给GPT充分的信息:(举例) 【角色】充当一名有丰富经验…

【分布式微服务专题】从单体到分布式(四、SpringCloud整合Sentinel)

目录 前言阅读对象阅读导航前置知识一、什么是服务雪崩1.1 基本介绍1.2 解决方案 二、什么是Sentinel2.1 基本介绍2.2 设计目的2.3 基本概念 三、Sentinel 功能和设计理念3.1 流量控制3.2 熔断降级3.3 系统负载保护 四、Sentinel 是如何工作的 笔记正文一、简单整合Sentinel1.1…

Zynq 电源

ZYNQ芯片的电源分PS系统部分和PL逻辑部分,两部分的电源分别是独立工作。PS系统部分的电源和PL逻辑部分的电源都有上电顺序,不正常的上电顺序可能会导致ARM系统和FPGA系统无法正常工作。 PS部分的电源有VCCPINT、VCCPAUX、VCCPLL和PS VCCO。 VCCPINT为PS内…

便捷好用的iOS文件管理App

便捷好用的iOS文件管理App 摘要 本文介绍了一款功能强大、免费的iOS文件管理App——克魔助手。通过使用克魔助手,用户可以轻松管理手机存储空间,清理垃圾文件,整理文件,并进行文件传输和截图操作。本文将详细介绍克魔助手的各项…

使用Sqoop将数据导入Hadoop的详细教程

在大数据处理中,Sqoop是一个强大的工具,它可以将关系型数据库中的数据导入到Hadoop生态系统中,以便进行进一步的分析和处理。本文将提供一个详细的教程,以帮助大家了解如何使用Sqoop将数据导入Hadoop。 准备工作 在开始之前&…

代码随想录 Leetcode707. 设计链表

题目: 代码(首刷看解析 2024年1月11日): class MyLinkedList { private:struct ListNode{int val;ListNode* next;ListNode(int val):val(val),next(nullptr){}};int size;ListNode* dummyHead; public:MyLinkedList() {dummyHead new List…

【算法】增减序列(贪心,差分)

题目 给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种…

机器人制作开源方案 | 六足灾后探测机器人

作者:毕钟诚 施钥 范江龙 张莉曼 陈金凤 单位:中国石油大学(北京) 指导老师:许亚岚 孙琳 世纪全球自然灾害频发,灾后探测重建工作十分重要,极端恶劣的现场探测环境,频发的余震甚至…

羊驼2:开放的基础和微调聊天模型--Llama 2论文阅读

论文地址:https://arxiv.org/pdf/2307.09288.pdfd 代码地址:GitHub - facebookresearch/llama-recipes: Examples and recipes for Llama 2 model 问答 用了多少个gpu? 这篇文档中使用了3.3M GPU小时的计算,使用的硬件类型是A…

H 指数,经典算法实战。

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

【java八股文】之Java基础篇

1、Java有哪几种数据类型 基本数据类型:byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节) char(2字节&a…

写点东西《Docker入门(下)》

写点东西《Docker入门(下)》 Docker ComposeDocker 注册表Docker 引擎Linux 容器和 Windows 容器的概念:容器编排Docker SwarmDocker Compose Docker Compose 是一个方便的工具,可帮助您轻松运行和连接不同的软件服务,就好像它们都是同一事件的一部分一样。 Docker Compo…