【fio】关于磁盘性能测试

article/2025/10/15 22:40:07

一、关于磁盘

 

磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。

 

第一类,机械磁盘,也称为硬盘驱动器(Hard Disk Driver),通常缩写为 HDD。机械磁盘主要由盘片和读写磁头组成,数据就存储在盘片的环状磁道中。在读写数据前,需要移动读写磁头,定位到数据所在的磁道,然后才能访问数据。

显然,如果 I/O 请求刚好连续,那就不需要磁道寻址,自然可以获得最佳性能。这其实就是我们熟悉的,连续 I/O 的工作原理。与之相对应的,当然就是随机 I/O,它需要不停地移动磁头,来定位数据位置,所以读写速度就会比较慢。

 

第二类,固态磁盘(Solid State Disk),通常缩写为 SSD,由固态电子元器件组成。固态磁盘不需要磁道寻址,所以,不管是连续 I/O,还是随机 I/O 的性能,都比机械磁盘要好得多。

 

其实,无论机械磁盘,还是固态磁盘,相同磁盘的随机 I/O 都要比连续 I/O 慢很多,原因也很明显。

对机械磁盘来说,我们刚刚提到过的,由于随机 I/O 需要更多的磁头寻道和盘片旋转,它的性能自然要比连续 I/O 慢。

而对固态磁盘来说,虽然它的随机性能比机械硬盘好很多,但同样存在“先擦除再写入”的限制。随机读写会导致大量的垃圾回收,所以相对应的,随机 I/O 的性能比起连续 I/O 来,也还是差了很多。

此外,连续 I/O 还可以通过预读的方式,来减少 I/O 请求的次数,这也是其性能优异的一个原因。很多性能优化的方案,也都会从这个角度出发,来优化 I/O 性能

 

此外,机械磁盘和固态磁盘还分别有一个最小的读写单位:

机械磁盘的最小读写单位是扇区,一般大小为 512 字节。

而固态磁盘的最小读写单位是页,通常大小是 4KB、8KB 等。

 

如果每次都读写 512 字节这么小的单位的话,效率很低。所以,文件系统会把连续的扇区或页,组成逻辑块,然后以逻辑块作为最小单元来管理数据。常见的逻辑块的大小是 4KB,也就是说,连续 8 个扇区,或者单独的一个页,都可以组成一个逻辑块。

除了可以按照存储介质来分类,另一个常见的分类方法,是按照接口来分类,比如可以把硬盘分为 IDE(Integrated Drive Electronics)、SCSI(Small Computer System Interface) 、SAS(Serial Attached SCSI) 、SATA(Serial ATA) 、FC(Fibre Channel) 等。

不同的接口,往往分配不同的设备名称。比如, IDE 设备会分配一个 hd 前缀的设备名,SCSI 和 SATA 设备会分配一个 sd 前缀的设备名。如果是多块同类型的磁盘,就会按照 a、b、c 等的字母顺序来编号。

除了磁盘本身的分类外,当你把磁盘接入服务器后,按照不同的使用方式,又可以把它们划分为多种不同的架构。

最简单的,就是直接作为独立磁盘设备来使用。这些磁盘,往往还会根据需要,划分为不同的逻辑分区,每个分区再用数字编号。比如我们前面多次用到的 /dev/sda ,还可以分成两个分区 /dev/sda1 和 /dev/sda2。

另一个比较常用的架构,是把多块磁盘组合成一个逻辑磁盘,构成冗余独立磁盘阵列,也就是 RAID(Redundant Array of Independent Disks),从而可以提高数据访问的性能,并且增强数据存储的可靠性。

 

根据容量、性能和可靠性需求的不同,RAID 一般可以划分为多个级别,如 RAID0、RAID1、RAID5、RAID10 等。

RAID0 有最优的读写性能,但不提供数据冗余的功能。

而其他级别的 RAID,在提供数据冗余的基础上,对读写性能也有一定程度的优化。

 

最后一种架构,是把这些磁盘组合成一个网络存储集群,再通过 NFS、SMB、iSCSI 等网络存储协议,暴露给服务器使用。

其实在 Linux 中,磁盘实际上是作为一个块设备来管理的,也就是以块为单位读写数据,并且支持随机读写。

每个块设备都会被赋予两个设备号,分别是主、次设备号。主设备号用在驱动程序中,用来区分设备类型;而次设备号则是用来给多个同类设备编号。

 

 

