磁盘压力测试工具(vdbenchfio)

磁盘压力测试工具(vdbench&fio)

最近有遇到对象挂载为文件系统的需求,为了测试挂载后的读写性能,有了解了一些测试工具。下面给大家分享下我使用的工具vdbench和fio。

1 vdbench

官网文档:https://www.oracle.com/technetwork/server-storage/vdbench-1901683.pdf

①安装

  • 源码下载:http://www.oracle.com/technetwork/server-storage/vdbench-source-download-2104625.html
  • 运行文件下载:http://www.oracle.com/technetwork/server-storage/vdbench-downloads-1901681.html

vdbench本身是由Java编写的,因此运行时需要Java环境。

# 安装Java环境
yum install java-1.tar8.0-openjdk -y

#解压
unzip vdbench50407.zip
# 为vdbench添加执行权限
cd vdbench50407
chmod +x vdbench

下图中

  • vdbench为可执行文件
  • r_fs、rw_fs为配置文件
  • output为vdbench的执行结果(日志)
    在这里插入图片描述

②配置及参数说明

data_errors=1,messagescan=no,create_anchors=yes,debug=25
fsd=fsd1,anchor=/root/test/1G-1k-write-para128,depth=2,width=10,files=10,size=1g
fwd=fwd1,fsd=fsd1,xfersize=4m,operation=write,fileio=sequential,fileselect=sequential,threads=4
rd=rd1,fwd=fwd*,seekpct=0,fwdrate=max,format=restart,elapsed=3000,interval=1
# anchor=/root/test/1G-1k-write-para128 写入文件地址
# depth=2,width=10,files=10 目录深度为2、宽度为10、每个目录下的文件为10,最终文件数量为10^2*10=1000
# size=1g 文件大小为1g
# fwd=fwd1,fsd=fsd1 为此次fwd命名为fwd1
# xfersize=4m 要传输的数据大小。默认设置为4k,我这里设置为4m
# operation=write 配置只写操作(operation=read,配置只读)
# fileio=sequential,fileselect=sequential 配置顺序写
# threads=4 设置并发数为4
# seekpct=0 配置随机寻道的百分比。可为随机值,为0则为顺序;为100则为随机。

③使用

# 进入目录
cd vdbench50407
# 修改配置文件
vim rw_fs

rw_fs配置文件:

data_errors=1,messagescan=no,create_anchors=yes,debug=25
fsd=fsd1,anchor=/root/test/1G-1k-write-para128,depth=2,width=10,files=10,size=1g
fwd=fwd1,fsd=fsd1,xfersize=4m,operation=write,fileio=sequential,fileselect=sequential,threads=4
rd=rd1,fwd=fwd*,seekpct=0,fwdrate=max,format=restart,elapsed=3000,interval=1

运行vdbench

# -f指定配置文件
./vdbench -f rw_fs

# 后台运行vdbench,输出日志在nohup.out
# nohup ./vdbench -f rw_fs &
# jobs #观察后台job是否为running

运行之后vdbench会每隔1s打印读写信息(带宽、读写size等)
在这里插入图片描述

2 fio

官网地址:https://fio.readthedocs.io/en/latest/fio_doc.html

①安装

# 检查本地是否已经安装fio
rpm –qa|grep fio

# 如果未安装,则执行下面命令安装
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpm
yum install libaio-devel
yum install libibverbs -y
yum install libpmem -y
yum install librados2 -y
yum install librbd1
rpm -ivh fio-3.7-2.el7.x86_64.rpm

# 查看是否安装成功
fio -v

②配置及参数说明

  • rw=randwrite:定义测试时的读写策略,可选值如下:随机读:randread,随机写:randwrite,顺序读: read,顺序写:write,混合随机读写:randrw0

  • ioengine=libaio:libaio指的是异步模式,如果是同步就要用sync。定义fio如何下发IO请求,通常有同步IO和异步IO:同步IO一次只能发出一个IO请求, 等待内核完成后才返回。这样对于单个线程IO队列深度总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。异步IO则通常使用libaio这样的方式一次提交一批IO 请求,然后等待一批的完成,减少交互的次 数,会更有效率

  • direct=1:定义是否使用direct IO,可选值如下:值为0,表示使用buffered IO;值为1,表示使用 direct IO

  • thread:使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。

  • numjobs=1:定义测试的并发线程数

  • iodepth=64:定义测试时的IO队列深度,默认为1。此处定义的队列深度是指每个线程的队列深度。

  • filename:定义测试文件(设备)的名称。此处选择文件,则代表测试文件系统的性能,例如:- filename=/opt/fiotest/fiotest.txt;此处选择设备名称,则代表测试裸盘的性能,例:-filename=/dev/vdb1
    。如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意filename选择指定文件,以避免覆盖文件系统和原有数据。

  • size=100M:定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试。该参数的值,可以是带单位的数字,比如size=10G,表示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。建议测试数据量为内存两倍大,尽量避免缓存影响。

  • name=job1:定义测试任务名称。

  • bs=4k:定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB。

  • output TestResult.log:日志输出到TestResult.log。

  • runtime:定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完。

  • group_reporting:定义测试结果显示模式,group_reporting 表示汇总每个进程的统计信息,而非以不同 job汇总展示信息。

  • lockmem=1g 只使用1g内存进行测试。

  • zero_buffers 用0初始化系统buffer。

  • nrfiles=8 每个进程生成文件的数量。

