我正在尝试测试两个 USB SATA 适配器之间的性能,因此我开始了一些 fio 测试运行。首先,我在 Windows 10 计算机(3.27)上安装了 fio,并运行以下命令(Windows 终端/Powershell),全新的 Crucial BX500(240GB)的结果非常糟糕,仅为34.3kB/秒。
fio --name=random-write --ioengine=windowsaio --rw=randwrite --bs=1m --size=16g --numjobs=1 --iodepth=1 --runtime=60 --time_based --end_fsync=1
所以我再次运行了该命令,但这次用的是 ,--size=1g
看看是否会有所不同。结果确实如此。我得到了5391MB/s
。
这个结果让我完全不知所措,因为 USB 3.1 和驱动器的最大速度均为 ~500MB/s。顺便说一句,任务管理器在运行测试时显示的最大传输速度为 120MB/s。为了查看 fio 的 Windows 版本是否是问题所在,我在--ioengine=posixaio
我的 wsl2 / Ubuntu 20.04 上运行了完全相同的命令,结果更合理314MB/秒。
我找不到任何解释为什么结果会不正确,所以我的问题是:发生了什么事?
编辑:batistuta09 的以下回答当然是正确的。如果不使用 direct=1,您将使用 RAM 来缓冲您的请求。因此,基于时间的基准测试(60 秒)中的 1Gb 被缓冲在 RAM 中,然后在剩余时间内写入磁盘。因此,实际发生的是您正在对 RAM 进行基准测试。
有了正确的搜索词,使用 libaio 引擎很容易在 Linux 下找到类似的“问题”。但 Windows 似乎缺少示例。
答案1
您使用缓冲 I/O 运行基准测试。添加以下参数以排除任何缓存:
--direct=1