0

0

Linux bonnie++ / iozone 的文件系统基准测试对比

冰川箭仙

冰川箭仙

发布时间:2026-02-22 07:23:34

|

552人浏览过

|

来源于php中文网

原创

bonnie++适合测小文件吞吐与元数据操作性能,如文件服务器、邮件归档、日志轮转;不适合测数据库或高并发随机i/o,因其不支持队列深度控制、异步i/o定制及读写混合比例配置。

linux bonnie++ / iozone 的文件系统基准测试对比

bonnie++ 适合测什么,什么时候别硬上

bonnie++ 的核心价值是快速评估「小文件吞吐 + 元数据操作」能力,比如文件服务器、邮件归档、日志轮转这类场景。它默认会大量创建/删除/重命名小文件,并混合测试顺序读写和随机读写,结果里 Sequential OutputCreate(每秒新建文件数)这两项最能反映真实业务压力。

但它不适合测数据库或高并发随机 I/O 场景:不支持指定队列深度(io_depth),不能控制异步 I/O 行为,也没有像 fio 那样可定义的 read/write 混合比例。如果你用 bonnie++ -s 2g -u root 测一块 NVMe 盘,看到 Random Seek 才 1200 IOPS,别急着骂盘——它压根没走真正的 async I/O 路径,只是用多线程模拟,结果偏保守。

  • 别在生产库前用 bonnie++ 做容量规划依据,它的随机读写结果跟 mysqlslap 或真实 workload 差距较大
  • 测试目录必须有足够空间(至少 2× -s 参数值),否则中途报 write: No space left on device 不提示具体哪个子测试失败
  • -n 参数控制小文件测试数量,默认只跑 100 个,想看元数据瓶颈得手动加到 -n 1000 以上,否则 CreateDelete 指标没意义

iozone 的关键参数怎么配才不白跑

iozone 强在覆盖全链路文件操作:从 fread/fwritemmapaio_read,甚至支持 POSIX 线程并发和集群文件系统打点。但默认 iozone -a 是陷阱——它用 64KB 块大小扫一遍所有模式,耗时长、结果杂,且对现代 SSD 的 4K 对齐不敏感。

MediPro乡镇政府门户网站系统 5.1.0 UTF-8简体中文版
MediPro乡镇政府门户网站系统 5.1.0 UTF-8简体中文版

MediPro乡镇政府门户网站系统,适合乡镇政府机构创建地方门户网站,用以宣传本地资源,实现政务公开,促进乡镇基层信息化建设。本系统基于PHP+MYSQL开发,预设了乡镇风采、党政机构、政务公开、投资指南、服务导航、文件下载、公众互动、领导信箱等乡镇政府门户网站常用的栏目和测试数据,采用适合乡镇政府门户网站的专用模版,增强了系统的针对性和易用性。除了文章系统、图文系统、下载系统、社区交流、反馈表单

下载

真正有用的组合是锁定模式 + 显式绕过缓存:-i 0(写)、-i 1(读)、-I(强制 O_SYNC)、-f(指定测试文件路径)。尤其 -I 必须加,否则测出来的是 page cache 性能,不是磁盘真实延迟。

  • 测试大文件顺序吞吐,用 iozone -s 4g -r 1m -i 0 -i 1 -I -f /mnt/test/iozone.dat-r 1m 让块大小匹配 RAID 条带或 SSD 页大小
  • 测随机读性能(类似数据库 buffer pool miss),改用 -i 2 并配合 -+n(禁用预读):iozone -s 2g -r 4k -i 2 -+n -I -f /mnt/test/rand.dat
  • 导出 Excel 用 -Rb out.xls,但注意:如果系统没装 Perl 的 Spreadsheet::WriteExcel 模块,会静默失败,只生成空文件——先跑 perl -MSpreadsheet::WriteExcel -e 'print "ok\n"' 确认

两者输出里最容易误读的三行指标

bonnie++ 报告末尾的 ------Sequential Output------ 下面有三行数字,很多人直接抄最大值当“写入速度”:第一行是 Per Char(字符模式,基本不用),第二行 Block(缓冲写,含 cache),第三行 Rewrite(带 fsync 的重写,才是真写盘速度)。同理,iozone 的 re-write 行比 write 行低 30%~50%,不是工具问题,是 fsync() 强制刷盘的真实代价。

  • bonnie++ 的 Random Seek 单位是 seeks/sec,不是 IOPS;它测的是单线程 seek() + read(1) 组合,跟存储的 4K 随机读 IOPS 不等价
  • iozone 的 random readpread 数值常差 2× 以上——前者用 lseek()+read(),后者用 pread() 系统调用,内核路径不同,对某些文件系统(如 XFS)影响显著
  • 两者都默认用 tmpfs 或普通目录做测试载体,若目标是测 ext4 vs XFS,务必清空 page cache(echo 3 > /proc/sys/vm/drop_caches)并卸载重挂文件系统,否则残留元数据缓存会让结果失真

别跳过的底层前提:文件系统挂载选项和硬件对齐

再准的工具,测的也是当前配置下的表现。bonnie++ 和 iozone 都依赖 open()/write() 等系统调用,而这些调用的行为直接受挂载参数影响。比如 ext4 默认 data=ordered,写日志但不 sync 数据块;XFS 默认 allocsize=64k,影响小文件分配效率。不显式指定 -o nobarrier-o journal=async,测出来的就不是纯磁盘能力,而是日志策略+磁盘的耦合结果。

  • SSD 测试前确认分区对齐:cat /sys/block/nvme0n1/nvme0n1p1/start 应该是 2048(1MB 对齐),否则 iozone -r 4k 实际触发的是跨页读写,性能腰斩
  • 使用 -I(iozone)或 -b(bonnie++ 的 barrier 模式)时,确保磁盘支持 flush 命令:hdparm -I /dev/nvme0n1 | grep -i flush,不支持的 SATA 盘会退化成全盘等待
  • 如果测试 NFS 或 CephFS,bonnie++ 的 CreateDelete 会暴增 latency,此时应关掉 -n 改用 -d(仅测文件内容),否则 90% 时间花在 mkdir RPC 上,跟存储本身无关
实际跑下来,多数人卡在「为什么两次测试结果差一倍」——大概率是第一次没清缓存,第二次用了不同块大小,或者忘了 -I。工具只是镜子,照出的是配置、硬件、内核和文件系统的共同作用。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

13

2026.02.03

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

695

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

369

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

26

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

25

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

99

2026.02.06

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

287

2023.11.13

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

928

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.5万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号