1

我正在 Linux 操作系统上用 C 语言进行驱动器基准测试,但在 NTFS 文件系统上遇到了问题。下面是一些编写许多新文件的代码:

for ( int i = 0; i < 100; ++i )
{
    fd = open(nextfile, O_WRONLY | O_DIRECT | O_SYNC | O_CREAT );
    write(fd, buff, size);
    fsync(fd);
    close(fd);
}

这很好用,但是当我想读取所有创建的文件时, fsync 功能似乎不起作用。下面是一些读取所有文件的代码:

for ( int i = 0; i < 100; ++i )
{
    fd = open(nextfile, O_RDONLY | O_DIRECT | O_SYNC);
    read(fd, buff, size);
    fsync(fd);
    close(fd);
}

在测试我的旧笔式驱动器时,我的写入时间为 4MB/s,读取时间为 267MB/s,这显然不是真的,但在测试 ext4 文件系统时,读取时间是正确的。我该怎么办?

4

2 回答 2

1

在执行读取测试之前卸载文件系统是确保没有缓存的常用方法。读取例程中的 fsync() 几乎没有意义(但可能会导致文件访问时间戳被刷新,具体取决于挂载选项)。我假设提供的代码只是一个草图,但我希望您的实际代码正在测试打开和读取的返回值。

于 2013-03-06T08:01:42.123 回答
1

该问题可以通过在写入循环后添加以下代码来解决。

int fd;
char* data = "3";

sync();
fd = open("/proc/sys/vm/drop_caches", O_WRONLY);
write(fd, data, sizeof(char));
close(fd);
于 2013-03-06T20:38:24.583 回答