Linux磁盘性能方法以及磁盘io性能分析

Linux磁盘性能方法以及磁盘io性能分析

  • 1. fio压测
    • 1.1. 安装fio
    • 1.2. bs = 4k iodepth = 1:随机读/写测试,能反映硬盘的时延性能
    • 1.3. bs = 128k iodepth = 32:顺序读/写测试,能反映硬盘的吞吐性能
  • 2. dd压测
    • 2.1. 测试纯写入性能
    • 2.2. 测试纯读取性能
  • 3.磁盘性能分析
    • 3.1. 判断磁盘io打满
    • 3.2. io打满是由于磁盘本身问题还是应用过量
    • 3.3. 云盘的性能参考
  • 4. 疑问和思考
    • 4.1 %util能否代表磁盘io性能压力过大?
    • 4.2 如何判断磁盘性能是否饱和?
    • 4.3 如何判断磁盘性慢,是否与磁盘负载高还是低层设备io性能差?

磁盘性能是衡量计算机系统运行状况的关键因素之一。对于磁盘性能的测试和分析,Fio 和 dd 是两个常用的工具。在这篇文章中,将介绍如何使用 Fio 进行磁盘 I/O 测试,以及如何分析磁盘性能。同时,还会简单介绍 dd 工具的使用。

Fio 是一个灵活的 I/O 测试工具,支持多种工作模式,包括顺序读写、随机读写等。在安装 Fio 时,可以选择通过 yum 或编译源码进行安装。Fio 的测试报告中包含了丰富的信息,包括吞吐量和时延等指标。

除了 Fio 以外,dd 也是一个常用的磁盘测试工具。dd 可以用于测试磁盘的纯写入和纯读取性能。通过使用不同的参数,可以定制 dd 测试的读写块大小和读写次数等。

在分析了磁盘性能之后,可以使用 iostat 命令对磁盘的各项指标进行监控。iostat 可以显示磁盘的读写吞吐量、I/O 请求数等指标,帮助分析磁盘性能是否满足系统需求。另外,还需要参考磁盘类型的带宽参数,来判断磁盘性能的瓶颈可能来自哪里,例如磁盘本身的问题或者是应用程序的过量读写等。总之,在对磁盘性能进行测试和分析时,需要综合考虑多个方面的因素,才能更准确地判断系统的运行状况。


1. fio压测

1.1. 安装fio

使用yum安装

#yum安装
yum install fio

编译安装

# 下载Fio源码。
wget https://github.com/axboe/fio/archive/fio-2.1.10.tar.gz
#解压Fio源码。
tar -zxvf fio-2.1.10.tar.gz
#编译并安装Fio。
cd fio-fio-2.1.10
make
make install
#检查安装的Fio版本号。
fio --version
#回显信息如下,则Fio安装成功。
fio-2.1.10

1.2. bs = 4k iodepth = 1:随机读/写测试,能反映硬盘的时延性能

# 测试硬盘的随机写时延。
fio -filename=/data/fio.txt -ioengine=libaio -direct=1 -iodepth 1 -thread -rw=randwrite -bs=4k -size=100G -numjobs=48 -runtime=300 -group_reporting -name=mytest

# 测试硬盘的随机读时延。
fio -filename=/data/fio.txt -ioengine=libaio -direct=1 -iodepth 1 -thread -rw=randread -bs=4k -size=100G -numjobs=48 -runtime=300 -group_reporting -name=mytest

查看测试报告
在这里插入图片描述

1.3. bs = 128k iodepth = 32:顺序读/写测试,能反映硬盘的吞吐性能

# 测试硬盘的随机写带宽。
fio -filename=/data/fio.txt -ioengine=libaio -direct=1 -iodepth 32 -thread -rw=randwrite -bs=128k -size=100G -numjobs=48 -runtime=300 -group_reporting -name=mytest

# 测试硬盘的随机读带宽。
fio -filename=/data/fio.txt -ioengine=libaio -direct=1 -iodepth 32 -thread -rw=randread -bs=128k -size=100G -numjobs=48 -runtime=300 -group_reporting -name=mytest

查看测试报告
在这里插入图片描述

2. dd压测