二、工具安装

 

fio(Flexible I/O Tester)正是最常用的文件系统和磁盘 I/O 性能基准测试工具。

它提供了大量的可定制化选项,可以用来测试,裸盘或者文件系统在各种场景下的 I/O 性能,包括了不同块大小、不同 I/O 引擎以及是否使用缓存等场景。

 

 

# yum  -y install epel-release 

# yum  -y install fio 

 

 

三、测试场景

 

此次测试,被测试的磁盘挂载在 /opt  目录下

 

100随机读

# fio -filename=/opt/100_rand_read   -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=rand_100read_4k

 

# tail   -n  300   /var/log/messages

 

 

1. IOPS就是 I/O per second 的缩写,指的是发送给磁盘的读写请求数(注意这里是系统合并后发给磁盘的)

2. 每次请求的大小不是固定的,所以才会有 IOPS 和吞吐这些不同的指标

 

100随机写

# fio -filename=/opt/100_rand_write  -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=rand_100read_4k

# tail   -n  300   /var/log/messages

 

 

70随机读,30随机写

# fio -filename=/opt/70_rand_read_30_rand_write  -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=randrw_70read_4k

# tail   -n  300   /var/log/messages

 

 

30随机读 70随机写

# fio -filename=/opt/30_rand_read_70_rand_write   -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=30 -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=120 -group_reporting -name=randrw_30read_4k

 

 

# tail   -n  300   /var/log/messages

 

 

四、参考

 

CentOS.x上磁盘性能测试工具fio的安装和使用

https://www.jianshu.com/p/f26543a38f09

 

fio压测工具和io队列深度理解和误区

http://blog.yufeng.info/archives/2104

 

fio – IO压力测试工具

https://younger.blog.csdn.net/article/details/71129541

 

fio安装使用方法

https://www.kclouder.cn/fio

 

fio模拟MySQL服务器IO压力脚本

http://blog.yufeng.info/archives/1497

 

fio使用详解

https://blog.csdn.net/m0_37972390/article/details/80019762

 

Fio Output Explained

https://tobert.github.io/post/2014-04-17-fio-output-explained.html

A script that runs fio test and genearates a simple result for each jobs

https://gist.github.com/sennajox/3667757

 

Linux 硬盘测试脚本

https://amefs.net/archives/1974.html

https://github.com/amefs/fio-bench

https://github.com/bootgo/tools/blob/master/fio.py

 


http://chatgpt.dhexx.cn/article/VsMRC5f9.shtml

相关文章

【测试】 FIO:ceph/磁盘IO测试工具 fio(iodepth深度)

目录 随看随用 NAS文件系统测试 块系统测试 FIO用法 FIO介绍 FIO 工具常用参数: FIO结果说明 I/O 的重放(录下实际工况的IO,用fio重放) fio工作参数可以写入配置文件 fio的iodepth参数说明 IO状态监控: Ios…

FIO详解

fio - Flexible IO Tester 一、服务器配置: 由于我们想通过fio得到SSD真实的参数信息,因此我们需要服务器BIOS一些参数的配合,以便能更好的体现硬盘的性能。 以华为1288HV5为例: 二、fio 1.安装 a.下载地址:htt…

FIO 存储性能压测

一、 FIO简介 FIO 是一个多线程IO生成工具,可以生成多种IO模式(随机、顺序、读、写四大类),用来测试磁盘设备的性能。GFIO是FIO的图形监测工具,它提供了图形界面的参数配置,和性能监测图像。 在github上的…

磁盘性能测试工具-FIO的安装及使用

文章目录 FIO介绍FIO安装在线安装离线安装 磁盘测试命令行方式测试结果说明命令参数说明配置文件方式 dd命令介绍使用方法 FIO介绍 FIO是一款测试IOPS的工具,用于对磁盘进行压力测试和验证,磁盘I/O是检查磁盘性能的重要指标,可以按照负载情况…

NuGet学习笔记(1)——初识NuGet及快速安装使用

http://kb.cnblogs.com/page/143190/ 1. NuGet是什么? NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects that use the .NET Framework. This topic lists documentation t…

Nuget路径问题

VS NetGet包管理器 问题场景: 装了两遍VS2019,第一次装D盘卸载了,然后装C盘,结果生成 .netCore项目时就悲剧了,报错:error MSB4018: “ResolvePackageAssets”任务意外失败。Microsoft.PackageDependencyResolution.t…

