我首先承认这是一个类项目,因为它非常明显。我们应该进行读取来探测文件系统的 block 大小。我的问题是,执行此操作所需的时间似乎呈线性增加,没有像我预期的那样的步骤。
我按如下方式计时:
double startTime = getticks();
read = fread(x, 1, toRead, fp);
double endTime = getticks();
其中 getticks 使用 rdtsc 指令。我担心缓存/预取会导致读取在读取过程中不花费时间。我尝试在每次执行程序之间创建一个随机文件,但这并不能缓解我的问题。
准确测量从磁盘读取所需时间的最佳方法是什么?我很确定我的 block 大小是 4096,但是我如何获取数据来支持这一点?
最佳答案
确定文件系统 block 大小的常用方法是询问文件系统其 block 大小是多少。
#include <sys/statvfs.h>
#include <stdio.h>
int main() {
struct statvfs fs_stat;
statvfs(".", &fs_stat);
printf("%lu\n", fs_stat.f_bsize);
}
但如果你真的想要,open(…,…|O_DIRECT)
或posix_fadvise(…,…,…,POSIX_FADV_DONTNEED)
将尝试让您绕过内核的缓冲区缓存(不保证)。
关于c - 探测文件系统 block 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493908/