当前位置: 首页 > news >正文

测试工具fio

一、安装部署

fio是一款优秀的磁盘IO测试工具,在Linux中比较常用于测试磁盘IO

其下载地址:https://brick.kernel.dk/snaps/fio-2.1.10.tar.gz

或者登录其官网:http://freshmeat.sourceforge.net/projects/fio/ 进行下载。

tar -zxvf fio-fio-2.11.tar.gz 
cd fio-fio-2.11
./configure && make && make install
which fio
fio -v
fio多线程需要libaio引擎,yum install -y libaio-devel,后重新编译fio

二、主要性能指标

IOPS

每秒的IO数量。体现存储系统性能的最主要指标。现在主流的IOPS都在90K以上了(机械硬盘还在5K左右徘徊),比如模拟<4K>大小的文件读写。每秒最高能读或写90000个<4K>的文件;如果增加磁盘,则每秒IO数量就可以变多。比如增加相同的一块盘则IOPS就可以翻倍。

带宽(吞吐量)

每秒钟最大吞吐数据量的大小。每秒传输多大的数据比如500M/s。iops和带宽是正相关,因为知道每秒IO数量,和平均每个IO的大小则可以算出整体每秒数据量大小也就是带宽。IOPS * I/O size = Bandwidth。

大文件持续传输型的应用需要的是充分的带宽性能,而小文件随机读写的应用则要求足够的I/O能力。在存储领域有个不成文的规定,只要以IOPS来描述,那么就一般代表是小I/O(<32KB),以Bandwidth来描述,那就是大I/O(>32KB)。

延迟

是指完成一次IO请求所需的时间。延迟是关注存储性能时最重要的单个指标。

我们从发出请求到存储层的那一刻开始测量,并在获取请求的数据或确认数据已存储在磁盘上时停止测量。数据得到响应前需要等待的时间。

他和IOPS的区别:比如说我一个主机挂了一块SSD和100块HDD,SSD速度快其实就是延迟低,就是说我发送一条请求可以比HDD更快的返回。但是这里100块HDD的IOPS要高于SSD,因为他每秒能处理的IO要更多。

三、条件指标

访问方式:

顺序读写:比如将一个很大的文件写入。则读取大量的是相邻的顺序的数据块。这个模式可显示最高的吞吐量。主要是针对的大容量文件读写文件性能,这时我们主要关注带宽指标。

随机访问读写。不遵循文件的先后顺序,读写操作的时候能够任意跳到某个文件,主要作用是针对零碎文件(病毒扫描、启动程序等)任务。这时我们主要关注IOPS指标。

队列深度(iodepth):

它表示平均有多少I / O请求(在运行中),也就是同时处理多少个IO。拥有队列是有益的,因为队列中的请求可以以优化的方式(通常是并行方式)提交给存储子系统。

类似于cpu处理多线程,一个cpu处理一个线程一段时间然后切换到另一个线程去处理,这样每个线程处理时间提高了,但是充分利用了CPU性能提高了多线程的性能。加大硬盘队列深度就是让硬盘不断工作,减少硬盘的空闲时间。但是代价就是提高了延迟。

不同队列深度有着不同的性能表现,通常队列深度为1时有最好的延迟表现;随着队列深度的增加,其IOPS会随之增长,QD1~QD4基本是线性提升,QD8大概是QD4的双倍,QD16又是QD8的双倍,直到获得SSD的最大IOPS(一般是32);在未达到SSD的最大IOPS时,随着队列深度的增加,其延迟增加通常并不剧烈;在达到最大IOPS后,随着队列深度的增加,其IOPS趋于稳定,但延迟通常会随队列深度的增加而线性增长。

加大队列深度 -> 提高利用率 -> 获得IOPS和MBPS峰值 ->注意响应延迟在可接受的范围内

建议:也就是说队列深度最好设置到16或者32,以获得最大的IOPS。就是设置能达到最大IOPS的最小的队列深度。

线程数:比如设置为8。在固态硬盘内部,单次读取耗时主要分为两部分:寻址延迟时间和传输时间。单线程的时候,即使队列深度大于1,但每个访问请求的这两步都是串行的,也就是必须先寻址然后才能传输。而多线程的时候,不同线程的这两步是可以并行的。传输完线程1的数据后就可以马上开始线程2的数据传输。也就是提升线程数可以明显提升SSD的性能。但这个提升并不是倍数关系,因为可能2线程比1线程提升很大,但是8线程并不比2线程有很大幅度的性能提升。

四、fio指标解读

配置参数.fio

ioengine=libaio

libaio - Linux 原生的异步 I/O,这也是通常我们这边用的最多的测试盘吞吐和延迟的方法

sync - 也就是最通常的 read / write 操作

vsync - 使用 readv / writev,主要是会将相邻的 I/O 进行合并

psync - 对应的 pread / pwrite

