我直接在某些磁盘(HDD 和 SDD)上运行随机写入基准测试,并且在 iostat 监视器上得到一些奇怪的输出数据。除了通常的写入速率之外,还有一个我无法理解为什么会出现的读取速率。
这是我在C上为测试编写的基准程序(仅用于该问题的核心代码):
fd=open("/dev/sda", O_WRONLY|O_CREAT|O_TRUNC, 0666);
for (;;) {
offset2=DLIMIT * (double)random() / RAND_MAX;
retval = lseek64(fd, offset2, SEEK_SET);
handle("lseek64", retval == (off64_t) -1);
retval = write(fd, buffer, BLOCKSIZE);
handle("write", retval < 0);
}
例如,在 60 秒基准测试期间,iostat 显示以下平均结果:
54467,27(kB/秒) | 38147,37(wkB/秒)
我对正在运行的程序进行了 strace,它只显示 write 和 lseek 的内容。
另一个好信息,如果我在一个文件(从 SDA 安装的文件系统)上运行这个程序,它不会显示任何读取速率......只是在这个“/dev/sda”情况下。
对于这个幽灵读取率有什么想法或解释吗?