回答:
Stack Overflowで同じ質問をしました
/programming/478340/clear-file-cache-to-repeat-performance-testing
私はWin XPを使用していましたが、思いついた最良の解決策は次のとおりです。
Windows XPファイルシステムキャッシュのより良いビューについては、Tim MurgentのATMをお試しください。ファイルシステムキャッシュのワーキングセットサイズとスタンバイリストサイズの両方を、より詳細で正確なビューで確認できます。Windows XPの場合-V2およびV3にはServer 2003、Vista以上が必要なので、ここからダウンロードできる古いバージョン1のATMが必要です。
Cachesetは「Cache WS Min」を削減しますが、実際のデータはスタンバイリストの形で存在し続け、使用できる場所から他のデータに置き換えられるまで、引き続き観察されます。その後、MemAlloc、Chad Austinのflushmem、Windows Server 2003 Resource Kit ToolsのConsume.exeなどのツールを使用して、他のものに置き換えます。
Gregを反映して、この問題を回避する方法は、使用しているデータセットが使用可能なRAMの量を大幅に超えるようにすることです。かなりの量のコントローラーおよびディスクベースのキャッシュも含むハードウェアプラットフォームでテストを実行している場合は、これらの量も超過していることを確認する必要があります。これにより、キャッシュのすべてのレイヤーが導入するソフトウェア最適化よりも、表示されるパフォーマンスが真のハードウェアパフォーマンスにより密接に結び付けられます。
とは言っても、読み取りキャッシュを使用したいベンチマークを実行する前に、有用なデータの読み取りキャッシュを削除するだけの場合は、読み取りキャッシュメモリのすぐ下のサイズの単一ファイルを読み取ることです。それにいくつかのファイル操作を行います。これにより、キャッシュが消去され、この単一の大きなファイルでキャッシュが埋められます。一度閉じれば、気になるデータがキャッシュから効果的にフラッシュされます。トリッキーな部分は、そのファイルの大きさを把握することです。最近では、サイズが3GBのオーダーになる可能性があります。その時点で、動作させるためにいくつかの1GBのジャンクファイルが必要になる場合があります。
ほとんどのオプションは「手動のもの」になると思います。UNIXでは、各ベンチマークの実行前にデバイスをアンマウント/再マウントすることは非常に標準的で、多くの場合、適切な測定のために「newfs」がスローされます。Windowsでコマンドラインツールを使用してデバイスをアンマウント/マウントできるかどうかはわかりませんが、自動化が目標であれば、そのようなユーティリティを探す価値があります。
sync; echo 3 > /proc/sys/vm/drop_caches
、これは特定のボリュームに関連するものだけでなく、すべてのキャッシュ/バッファに影響します。私は以前にWindowsで同様のトリックを探しましたが、見つけられませんでした。
StackOverflowの質問に投稿したこの回答をご覧ください。
基本的にCreateFile
、書き込み共有アクセスなしでハンドルを試みると、エラーを返したとしても、キャッシュをフラッシュして無効にします。
お役に立てれば!