pvsync / pvsync2 - 对应的 preadv / pwritev,以及 preadv2 / p writev2

rw=randrw

read - 顺序读

write - 顺序写

trim - 顺序裁剪

randread - 随机读

randwrite - 随机写

randtrim - 随机裁剪

rw, readwrite - 混合顺序读写

randrw - 混合的随机读写

trimwrite - 顺序的裁剪 + 顺序写

rwmixwrite=90 (混合模式使用)

混合读写中,写占的百分比

bs=4k(block size)一次io操作大小

通常我们都是读写使用相同的 block,譬如 bs=4k,我们还可以用 bs=4k,16k 来设置读是 4k,但写是 16k。每次4k的io进行测试

iodepth=16,队列深度

numjobs=8,线程数,比如设置8

size=512m,每个线程读写的数据量521M 传输完成就结束

IOPS: 每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一;

Bw: 带宽;

slat 表示fio 提交到内核某个I/O的延迟;

clat 表示fio 内核完成某个I/O的延迟;

lat 表示从fio将请求提交给内核,再到内核完成这个I/O为止所需要的时间;

关系是 lat = slat + clat

usr:表示用户空间进程;

sys:表示内核空间进程;

五、测试命令

参见:云硬盘 如何衡量云硬盘的性能-最佳实践-文档中心-腾讯云

或如何在Linux实例中使用FIO工具测试块存储性能_云服务器 ECS(ECS)-阿里云帮助中心

fio -bs=4k -ioengine=libaio -iodepth=1 -direct=1 -rw=randread -time_based -runtime=600  -refill_buffers -norandommap -randrepeat=0 -group_reporting -name=fio-randread-lat --size=10G -filename=/dev/sda

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

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

bs = 4k iodepth = 32:随机读/写测试,能反映硬盘的 IOPS 性能

测试nfs或samba共享存储时,命令中-filename=block_device要换成-directory=共享目录

裸盘的测试结果:

相关文章:

测试工具fio

一、安装部署 fio是一款优秀的磁盘IO测试工具&#xff0c;在Linux中比较常用于测试磁盘IO 其下载地址&#xff1a;https://brick.kernel.dk/snaps/fio-2.1.10.tar.gz 或者登录其官网&#xff1a;http://freshmeat.sourceforge.net/projects/fio/ 进行下载。 tar -zxvf fio-…...

详解 Flink 的状态管理

一、Flink 状态介绍 1. 流处理的无状态和有状态 无状态的流处理&#xff1a;根据每一次当前输入的数据直接转换输出结果的过程&#xff0c;在处理中只需要观察每个输入的独立事件。例如&#xff0c; 将一个字符串类型的数据拆分开作为元组输出或将每个输入的数值加 1 后输出。…...

手机怎么压缩视频?归纳了三种快速压缩方案

手机怎么压缩视频&#xff1f;在数字时代&#xff0c;手机已经成为我们记录生活的重要工具&#xff0c;而视频作为其中的一种主要形式&#xff0c;更是占据了极大的存储空间。然而&#xff0c;随着手机拍摄的视频越来越多&#xff0c;如何高效压缩视频以节省存储空间&#xff0…...

【实战】kafka3.X kraft模式集群搭建

文章目录 前言kafka2.0与3.x对比准备工作JDK安装kafka安装服务器增加hosts 修改Kraft协议配置文件格式化存储目录 启动集群停止集群测试Kafka集群创建topic查看topic列表查看消息详情生产消息消费消息查看消费者组查看消费者组列表 前言 相信很多同学都用过Kafka2.0吧&#xf…...

华为防火墙配置 SSL VPN

前言 哈喽&#xff0c;我是ICT大龙。本期给大家更新一次使用华为防火墙实现SSL VPN的技术文章。 本次实验只需要用到两个软件&#xff0c;分别是ENSP和VMware&#xff0c;本次实验中的所有文件都可以在文章的末尾获取。话不多说&#xff0c;教程开始。 什么是VPN 百度百科解…...

Redis的删除策略与内存淘汰

文章目录 删除策略设置过期时间的常用命令过期删除策略 内存淘汰相关设置LRU算法LFU 总结 在redis使用过程中&#xff0c;常常遇到以下问题&#xff1a; 如何设置Redis键的过期时间&#xff1f;设置完一个键的过期时间后&#xff0c;到了这个时间&#xff0c;这个键还能获取到么…...

《一心体系至善算法》“人文+AI”成果

《一心体系至善算法》“人文AI”成果 人工智能&#xff08;AI&#xff09;和通用人工智能&#xff08;AGI&#xff09;的伦理与安全问题: 在《中法联合声明》中&#xff0c;着重强调了AI向善问题。在探讨人工智能&#xff08;AI&#xff09;和通用人工智能&#xff08;AGI&…...

C#面:阐述对DDD的理解