tips:硬盘读写常用配置

  1. Read=100% Ramdon=100% rw=randread (100%随机读)
  2. Read=100% Sequence=100% rw=read (100%顺序读)
  3. Write=100% Sequence=100% rw=write (100%顺序写)
  4. Write=100% Ramdon=100% rw=randwrite (100%随机写)
  5. Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30
    (70%顺序读,30%顺序写)
    Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30
    (70%随机读,30%随机写)

每次测试前执行 echo 3 > /proc/sys/vm/drop_caches 清理缓存。
-ioengine=libaio、-iodepth=32可选/可不选

③使用

1 配置文件方式
# 编写配置文件
vim fio-4k-1G

fio-4k-1G配置文件内容:

[global]
rw=write
size=1000G
bs=128K
direct=1
ioengine=libaio
numjobs=2
iodepth=128
group_reporting=1
[job1-1]
nrfiles=1000
directory=/root/test/fio/1G-1k-1
[job1-2]
nrfiles=1000
directory=/root/test/fio/1G-1k-2
[job1-3]
nrfiles=1000
directory=/root/test/fio/1G-1k-3
[job1-4]
nrfiles=1000
directory=/root/test/fio/1G-1k-4

我定义了4个Job

  • numjobs=2,设置并发数为2
  • rw=write,配置模式为写
  • size=1000G,配置每个Job一共生成1000G文件
  • bs=128K,block size大小为128K
  • nrfiles=1000,每个Job下一共生成1000个文件,1000G/1000=1G,每个文件大小为1G
  • directory=/root/test/fio/1G-1k-1,生成文件地址,目录结构需要自己提前手动创建
# 运行任务:fio + 配置文件名称
fio fio-4k-1G
2 命令行方式
1. 顺序写
 fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=4M -size=128G -numjobs=1 \
 -runtime=600 -group_reporting -filename=/dev/[device] -name=Write_BandWidth_Test
2. 随机写
 fio -direct=1-iodepth=128 -rw=randwrite -ioengine=libaio -bs=4K -size=128G - numjobs=1 \
 -runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Write_IOPS_Test
3. 顺序读
fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=4M -size=128G -numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Read_BandWidth_Test
4. 随机读
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4K -size=128G - numjobs=1 \
-runtime=600 -group_reporting -filename=/dev/[device] -name=Rand_Read_IOPS_Test
5. 混合随机读写
fio -output=/tmp/100S100W -name=100S100W -filename=/dev/sdb:/dev/sdc:/dev/sdd -ioengine=libaio -direct=1 -blocksize=2M -runtime=300 -rw=randrw -rwmixread=70 -rwmixwrite=30 -iodepth=32 -numjobs=1

3 监控磁盘IO、网络带宽

①磁盘IO:iostat -mx 1

iostat –mx 1 
#iostat的安装方法:yum install sysstat

在这里插入图片描述

②网络带宽:dstat -n

dstat -n

在这里插入图片描述

参考:https://blog.csdn.net/zhiboqingyun/article/details/123368887

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

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

相关文章

【三十五】【算法分析与设计】综合练习(2),22。 括号生成,77。 组合,494。 目标和,模拟树递归,临时变量自动维护树定义,递归回溯,非树结构模拟树