dd 也是我们经常使用到的磁盘测试工具,Linux服务器装好系统之后,想要知道硬盘的读写是否能满足服务的需要,如果不满足硬盘的IO就是服务的一个瓶颈。我们可以使用dd命令简单进行测试,更为专业的测试可以使用上面描述的fio 工具:
time有计时作用,dd用于复制,从if读出,写到of。if=/dev/zero不产生IO,因此可以用来测试纯写速度。同理of=/dev/null不产生IO,可以用来测试纯读速度。bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

2.1. 测试纯写入性能

dd if=/dev/zero of=/data/testw bs=8k count=10000 oflag=direct
10000+0 records in
10000+0 records out
81920000 bytes (82 MB) copied, 3.07226 s, 26.7 MB/s

2.2. 测试纯读取性能

# 创造一个2G的可读文件
dd if=/dev/zero of=/data/testr bs=10M count=200
200+0 records in
200+0 records out
2097152000 bytes (2.1 GB) copied, 2.88613 s, 727 MB/s

# 测试纯读速度
dd if=/data/testr of=/dev/null bs=8k count=10000 iflag=direct
10000+0 records in
10000+0 records out
81920000 bytes (82 MB) copied, 3.07104 s, 26.7 MB/s

3.磁盘性能分析

使用iostat命令可以获取当前硬盘的指标情况,以判断当前的硬盘性能是否足够。但是经常会遇到一些磁盘的ioutil已经打满,只能判断io性能不足,不能判断是否与应用对磁盘读写过高导致io打满,还是磁盘本身的性能不足导致小量的io读写就导致磁盘性能打满,常见的分析手段

iostat -mx 1

在这里插入图片描述

3.1. 判断磁盘io打满

如上图所示,ioutil标志当前磁盘的io打满情况,一般大于60%以上就认为磁盘的io有比较大的压力,如果持续90%以上,并且间歇性出现100%,则认为磁盘的io性能已经打满

3.2. io打满是由于磁盘本身问题还是应用过量

ioutil需要配合当前读写量配合看(标红部分),来判断是否当前的磁盘性能问题是来于底层本身的问题还是应用的磁盘读写过量导致。以ioutil使用率为90%为准绳,判断当前的磁盘读、写的带宽情况,常见的磁盘类型的带宽参考如下。

磁盘类型iops磁盘最大吞吐备注
机械磁盘SATA150150MB/s7200 rpm的磁盘IOPS = 1000 / (9 + 4.17) = 76 IOPS
10000 rpm的磁盘IOPS = 1000 / (6+ 3) = 111 IOPS
15000 rpm的磁盘IOPS = 1000 / (4 + 2) = 166 IOPS
SSD SATA3000~10000250MB/s - 400MB/s
nvme20w+2GB/s +
内存100w+30~60 GB/s。

3.3. 云盘的性能参考

  • 云硬盘类型

4. 疑问和思考

4.1 %util能否代表磁盘io性能压力过大?

不能。

%util是最容易让人产生误解的一个参数,很多初学者看到%util 等于100%就说硬盘能力到顶了,这种说法是错误的。

%util数据源自diskstats中的io_ticks,这个值并不关心等待在队里里面IO的个数,它只关心队列中有没有IO。

和超时排队结账这个类比最本质的区别在于,现代硬盘都有并行处理多个IO的能力,但是收银员没有。收银员无法做到同时处理10个顾客的结账任务而消耗的总时间与处理一个顾客结账任务相差无几。但是磁盘可以。所以,即使%util到了100%,也并不意味着设备饱和了。

最简单的例子是,某硬盘处理单个IO请求需要0.1秒,有能力同时处理10个。但是当10个请求依次提交的时候,需要1秒钟才能完成这10%的请求,,在1秒的采样周期里,%util达到了100%。但是如果10个请一次性提交的话, 硬盘可以在0.1秒内全部完成,这时候,%util只有10%。

因此,在上面的例子中,一秒中10个IO,即IOPS=10的时候,%util就达到了100%,这并不能表明,该盘的IOPS就只能到10,事实上,纵使%util到了100%,硬盘可能仍然有很大的余力处理更多的请求,即并未达到饱和的状态。

如下4张图,可以看到当IOPS为1000的时候%util为100%,但是并不意味着该盘的IOPS就在1000,实际上2000,3000,5000的IOPS都可以达到。根据%util 100%时的 r/s 或w/s 来推算磁盘的IOPS是不对的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