C#是一种面向对象的编程语言&#xff0c;而领域驱动设计&#xff08;Domain-Driven Design&#xff0c;简称DDD&#xff09;是一种软件开发方法论&#xff0c;它强调将业务领域的知识和逻辑直接融入到软件设计和开发中。 在C#中实施DDD的关键是将业务领域划分为不同的领域模型…...

音视频开发19 FFmpeg 视频解码- 将 h264 转化成 yuv

视频解码过程 视频解码过程如下图所示&#xff1a; ⼀般解出来的是420p FFmpeg流程 这里的流程是和音频的解码过程一样的&#xff0c;不同的只有在存储YUV数据的时候的形式 存储YUV 数据 如果知道YUV 数据的格式 前提&#xff1a;这里我们打开的h264文件&#xff0c;默认是YU…...

Mysql 常用命令 详细大全【分步详解】

1、启动和停止MySQL服务 // 暂停服务 默认 80 net stop mysql80// 启动服务 net start mysql80// 任意地方启动 mysql 客户端的连接 mysql -u root -p 2、输入密码 3、数据库 4、DDL&#xff08;Data Definition Language &#xff09;数据 定义语言, 用来定义数据库对象(数…...

基于百度接口的实时流式语音识别系统

目录 基于百度接口的实时流式语音识别系统 1. 简介 2. 需求分析 3. 系统架构 4. 模块设计 4.1 音频输入模块 4.2 WebSocket通信模块 4.3 音频处理模块 4.4 结果处理模块 5. 接口设计 5.1 WebSocket接口 5.2 音频输入接口 6. 流程图 程序说明文档 1. 安装依赖 2.…...

AIGC作答《2024年高考作文|新课标I卷》能拿多少分?

AIGC作答《2024年高考作文&#xff5c;新课标I卷》能拿多少分&#xff1f; 一、前言二、题目三、作答 一、前言 如火如荼的2024年高考圆满落幕&#xff0c;在如此Happy的时刻&#xff0c;AIGC技术正以其前所未有的热度席卷全球。它不仅改变了我们获取信息的方式&#xff0c;也…...

WHAT - 发布订阅

目录 一、常见实现方案1.1 使用事件发射器&#xff08;Event Emitter&#xff09;1.2 自定义事件系统&#xff08;EventBus&#xff09;1.3 使用库如 PubSubJS1.4 使用框架内置的状态管理工具Vue.jsReact (使用 Context API 或 Redux) 二、先后关系2.1 缓存事件数据2.2 使用 Re…...

React@16.x(23)useEffect

目录 1&#xff0c;介绍作用介绍 2&#xff0c;注意点2.1&#xff0c;参数1&#xff0c;副作用函数2.1.1&#xff0c;运行时间点2.1.2&#xff0c;返回值2.1.3&#xff0c;闭包的影响2.1.4&#xff0c;严禁出现在代码块中&#xff08;判断&#xff0c;循环&#xff09;2.1.5&am…...

算法竞赛一句话解题经典问题分析 ©ntsc 2024

原名&#xff1a;算法竞赛一句话解题&经典问题分析 ©ntsc 2024 处理进度 绿&#xff1a;P1381【~P&#xff08;今日进度&#xff09;】蓝&#xff1a;P1099 致CSDN网友&#xff1a; 本文章不定期更新&#xff01;文章链接&#xff1a; 经典问题分析 基础知识与编程…...

【TensorFlow深度学习】强化学习中的贝尔曼方程及其应用

强化学习中的贝尔曼方程及其应用 强化学习中的贝尔曼方程及其应用&#xff1a;理解与实战演练贝尔曼方程简介应用场景代码实例&#xff1a;使用Python实现贝尔曼方程求解状态价值结语 强化学习中的贝尔曼方程及其应用&#xff1a;理解与实战演练 在强化学习这一复杂而迷人的领…...

牛客 NC129 阶乘末尾0的数量【简单 基础数学 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/aa03dff18376454c9d2e359163bf44b8 https://www.lintcode.com/problem/2 思路 Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff…...

【Spring Boot】异常处理

异常处理 1.认识异常处理1.1 异常处理的必要性1.2 异常的分类1.3 如何处理异常1.3.1 捕获异常1.3.2 抛出异常1.3.4 自定义异常 1.4 Spring Boot 默认的异常处理 2.使用控制器通知3.自定义错误处理控制器3.1 自定义一个错误的处理控制器3.2 自定义业务异常类3.2.1 自定义异常类3…...

Laravel学习-自定义辅助函数

因为laravel框架的辅助函数helpers不会进入版本库&#xff0c;被版本库忽略的&#xff0c;只有自己创建一个helpers辅助函数。 可以在任意文件下创建helpers.php文件&#xff0c;建议在app目录下&#xff0c; 然后在composer.json文件中&#xff0c;autoload 中间&#xff0c…...

LLVM Cpu0 新后端6

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...