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/秒、読み取りで 267MB/秒の時間が得られますが、これは明らかに正しくありませんが、ext4 ファイル システムをテストすると、読み取り時間は正しいです。私は何をすべきか?

4

2 に答える 2

1

読み取りテストを実行する前にファイルシステムをアンマウントすることは、何もキャッシュされていないことを確認する一般的な方法です。読み取りルーチンの fsync() はほとんど意味がありません (ただし、マウント オプションによっては、ファイル アクセスのタイムスタンプがフラッシュされる可能性があります)。提供されたコードはスケッチにすぎないと思いますが、実際のコードで、open と read からの戻り値をテストしていることを願っています。

于 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 に答える