首页 > 云计算 > 开源云工具 > 使用 fio 工具测试 EBS 性能
fio 是一个专业的磁盘性能测试工具,本文将以 滴滴云 SSD 云盘为例,演示用 fio 测试 EBS 性能的方法。
| 指标 | 说明 |
|---|---|
| IOPS | 每秒处理随机读写的 IO 个数 |
| 带宽 | 每秒处理顺序读写的 IO 数据量 |
| 延迟 | 处理单个 IO 的平均耗时 |
读写类型说明
| 类型 | 说明 |
|---|---|
| 顺序读/写 | 每次 IO 的读/写位置紧跟上一个 IO 的读/写位置,即每次读/写的偏移量是顺序递增的 |
| 随机读/写 | 每次 IO 的读/写位置在磁盘内是随机的,与上一个 IO 的读/写位置无关 |
DC2 配置:
| 参数 | 类型 | 规格 | 说明 |
|---|---|---|---|
| 操作系统 | centos 7 | – | – |
| CPU | – | 4核 | – |
| 内存 | – | 8G | – |
| 系统盘 | 本地 SSD | 80G | vda |
| 数据盘 | SSD 云盘(EBS) | 200G | vdb |
登录 DC2, 用 lsblk 命令查看挂载好的块设备:
其中, vdb 就是接下来要测试的 EBS。
# sudo yum install fio -y
查看 fio 版本
[ dc2 - user @ 10 - 254 - 252 - 85 ~ ]$ fio - v
fio - 3.1
注:如果 EBS 里已有数据,为防止数据损坏,请用文件的方式进行测试,即: 将 EBS mount 到目录后,用 fio 读写 mount 目录下的 test 文件。
[ dc2 - user @ 10 - 254 - 252 - 85 ~ ]$ sudo fio - direct = 1 - iodepth = 128 - ioengine = libaio - rw = write - bs = 1M - size = 10G - numjobs = 1 - runtime = 200 < mark >- filename =/ mnt / test </ mark > - name = perf
输出:
其中 BW=121MiB/s 表示带宽为 121MiB/s。
[ dc2 - user @ 10 - 254 - 252 - 85 ~ ]$ sudo fio - direct = 1 - iodepth = 128 - ioengine = libaio - rw = randwrite - bs = 4K - size = 5G - numjobs = 1 - runtime = 200 - filename =/ mnt / test - name = perf
输出:
测试结果为:IOPS=8206。
[ dc2 - user @ 10 - 254 - 252 - 85 ~ ]$ sudo fio - direct = 1 - iodepth = 1 - ioengine = libaio - rw = randwrite - bs = 4K - size = 5G - numjobs = 1 - runtime = 200 - filename =/ mnt / test - name = perf
输出:
测试结果为, 写平均延迟 = 118 us。
[ dc2 - user @ 10 - 254 - 252 - 85 ~ ]$ sudo fio - direct = 1 - iodepth = 128 - ioengine = libaio - rw = read - bs = 1M - size = 10G - numjobs = 1 - runtime = 200 < mark >- filename =/ mnt / test </ mark > - name = perf
[ dc2 - user @ 10 - 254 - 252 - 85 ~ ]$ sudo fio - direct = 1 - iodepth = 128 - ioengine = libaio - rw = randread - bs = 4K - size = 10G - numjobs = 1 - runtime = 200 < mark >- filename =/ mnt / test </ mark > - name = perf
[ dc2 - user @ 10 - 254 - 252 - 85 ~ ]$ sudo fio - direct = 1 - iodepth = 1 - ioengine = libaio - rw = randread - bs = 4K - size = 5G - numjobs = 1 - runtime = 200 - filename =/ mnt / test - name = perf
| 参数 | 说明 |
|---|---|
| direct | direct=1 表示测试的 IO 用直接 IO,即跳过文件系统高速缓存, 使测试结果更接近磁盘性能 |
| iodepth | IO 队列长度,典型值: 64 或 128, 值越大磁盘的 IO 负载越高,同时 IO 延迟也会增大,iodepth=1 用来测 IO 延迟 |
| ioengine | 设置 IO 引擎, 决定 fio 调用哪种 IO 库,通常用 libaio |
| rw | IO 类型:read = 顺序读,write = 顺序写,randread = 随机读,randwrite = 随机写… |
| bs | IO 块大小,即每个 IO 读写的数据量,通常 bs=1M 用于测试顺序读写带宽,bs=4K 用于测试随机读写的 IOPS |
| size | IO 读写数据总量,如果 runtime 参数设置的时间到,则会停止 |
| numjobs | 同时读写的子进程数 |
| runtime | 读写时长,如果读写完 size 参数设置的数据量后还未到读写时长且没有设置 time_based 选项,则停止 |
| name | 本次测试任务的名字 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31559758/viewspace-2221624/ ,如需转载,请注明出处,否则将追究法律责任。