为现代macOS优化iozone磁盘基准测试补丁I patched iozone for better disk benchmarks on modern macOS
Jeff Geerling发布iozone工具补丁,提升其在现代macOS上的磁盘基准测试准确性。作者解释iozone因其跨平台兼容性和直观性能概览优势,仍是他首选的磁盘测试工具,此次更新针对Apple Silicon架构进行优化。
2026年5月26日
十年前,我开始在所有系统上使用iozone进行磁盘基准测试。虽然像fio('Flexible IO'测试工具)这样的工具在原始磁盘性能测试方面稍强一些,其他工具对网络级文件系统的测试效果更好,但iozone能让我轻松查看机械硬盘和SSD的真实世界磁盘性能概况,并且支持Mac、Windows和Linux(以及其他少量操作系统)。
iozone自1991年发布以来至今仍在更新——事实上,最新的两个版本(509和510)包含了我提交的补丁,使iozone能在运行新版macOS的Apple Silicon Mac上编译通过。
我正在对Neo MacBook进行基准测试时,iozone的编译步骤导致我的PyInfra基准测试脚本崩溃。我认为MacPorts和Homebrew修改了构建脚本来绕过错误,但直接修复上游代码才是更好的做法。
我对C语言不太熟悉,所以用本地的Qwen模型来辅助验证我的修改;相关补丁见这个GitHub issue。
我将补丁邮件发给了维护iozone的Don Capps,他已将这些修改合并到源码中。510版本包含了该修复,在所有运行macOS 26和Clang 21.0.0的我的Mac上都能成功编译。
cd ~/Downloads
curl "http://www.iozone.org/src/current/iozone3_510.tar" | tar -x
cd iozone3_510/src/current
make --quiet macosxClang编译器仍会输出若干弃用警告,但这些可以忽略。
几秒钟后,你就可以在Mac上运行iozone来测试任何存储设备(将`-f`参数设置为任意卷中的文件路径,即可测试该卷的文件系统性能)。
这里我在下载目录中运行它,以测试Mac内置的SSD:
./iozone -e -I -a -s 1g -r 4k -r 1024k -i 0 -i 1 -i 2 -f ~/Downloads/iozone在我的Neo MacBook上使用1GB测试文件大小,测试4k和1M块大小时,得到的结果是:
$ ./iozone -e -I -a -s 1g -r 4k -r 1024k -i 0 -i 1 -i 2 -f ~/Downloads/iozone
Iozone: Performance Test of File I/O
Version $Revision: 3.510 $
Compiled for 64 bit mode.
Build: macosx
Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
Al Slater, Scott Rhine, Mike Wisner, Ken Goss
Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,
Vangel Bojaxhi, Ben England, Vikentsi Lapa,
Alexey Skidanov, Sudhir Kumar.
Run began: Tue May 26 16:17:26 2026
Include fsync in write timing
F_NOCACHE=1 - Turns data caching off
Auto Mode
File size set to 1048576 kB
Record Size 4 kB
Record Size 1024 kB
Command line used: ./iozone -e -I -a -s 1g -r 4k -r 1024k -i 0 -i 1 -i 2 -f /Users/jgeerling/Downloads/iozone
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
1048576 4 666141 188600 1465976 8232715 4415111 915494
1048576 1024 859037 1358016 1449306 16421172 15936521 1087545
iozone test complete.平均1.5 GB/s的1MB读写速度不算差。不过考虑到……从HDD切换到SSD,再到SATA到NVMe这十年间,本地存储的速度提升令人难以置信。1.5 GB/s在历史上算极快了。但与其他设备相比,单块NVMe盘的这个速度反而显得有点慢!
非常感谢Don Capps将我提交的补丁合并进iozone,使其能在macOS、Windows、Linux、FreeBSD等所有系统上使用。
需要完整排版与评论请前往来源站点阅读。