测试工具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=共享目录

裸盘的测试结果:

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

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

相关文章

RabbitMQ延时队列

一、RabbitMQ下载并使用插件 1、查看RabbitMQ插件的文件路径 docker inspect rabbitmq 找到Mounts下面Name:rabbitmq_plugin的Source即为插件路径 使用 cd 进入到该目录 2、下载插件 wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download…

vue前端Echars

<template><div :class"className" :style"{height:height,width:width}" /> </template><script> import * as echarts from echarts require(echarts/theme/macarons) // echarts theme 柱状图 import resize from ./mixins/re…

win10环境下nodejs安装过程

打开 https://nodejs.org/en/官网下载node.js 2.下载完成后的安装文件为node-v16.16.0-x64.msi&#xff0c;双击进行安装即可。 3.一直默认安装&#xff0c;记得可以更改安装路径 4.其他不用打勾&#xff0c;一直next&#xff0c;安装完成即可。 5.安装完成后&#xff0c;wi…

AI在线UI代码生成,不需要敲一行代码,聊聊天,上传图片,就能生成前端页面的开发神器

ioDraw的在线UI代码生成器是一款开发神器&#xff0c;它可以让您在无需编写一行代码的情况下创建前端页面。 主要优势&#xff1a; 1、极简操作&#xff1a;只需聊天或上传图片&#xff0c;即可生成响应式的Tailwind CSS代码。 2、节省时间&#xff1a;自动生成代码可以节省大…

【论文复现|智能算法改进】融合黑寡妇思想的蜣螂优化算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】蜣螂优化算法&#xff08;DBO&#xff09;原理及实现 2.改进点 ICMIC混沌映射 z n 1 sin ⁡ ( α z n ) , α ∈ ( 0 , ∞ ) (1) z_{n1}\sin(\frac{\alpha}{z_n}),\alpha\in(0,\infty)\ta…

3D目标检测入门:探索OpenPCDet框架

前言 在自动驾驶和机器人视觉这两个飞速发展的领域中&#xff0c;3D目标检测技术扮演着核心角色。随着深度学习技术的突破性进展&#xff0c;3D目标检测算法的研究和应用正日益深入。OpenPCDet&#xff0c;这个由香港中文大学OpenMMLab实验室精心打造的开源工具箱&#xff0c;…

【六一儿童节】的科技奇幻旅程:解锁【机器学习】与【人工智能】的无限创意

目录 一、机器学习与人工智能简介 二、六一儿童节的特殊意义 三、项目概述&#xff1a;智能绘画助手 四、技术栈和工具 五、数据准备 六、模型训练 1. 数据预处理 2. 构建和训练模型 七、智能绘画助手的实现 1. 搭建Flask应用 2. 客户端界面 八、扩展功能与优化 1…

SQL面试题001--图文并茂解答连续登录问题

连续登录问题是经典问题&#xff0c;今天做下总结。首先对原数据进行处理成客户和日期是不重复的&#xff0c;且日期是 yyyy-MM-dd 格式&#xff0c;这样好使用日期相关的函数。 本文参考在文末&#xff0c;增加了图表&#xff0c;更加容易理解。 表&#xff1a;temp01_cust_…

从0开始制作微信小程序

目录 前言 正文 需要事先准备的 需要事先掌握的 什么是uniapp 平台应用的分类方式 什么是TypeScript 创建项目 项目文件作用 源码地址 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1…

[数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;159 标注数量(xml文件个数)&#xff1a;159 标注数量(txt文件个数)&#xff1a;159 标注类别…

代码随想录算法训练营第十一天| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

20. 有效的括号 题目链接&#xff1a;20. 有效的括号 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 思路&#xff1a; 使用栈&#xff0c;如果是左括号就入栈&#xff0c;如果是右括号则判断是否和栈顶括号匹配&#xff0c;如果匹配就出栈&#xff0c;否则判断遍历…

ubuntu--Linux运行时格式

Linux运行时格式 \r 错误 用vim打开那个执行错误的 sh脚本文件 进入最后一行模式下 :set ff显示 fileformatdos 解决方法 : :set ffunix查看是否更改 : :set ff结果 : 保存退出即可 :x运行, 没有出错 * Author: cpu_code * Date: 2020-07-29 19:07:52 * LastEditTime: 2020…

MMPose-RTMO推理详解及部署实现(上)

目录 前言1. 概述1.1 MMPopse1.2 MMDeploy1.3 RTMO 2. 环境配置3. Demo测试4. ONNX导出初探5. ONNX导出代码浅析6. 剔除NMS7. 输出合并8. LayerNormalization算子导出9. 动态batch的实现10. 导出修改总结11. 拓展-MMPose中导出ONNX结语下载链接参考 前言 最近在 MMPose 上看到了…

Android加固多渠道打包和签名工具

简介 基于腾讯VasDolly最新版本3.0.6的图形界面衍生版本&#xff0c;同时增加了签名功能&#xff0c;旨在更好的帮助开发者构建多渠道包 使用说明 下载并解压最新工具包&#xff0c;找到Startup脚本并双击启动图形界面&#xff08;注意&#xff1a;需本地安装java环境&#…

json文件操作和异常处理

目录 按行读取文件readline() 读取大文件: json文件: json文件介绍: json的语法&#xff1a; 读取json文件: json文件写入: 异常&#xff1a; 捕获异常: 捕获指定类型的异常: 捕获未知类型的异常(使用最多): 异常捕获的完整结构: 异常传递: ​编辑抛出异常: 按行…

算法人生(18):从神经网络的“剪枝策略”看“怎么找回时间”

IT人的工作和生活难平衡这事&#xff0c;到底要怎么解决呢&#xff0c;让我们从神经网络的“剪枝策略”中找点灵感吧&#xff01; 剪枝策略是指训练和优化深度神经网络时采取的一种技术&#xff0c;从名字就知道&#xff0c;它就像修剪树木一样&#xff0c;去除不必要的枝叶&a…

云原生架构模式

本文主要介绍了云原生架构的主要设计模式&#xff0c;讨论了这些模式的优缺点及其适用场景&#xff0c;并探讨了在云计算环境中的应用和挑战。原文: Cloud-Native Architecture Patterns (Part 1)&#xff0c;Cloud-Native Architecture Patterns (Part 2) Bernard Hermant Uns…

微软如何打造数字零售力航母系列科普12 - 使用Microsoft Fabric将客户数据带入人工智能时代

【世界上充斥着数据&#xff0c;在过去的2年里&#xff0c;我们都看到了人工智能如何有潜力彻底改变我们的日常业务。人们对利用生成性人工智能体验的力量的需求越来越大&#xff0c;但这样做需要一个干净的数据庄园&#xff0c;而且可能会因为各种技术堆栈、分散的团队和无处不…

常见仪表盘指示灯的含义,这次够全了!

汽车是当前主要的交通工具之一&#xff0c;给人们的工作、生活提供了便利。大家在学会开车的同时&#xff0c;也得了解一些基本的汽车常识&#xff0c;可以及时的发现车辆的问题&#xff0c;并作出正确的判断&#xff0c;以此降低车辆的损耗和维修成本。其中最基本的&#xff0…

Redis-重定向

实验环境&#xff08;3主3从的Redis-Cluster&#xff09; 一、Redis重定向基础篇 1、MOVED重定向 Redis Custer 中&#xff0c;客户端可以向集群中任意节点发送请求。此时当前节点先对 Key 进行 CRC 16 计算&#xff0c;然后按 16384 取模确定 Slot 槽。确定该 Slot 槽所对应的…