22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:["((())&#xff0…

软件杯 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 🔥 优质竞赛项目系列,今天…

电商数据API接口|主流电商平台数据采集的主要方式:电商API接口接入实现大量级数据采集

item_get-获得淘宝商品详情 API测试注册KEY taobao.item_get 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,it…

机器学习模型——K—Means算法

目录 无监督学习概念: 有监督学习与无监督学习: 无监督学习 - 聚类分析 : 聚类算法应用场景: 常用聚类算法介绍: 对不同的聚类算法应用选择原则: 基于原型聚类: K-Means聚类算法概念及步…

通过电机转速计算主轴旋转单圈所需时间(CODESYS ST代码)

1、伺服丝杠系统常用算法功能块 伺服丝杠系统常用算法功能块-CSDN博客文章浏览阅读353次。这篇博客主要介绍伺服、丝杠系统常用的运算功能块,其它相关运算可以查看下面文章链接:信捷PLC脉冲频率、位移、转速相关计算(C语言编程应用)_RXXW_Dor的博客-CSDN博客。https://rxxw-…

UE4_如果快速做出毛玻璃效果_假景深

UE4_如果快速做出毛玻璃效果_假景深 2022-08-20 15:02 一个SpiralBlur-SceneTexture材质节点完成效果,启用半透明材质通过修改BlurAmount数值大小调整效果spiralBlur-SceneTexture custom节点,HLSL语言float3 CurColor 0;float2 BaseUV MaterialFloa…

系统思考—领导者

“组织是船,领导者是什么角色?” 对于这个看似简单的问题,很多人可能会直观地想到船长或舵手。但学习型组织的倡导者彼得圣吉给出了另一种视角:如果组织是一艘船,那么领导者首先应该是这艘船的设计师。 在我近期与各个…

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题? 一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待1、wait()原型2. 验证wait()能回收僵尸子进程的空间 3.2 waitpid()实现进程等待…

电子积木方案开发商

东莞市酷得智能科技有限公司电子积木方案开发商 提供消费电子解决方案、提供IC技术支持,全国线上线下服务 积木小车底层驱动开发过程主要涉及到以下几个方面: 首先,需要对小车底盘结构、硬件、模块等有深入的了解。底盘承载着机器人定位、导…

Kubernetes(k8s):Pod 的 Node Selector详解

Kubernetes(k8s):Pod 的 Node Selector详解 1、什么是Node Selector?2、Node Selector的工作原理3、Node Selector的用法1、例如:给node01 、node02 分别打上标签2、使用标签调度Pod3、删除节点的标签 💖Th…

java面试题(Redis)

事情干的差不多了,开刷面试题和算法,争取在短时间内快速成长,理解java面试的常见题型 一、redis使用场景: 缓存:穿透、击穿、雪崩 双写一致、持久化 数据过期、淘汰策略 分布式锁:setnx、redisson 计数…

武汉星起航推出亚马逊一站式孵化平台,助力合作伙伴快速成长

武汉星起航电子商务有限公司,自2020年正式成立以来,凭借其专业的运营团队和丰富的行业经验,在跨境电商领域取得了显著的成绩。为了进一步满足市场需求,武汉星起航决定推出亚马逊一站式孵化平台,旨在为合作伙伴提供更全…

网盘分享链接

点击打开下面这条链接,保存文件 https://pan.xunlei.com/s/VNuDMRtfBQvmfqqwjsBAIg2pA1?pwdhqd3 网盘里文件太多,找不到,怎么办? 进入我的B站主页【I泠霖I的个人空间-哔哩哔哩】 https://b23.tv/VYxaiJb,点击右上角的…

PC发送指令给单片机控制LED(与上一篇文章相反)

此时要重新配置寄存器 ,实现电脑往单片机传输数据 1、配置SCON寄存器的REN 即 REN 1 2、有TI(发送中断)就有RI(接收中断) 3、优化 发现发送 o 时,D5亮灯会有延迟 下面就是做到真正的无延迟的全双工通信 …

JVM基础

初识JAM JVM就是JAVA虚拟机,本质上是一个运行在计算机上的程序,他的职责是运行JAVA字节码文件. 下面是java代码执行过程 JVM的功能 1.解释和运行 对字节码文件中的指令实时的解释成机器码 2.内存管理 自动为对象,方法等分配内存自动的垃圾回…

27.WEB渗透测试-数据传输与加解密(上)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:26.WEB渗透测试-BurpSuite(五) BP抓包网站网址:http:…

IIC协议——OLED(128*64)外设

IIC协议(Inter-Integrated Circuit Protocol),也被称为I2C(Inter-Integrated Circuit),是一种串行通信协议,通常用于连接集成电路(IC)和外部设备,例如传感器、…

AWS入门实践-利用S3构建一个静态网站

使用Amazon S3托管静态网站是一个流行的选择,因为它简单、成本效益高,并且易于维护。静态网站由不含服务器端脚本的文件组成,如HTML、CSS和JavaScript文件。下面是使用S3托管静态网站的操作步骤: 如果大家没有AWS免费账号&#x…

STM32CubeIDE基础学习-舵机控制实验

STM32CubeIDE基础学习-舵机控制实验 文章目录 STM32CubeIDE基础学习-舵机控制实验前言第1章 硬件介绍第2章 工程配置2.1 基础工程配置部分2.2 生成工程代码部分 第3章 代码编写第4章 实验现象总结 前言 SG90、MG996舵机在机器人领域用得非常多,因为舵机有内置控制电…

【Java网络编程】OSI七层网络模型与TCP/IP协议簇

1.1、OSI七层网络模型 OSI七层网络模型中,每层的功能如下: 应用层:人与计算机网络交互的窗口。表示层:负责数据格式的封装,如加密、压缩、编解码等。会话层:建立、终止、管理不同端间的会话连接。传输层&a…