那么有没有一个指标用来衡量硬盘设备的饱和程度呢。很遗憾,iostat没有一个指标可以衡量磁盘设备的饱和度。

4.2 如何判断磁盘性能是否饱和?

通过使用iostat -xm 1获取磁盘的io使用情况,相关参数如下

$iostat -d -k 1 10
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              39.29        21.14         1.44  441339807   29990031
sda1              0.00         0.00         0.00       1623        523
sda2              1.32         1.43         4.54   29834273   94827104
sda3              6.30         0.85        24.95   17816289  520725244
sda5              0.85         0.46         3.40    9543503   70970116
sda6              0.00         0.00         0.00        550        236
sda7              0.00         0.00         0.00        406          0
sda8              0.00         0.00         0.00        406          0
sda9              0.00         0.00         0.00        406          0
sda10            60.68        18.35        71.43  383002263 1490928140

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             327.55      5159.18       102.04       5056        100
sda1              0.00         0.00         0.00          0          0

disk属性值说明:
rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

关键指标 svctm、await、avgque-sz

  • 如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;
  • 如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
  • 如果avgqu-sz比较大,也表示有当量io在等待。

await能够反映磁盘读写的正常时间,通常情况下,不应该超过5ms,因此可以通过该指标判断磁盘io性能是否已经达到瓶颈

4.3 如何判断磁盘性慢,是否与磁盘负载高还是低层设备io性能差?

磁盘io性能关键指标: svctm、await、avgque-sz
磁盘负载指标: w/s和r/s

两者相结合,判断磁盘的io慢是由于磁盘io负载高导致还是磁盘设备本身性能差导致

  • svctm、await、avgque-sz 大,但是w/s和r/s 小,表示磁盘没有磁盘io高负载,但是磁盘io响应慢,大概率是磁盘低层设备性能差导致
  • svctm、await、avgque-sz 大,w/s和r/s 大,表示表示磁盘磁盘io高负载,导致依然很慢,大概率是磁盘读写压力过大,导致磁盘io响应慢

参考云厂商磁盘io的磁盘读写吞吐情况
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】Pytorch 教程(十五):PyTorch数据结构:7、模块(Module)详解(自定义神经网络模型并训练、评估)

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor(张量)1. 维度(Dimensions)2. 数据类型(Data Types)3. GPU加速(GPU Acceleration) 2、张量的数学运算1. 向量运算2. 矩阵…

《2023跨境电商投诉大数据报告》发布|亚马逊 天猫国际 考拉海购 敦煌网 阿里巴巴