使用nuget 打包并上传 nuget.org

使用nuget 打包并上传 nuget.org 一、准备工作二、打包你的项目三、上传 nug.org 服务器 前言:今天又玩了个新东西,那就是 使用nuget 打包并上传 nuget.org,在这里即时记录一下,废话不多说,直接上教程。 一、准备工作…

nuget 的生成、发布、使用和更新

nuget 的生成、发布、使用和更新 一、nuget 的生成1.生成.dll1.1创建.net项目(类库)1.2 打包生成 .dll 2.打包成.nupkg文件2.1安装 [NuGetPackageExplorer.exe](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer)程序2.2打开软件,完成打包…

修改NuGet包默认存放位置

默认情况下,NuGet下载的包存放在系统盘(C盘中),这样一来,时间长了下载的包越多,C盘占用的空间也就越多。 1、问题描述 默认情况下,NuGet下载的包存放在系统盘(C盘中,一般在路径C:\Users\用户\.nuget\packag…

Nuget使用简介

1.什么是Nuget Nuget是 ASP .NET Gallery 的一员。NuGet 是免费、开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库。 当需要分享开发的工具或是库,需要建立一个Nuget package,然后把这个package放到…

Nuget的使用说明

在做项目的时候,经常需要添加一些第三方引用,Visual Studio 2019环境下,最推荐的是Nuget安装方式,好处就是可以将所有依赖的包全部打包下载安装。 1.nuget.org,搜索需要的nuget包,复制相应的安装命令&…

NuGet的了解

目录 1..NuGet 的使用目的 2..Net 的工具 NuGet 1.NuGet 包的下载 2.NuGet 包的分析 3.NuGet 的使用 1.通过命令行使用 2.在 visual studio 里通过图形化界面进行添加。 3.在添加包的时候 4.特点 1..NuGet 的使用目的 在引入第三方程序集(dll)的…

初识NuGet - 概念, 安装和使用

1. NuGet是什么? NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects that use the .NET Framework. This topic lists documentation that will help you use NuGet packages…

NuGet的介绍及使用

介绍 NuGet是什么? NuGet是.NET的软件包管理器。NuGet客户端工具提供了生成和使用软件包的功能。NuGet 是所有软件包作者和使用者都使用的中央软件包存储库。 下面是百度百科的介绍 在我看来NuGet类似于Java的Maven和Javascript的npm。 使用 1、通过图形化客户端安…

NuGet包介绍

前言 什么是NuGet? NuGet是.NET的软件包管理器。NuGet客户端工具提供了生成和使用软件包的功能。NuGet Gallery是所有软件包作者和使用者都使用的中央软件包存储库。 包的安装和卸载 (以Newtonsoft.Json举例) 1.控制台 安装:Install-Package Newtonsoft…

NuGet使用

1.创建类库方法 2.双击项目配置 <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net6.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable><!--以下是…

NuGet学习

NuGet学习 文章目录 NuGet学习1.简介2.Visual Studio安装3.安装包3.1 打开NuGet3.2 搜索安装包 4.使用包 1.简介 NuGet包是一个zip文件&#xff0c;其中包含程序集&#xff08;或多个程序集&#xff09;、配置信息和PowerShell脚本。NuGet包可以从微软找到&#xff0c;也可以从…

什么是nuget?nuget包是如何管理

做windows开发的&#xff0c;迟早会接触到nuget这个东西&#xff0c;那么今天我们就来研究一下什么是nuget&#xff1f; 我们先从另外一些大家熟悉的概念入手&#xff0c;做linux的大家应该应该听说过apt-get&#xff0c;yum&#xff0c;deb等等&#xff0c;是的这些都是包管理…

NuGet包管理器

在.NET应用程序编程开发中&#xff0c;开发者通常使用类库来管理、维护属于同一分类的程序代码&#xff0c;以便代码的重用。一般情况下&#xff0c;处于同一类库的所有类都位于同一程序集。 这些类库被编译器编译后会生成扩展名为.dll的动态链接库文件&#xff0c;你可以在其…

VS Nuget的使用

目录 VS Nuget的使用 一、引言 二、认识Nuget 三、如何使用Nuget 1.常规使用 2.安装类库的历史版本 3.常见问题 4.离线安装nuget包 VS Nuget的使用 一、引言 最古老的时候我们想引用一个第三方类库&#xff0c;方法就是先下载第三方的dll文件&#xff0c;然后放置到我…