1

CファイルI/Oでは、フラグを使用して、編集O_DIRECT中のファイルのキャッシュ効果を最小限に抑えることができます。open()これはPOSIX機能ではなく、バージョン2.4.10以降Linuxカーネルに存在しており、Linusは一般的にインターフェイスに反対していることを理解しています。NetBSDの下では、宣伝どおりに機能しているようです。呼び出し例:

int fd = open(filename、O_DIRECT);

私はいくつかの低レベルのディスクベンチマークユーティリティを書き込もうとしていますO_DIRECTが、OSファイルシステム/ブロックキャッシュの影響を受けずにディスクとドライブのパフォーマンスを測定するための潜在的に良い方法のように見えます。理想的には、Linux、Windows(CygwinはOK)、Mac OS X、およびBSDシステムでベンチマークを実行できるようにしたいと思います。O_DIRECTベンチマークの移植性と信頼性の観点から、OSディスクキャッシュをバイパスする最良の方法はありますか?代替案はありますか?

4

3 に答える 3

2

Windows の場合、フラグ FILE_FLAG_NO_BUFFERING および FILE_FLAG_WRITE_THROUGH を使用して、CreateFile 関数を確認する必要があります。( http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx )。ただし、読み取りと書き込みには Windows 関数を使用する必要があります: SetFilePointer、WriteFile、ReadFile...

于 2010-03-05T14:02:50.573 に答える
1

O_DIRECT は Mac OS X にも存在しません (/usr/include で grep しただけで、そこにはありませんでした)。Linux に関して言えば、あなたのツールは何を行い、hdparm は行いませんか?

于 2009-05-29T08:13:24.303 に答える
1

Windows ではサポートされていないと思います。少なくとも、MSDN には言及されていません。これは、Cygwin が基盤となる Windows OS を使用する必要があるため、Cygwin でもおそらくサポートできないことを意味します。

于 2009-05-29T08:17:20.737 に答える