2023年,跨境电商API接口天猫国际、京东国际和抖音全球购以其强大的品牌影响力和市场占有率,稳坐行业前三的位置。同时,各大跨境电商平台消费纠纷问题层出不穷。依据国内知名网络消费纠纷调解平台“电诉宝”(315.100EC.CN&#xff…

C++设计模式_创建型模式_工厂方法模式

目录 C设计模式_创建型模式_工厂方法模式 一、简单工厂模式 1.1 简单工厂模式引入 1.2 简单工厂模式 1.3 简单工厂模式利弊分析 1.4 简单工厂模式的UML图 二、工厂方法模式 2.1 工厂模式和简单工厂模式比较 2.2 工厂模式代码实现 2.3 工厂模式UML 三、抽象工厂模式 3.1 战斗场景…

C语言可以干些什么?C语言主要涉及哪些IT领域?

C语言可以干些什么?C语言主要涉及哪些IT领域? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家…

LangChain---大型语言模型(LLM)的标准接口和编程框架

1.背景说明 公司在新的一年规划中突然提出要搞生成式AI(GenAI)的相关东西,在公司分享的参考资料中了解到了一些相关的信息,之所以想到使用LangChain,是因为在应用中遇到了瓶颈问题,除了已经了解和研究过的OpenAI的ChatGpt&#xf…

分层解耦-三层架构(未完)

controller层——》service——》dao——》service——》controller 控制反转 依赖注入

阿里巴巴找黄金宝箱(I)【华为OD机试-JAVAPythonC++JS】

题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子…

Android 性能优化--APK加固(1)混淆

文章目录 为什么要开启混淆如何开启代码混淆如何开启资源压缩代码混淆配置代码混淆后,Crash 问题定位结尾 本文首发地址:https://h89.cn/archives/211.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 为什么要开启混淆 先上一个 …

“智农”-高标准农田

高标准农田是指通过土地整治、土壤改良、水利设施、农电配套、机械化作业等措施,提升农田质量和生产能力,达到田块平整、集中连片、设施完善、节水高效、宜机作业、土壤肥沃、生态友好、抗灾能力强、与现代农业生产和经营方式相适应的旱涝保收、稳产高产…

BUUCTF---wireshark1

1.题目描述 2.下载附件是一个.pcap的文件 3.需要用到wireshark工具,用该工具打开文件 4.用户在登录密码时一般不会用get方式提交,因为这样不安全,相比较而言post安全一点。 5.使用http.request.methodPOST命令进行过滤,得到一条流…

道路千万条,安全第一条,如何让机器人更安全?

停的住,停的稳,该避就避,该停就停。 商用机器人实现落地的前提有很多,但安全问题毫无疑问是重中之重。尤其随着机器人的应用场景开始向复杂化、小型化方向拓展,对机器人的安全能力要求更是与日俱增。如何保证机器人在…

供水管网水力模型的建立与应用

阐述管网水力模型构建流程,建立供水管网水力模型。通过数据录入生成管网基本拓扑结构及物理信息,在模型简化之后利用监测数据进行模型校核,保障管网模型满足精度要求。利用管网模型进行管网工况分析,掌握管网内压力分布与管道流速分布状态,提出管网运行薄弱环节。 给…

测试环境搭建整套大数据系统(七:集群搭建kafka(2.13)+flink(1.13.6)+dinky(0.6)+iceberg)

一:搭建kafka。 1. 三台机器执行以下命令。 cd /opt wget wget https://dlcdn.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz tar zxvf kafka_2.13-3.6.1.tgz cd kafka_2.13-3.6.1/config vim server.properties修改以下俩内容 1.三台机器分别给予各自的broker_id…

C++设计模式之——享元模式详解和代码案例

文章目录 C中实现享元模式通常涉及以下几个关键部分:一个简单的C代码片段示例享元模式的进一步说明C享元模式代码案例——咖啡店订单系统享元模式在现实世界的应用场景 C中实现享元模式通常涉及以下几个关键部分: 享元模式(Flyweight Patter…

【Java设计模式】二、单例模式

文章目录 0、单例模式1、饿汉式2、懒汉式3、双重检查4、静态内部类5、枚举6、单例模式的破坏:序列化和反序列化7、单例模式的破坏:反射8、单例模式的实际应用 设计模式即总结出来的一些最佳实现。GoF(四人组) 书中提到23种设计模式,可分为三大…

linux c++ 开发 tensorrt 安装

tensorrt 官方下载地址(需要注册账号登录):Log in | NVIDIA Developer 根据系统发行版和CUDA版本 (nvcc -V) 选择合适的安装包 EA(early access)版本代表抢先体验。 GA(general availability)代…

文件对比工具Beyond Compare 4 mac v4.4.7(28397)中文版

Beyond Compare是一款适用于Windows、Mac OS X和Linux平台的文件和文件夹比较工具。它可以帮助用户比较和同步文件夹、文件和压缩包等内容,支持多种文件格式,如文本、图像、音频、视频等。 软件下载:Beyond Compare 4 mac v4.4.7(28397)中文版…

如何在Node.js中使用定时器

在Node.js中使用定时器是一项常见且重要的任务,特别是在需要执行定时任务或者轮询操作的情况下。Node.js提供了多种方式来实现定时器功能,包括setTimeout、setInterval和setImmediate等方法。本篇博客将介绍如何在Node.js中使用这些定时器,并…

WPF真入门教程30--顺风物流单据管理系统

1、教程回顾 到现在为止,真入门系列教程已完成了29刺由浅入深地讲解,当然不可能讲到了WPF的所有技能点,但读者看到了wpf的内部各种功能及之间的联系,在此基础上,提供一个完整有效的综合项目,本项目采用的是…

期货开户保证金保障市场正常运转

期货保证金是什么?在期货市场上,采取保证金交易制度,投资者只需按期货合约的价值,交一定比率少量资金即可参与期货合约买卖交易,这种资金就是期货保证金。期货保证金(以下简称保证金〕按性质与作用的不同。…