2

我有个问题。我实际上想大致了解对驱动器进行 fwrite 需要多长时间。

当我执行以下操作时:

clock_t begin = clock();
unsigned long long size_t = fwrite(send, 1, transfer_size*sizeof(unsigned long long), wpFile);
clock_t end = clock();
double long elapsed_secs = double long(end - begin) / CLOCKS_PER_SEC;

不幸的是,对于不同的传输大小,我没有得到任何不同的结果!!!

我的猜测是 clock_t ,一旦它发出一个 fwrite 命令,就会停止它的测量,当我已经完成 fwrite 时它又回来了。我确实得到了几乎相同的度量,无论我的传输大小是 32KB 字节还是 16MB !我确实期待看到巨大的差异。我真的不想要确切的真实时间测量(当然很高兴知道);我关心的只是看看我是在做 KB 转移还是 MB 转移。

有谁知道任何其他功能可以让我粗略测量 fwrite 功能所用的实际时间?

4

1 回答 1

2

问题是(在大多数操作系统上)所有对磁盘的写入都首先写入内存缓存。只有当这些缓存页面变得太旧(通常为 1 秒的数量级)时,它们才会真正写入磁盘。

对内存缓存的写入非常快。如果您需要对实际磁盘写入的速度进行基准测试,则必须先同步缓存。

一种可能有效的方法: syncfs()from unistd.h. man 2 sync说这个函数不一定要等待同步发生,而是“因为 Linux 1.3 它确实在等待”。

编辑:你没有说你在使用 Windows :) 我对它不是很熟悉,但是在 WINAPI 中出现了一个快速的谷歌FILE_FLAG_NO_BUFFERING搜索FlushFileBuffers。看这里这里这里

于 2013-01-24T01:13:04.527 回答