- 了解常用的SSD测试工具:FIO、IOMeter、CrystalDiskMark、ATTO Disk Benchmark等。
- 安装并熟悉这些工具的基本操作和使
一、FIO安装和使用
1、安装FIO
Ubuntu/Debian:
sudo apt update
sudo apt install fio
CentOS/Fedora:
sudo yum install fio
源码安装:
git clone https://github.com/axboe/fio.git
cd fio
make
sudo make install
2、使用
2.1 使用方式
可通过配置文件和命令行两种方式:
命令行:
fio --name=randread --rw=randread --size=1G --bs=4k --numjobs=1 --runtime=60 --group_reporting
配置文件:
FIO 配置文件采用 INI 风格,由多个全局选项和任务块(job)组成。全局选项对所有任务有效,而任务块内的选项仅对该任务生效。
[global] # 全局配置,适用于所有任务
rw=randread # 随机读模式
size=1G # 测试文件大小为1GB
bs=4k # 块大小为4KB
numjobs=4 # 启动4个任务
iodepth=32 # I/O队列深度为32
direct=1 # 使用直接I/O,绕过缓存
runtime=60 # 运行时间为60秒
group_reporting # 汇总报告输出
[task1] # 第一个任务
filename=/dev/sda1
[task2] # 第二个任务
filename=/dev/nvme0n1
[task3] # 第三个任务,覆盖全局配置
rw=write # 顺序写模式
filename=/dev/sdb1
解释:
[global]
块定义了全局配置,适用于所有任务。[task1]
,[task2]
,[task3]
是具体的任务块,可以为每个任务定义特定的配置。filename
指定了不同的设备或文件。[task3]
中的rw=write
覆盖了全局的rw=randread
设置,使得task3
任务使用顺序写。
执行配置文件:fio 配置文件
执行结果:执行配置文件测试后,FIO 会生成详细的测试报告,包括 IOPS、吞吐量、延迟等。以下是典型的输出结果
seq_read: (groupid=0, jobs=1): err= 0: pid=12345: Tue Sep 12 10:00:00 2024
read: IOPS=1000, BW=1000MiB/s (1050MB/s)(120GiB/120001msec)
clat (usec): min=20, max=500, avg=50.12, stdev=10.40
lat (usec): min=21, max=501, avg=51.14, stdev=10.42
clat percentiles (usec):
| 1.00th=[ 30], 5.00th=[ 35], 10.00th=[ 40], 50.00th=[ 50],
| 90.00th=[ 60], 99.00th=[ 100], 99.99th=[ 200]
seq_write: (groupid=1, jobs=1): err= 0: pid=12346: Tue Sep 12 10:02:00 2024
write: IOPS=900, BW=900MiB/s (950MB/s)(100GiB/120001msec)
clat (usec): min=22, max=600, avg=55.12, stdev=12.30
lat (usec): min=23, max=601, avg=56.14, stdev=12.42
- IOPS:每秒 I/O 操作数。
- BW (Bandwidth):吞吐量,单位是 MiB/s 或 MB/s。
- 延迟 (latency):每次 I/O 操作的延迟,单位是微秒。
2.2 常见参数
配置项****描述rw读写模式 (
read
、
write
、
randread
、
randwrite
等)。bs块大小,例如
4k
、
1M
。size测试文件或设备的大小。numjobs并发任务数iodepthI/O队列深度,runtime测试运行时间。direct是否使用直接 I/O (
0
为否,
1
为是)。sync同步I/O模式。filename测试文件或设备的路径。group_reporting汇总输出报告结果。time_based基于时间的测试。ioengineI/O 引擎 (
sync
、
libaio
、
mmap
等)。rwmixread读写混合比例,例如
70
表示 70% 为读,30% 为写buffered使用缓存的读写测试。output将输出结果写入文件。
对iodepth的解释:
- 队列深度(I/O Depth):指的是在任何时刻,可以并行处理的 I/O 请求数。它反映了设备在同一时间能够同时处理多少个读写操作。对于硬盘或 SSD 来说,较高的
iodepth
值可以测试设备在高并发条件下的性能。 - 低
iodepth
:表示每次只有一个或几个 I/O 请求在排队,系统在等待当前请求完成后才会发送下一个请求。这通常用于模拟低并发环境。 - 高
iodepth
:表示可以同时发出多个请求,系统不需要等待一个请求完成后才发送下一个请求。这通常用于测试高负载或并发环境。
应用场景
- 小
iodepth
(例如 1 或 2):适合模拟单线程、低并发的应用程序负载,常用于测量延迟和轻负载情况下的性能。 - 大
iodepth
(例如 32、64 或更高):适合模拟高并发的工作负载,如数据库、虚拟化或多用户环境,帮助衡量存储设备在高负载下的吞吐量和 IOPS。
=============今天好困,,剩下的明天补充以下,记得实操啊~~======================
版权归原作者 一个工作5年后勇闯SSD存储领域的测试 所有, 如有侵权,请联系我们删除。