磁盘压力测试工具(vdbenchfio)

news2025/1/19 15:36:10

磁盘压力测试工具(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

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

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

相关文章

2024/4/5 ACM格式练习

一、知识点: (1)行数不固定:用Scanf的err返回值判断是否读到EOF。 (2)每行数据个数不固定:一个一个读数据和它后面的字符,判断后面的字符是否是换行符。如果是就说明读完了一行数据…

汽车网络安全管理

汽车网络安全管理 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事&#xff0c…

三菱FX3U计数器

1,定义计数器用了计数输入信号沿触发次数 2,分类主要分为普通计数器和高速计数器 范围定义C0-C9916位正向计数器(一般用)C100-c19916位正向计数器(保持型)C200-C21932位加减计数器(一般用)C220-C23432位加…

软考111-上午题-【计算机网络】-URL和DNS

一、URL解析 org:各类组织结构(非盈利团队) 1-1、顶级域 顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如:www.baidu.com这个域名中,顶级域是.com(或.COM&#xff…

20240405,数据类型,运算符,程序流程结构

是我深夜爆炸&#xff0c;不能再去补救C了&#xff0c;真的来不及了&#xff0c;不能再三天打鱼两天晒网了&#xff0c;真的来不及了呜呜呜呜 我实在是不知道看什么课&#xff0c;那黑马吧……MOOC的北邮的C正在进行呜呜 #include <iostream> using namespace std; int…

云原生架构(微服务、容器云、DevOps、不可变基础设施、声明式API、Serverless、Service Mesh)

前言 读完本文&#xff0c;你将对云原生下的核心概念微服务、容器云、DevOps、Immutable Infrastructure、Declarative-API、Serverless、Service Mesh 等有一个相对详细的了解&#xff0c;帮助你快速掌握云原生的核心和要点。 因题主资源有限, 这里会选用部分云服务商的组件进…

idea开发 java web 配电室后台管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 配电室后台管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。 前段主要技术 cs…

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用&#xff0c;需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系&#xff1a;BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…

C# MES通信从入门到精通(9)——c#使用visual studio2019社区版部署webservice服务

前言 在上位机软件开发领域,我们经常使用调用webservice接口来和mes系统进行交互,我们在开发Mes程序之前也可以自己先模拟发布客户的webservice接口进行调用从而加快软件开发进度,本文就是详细介绍如何自己发布webservice接口。 1、创建 参考这篇博文:webservice服务创建…

基于Python的豆瓣电影评分可视化,豆瓣电影评分预测系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

SpamSieve mac垃圾邮件过滤器 直装激活版

SpamSieve通过强大的垃圾邮件过滤技术&#xff0c;帮助用户有效管理和消除不想要的电子邮件。它能与多种电子邮件客户端无缝集成&#xff0c;如Apple Mail、Microsoft Outlook、Airmail等。 软件下载&#xff1a;SpamSieve mac直装激活版下载 该软件利用先进的算法和机器学习技…

解决沁恒ch592单片机在tmos中使用USB总线时,接入USB Hub无法枚举频繁Reset的问题

开发产品时采用了沁恒ch592&#xff0c;做USB开发时遇到了一个奇葩的无法枚举问题。 典型症状 使用USB线直连电脑时没有问题&#xff0c;可以正常使用。 如果接入某些特定方案的USB Hub&#xff08;例如GL3510、GL3520&#xff09;&#xff0c;可能会出现以下2种情况&#xf…

11-1(2)-CSS 背景+CSS 精灵图

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 一、CSS 背景1 背景颜色2 背景色半透明3 背景图片4 背景平铺5 背景图片位置6 …

6 种事件驱动的架构模式

事件驱动架构(Event-Driven Architecture)是一种基于事件和事件处理的软件架构&#xff0c;它的核心思想是将系统的行为和逻辑抽象成一系列事件&#xff0c;这些事件在系统中按照一定的规则和顺序产生和传播&#xff0c;并被相应的处理器处理。事件驱动架构具有高度的灵活性、可…

跨平台的组播测试工具mping、udp_sender及udp_reciver的源码及使用教程

文章目录 1.前言2.mping工具编译3.mping工具使用3.1 参数说明3.1 组播播发&#xff08;-s&#xff09;3.1 组播播发&#xff08;-r&#xff09;3.3 Linux下mping测试 4.Linux组播udp_sender及udp_reciver使用4.1 udp_sender源码4.1 udp_reciver源码4.3 编译方法4.4 测试使用4.4…

ensp华为AC+AP上线配置

AR1配置&#xff1a; <Huawei>system-view # 进入系统视图<Huawei>sysname R1 # 设备重命名[R1]dhcp enable # 开启DHCP功能[R1]interface GigabitEthernet0/0/0 # 进入接口 [R1-GigabitEthernet0/0/0]ip address 192.168.0.1 23 # 配置接口地址 [R1-GigabitE…

Redis -- 缓存雪崩问题

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 可能原因 : 同一时间大量的key到期 ; 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降…

背包问题---

一、背包模型 有一个体积为V的背包,商店有n个物品,每个物品有一个价值v和体积w,每个物品只能被拿一次,问能够装下物品的最大价值。 这里每一种物品只有两种状态即"拿"或"不拿". 设状态dp[i][j]表示到第i个物品为止,拿的物品总体积为j的情况下的最大价…

日本垄断半导体行业什么

日本垄断了光刻胶&#xff0c;没有光刻胶&#xff0c;有光刻机没有用&#xff0c;还有垄断硅片关键材料&#xff0c;没有这个&#xff0c;想要生产芯片根本就不可能&#xff0c;除此之外该有很多半导体原材料垄断&#xff0c;半导体行业无法绕开日本。

vue + koa + Sequelize + 阿里云部署 + 宝塔:宝塔数据库连接

之前文章已经介绍了宝塔上传前后端代码并部署&#xff0c;不清楚的请看这篇文章&#xff1a; vue koa 阿里云部署 宝塔&#xff1a;宝塔前后端部署 下面是宝塔创建数据库&#xff1a; 我用的 koa Sequelize 连接的数据库&#xff0c;Sequelize 非常适合前端使用&#xf…