Windowsディスク読み取りキャッシュをクリアする方法は?


13

パフォーマンステストを行うには、Windowsのディスク読み取りキャッシュをクリアする必要があります。グーグルで試しましたが、再起動または他の手動のもの以外は見つかりませんでした。譲り渡す前に、Windowsディスク読み取りキャッシュをクリアする方法を誰かが知っているかどうかを知りたいと思います。Windows 7でテストしていますが、Windows XPソリューションにも興味があります。

回答:


3

または、テストで使用しないことがわかっているデータをキャッシュに入れてから、テストを実行します。


1
または、使用可能なすべてのRAMを使用できます。Windowsは、そのRAMを使用するためにファイルキャッシュを解放します。詳細については、Stephen Denneの回答を参照してください。
ウルトラリスク

「次善策」ではないものを望んでいましたが、私の状況では自動テストスクリプトであなたの提案を実装するのが最も簡単だと思います。提案をありがとう。
セバスティアヌスM

7

Stack Overflowで同じ質問をしました

/programming/478340/clear-file-cache-to-repeat-performance-testing

私はWin XPを使用していましたが、思いついた最良の解決策は次のとおりです。

  1. MemAllocのコピーをいくつか実行します
  2. それぞれ、メモリの大きなチャンクを数回割り当てます
  3. Process Explorerを使用して、システムキャッシュのサイズが非常に低いレベルに減少するのを観察します
  4. MemAllocプログラムを終了します

3

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などのツールを使用して、他のものに置き換えます。


3

RAMMapを使用しました。いくつかのタイプの割り当てのメモリを解放する可能性があります。

ファイルキャッシュの内容は[ファイルの概要]タブで確認でき、[空]メニューから[空のスタンバイリスト]を選択すると、このキャッシュがクリアされます。


これは理論的には質問に答える可能性がありますが、答えの重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
slm


1

ベストプラクティスは、ベンチマーク対象のテストファイルが、アレイコントローラーキャッシュ(またはVMゲストでベンチマークを実行している場合はWindows OSメモリ)の2倍以上、最低1 GBのテストファイルであることを確認することです。これにより、キャッシュが無効になります。ディスクのベンチマークにはSQLIOを使用しています。付属文書には豊富な情報があります。


私がやろうとしていることの1つは、プロジェクトが複数の構成でビルドする速度をベンチマークすることです。私は本当にこれらのファイルのサイズを増やすことはできません。:)
セバスチャンM

1

Gregを反映して、この問題を回避する方法は、使用しているデータセットが使用可能なRAMの量を大幅に超えるようにすることです。かなりの量のコントローラーおよびディスクベースのキャッシュも含むハードウェアプラットフォームでテストを実行している場合は、これらの量も超過していることを確認する必要があります。これにより、キャッシュのすべてのレイヤーが導入するソフトウェア最適化よりも、表示されるパフォーマンスが真のハードウェアパフォーマンスにより密接に結び付けられます。

とは言っても、読み取りキャッシュを使用したいベンチマークを実行する前に、有用なデータの読み取りキャッシュを削除するだけの場合は、読み取りキャッシュメモリのすぐ下のサイズの単一ファイルを読み取ることです。それにいくつかのファイル操作を行います。これにより、キャッシュが消去され、この単一の大きなファイルでキャッシュが埋められます。一度閉じれば、気になるデータがキャッシュから効果的にフラッシュされます。トリッキーな部分は、そのファイルの大きさを把握することです。最近では、サイズが3GBのオーダーになる可能性があります。その時点で、動作させるためにいくつかの1GBのジャンクファイルが必要になる場合があります。


0

ほとんどのオプションは「手動のもの」になると思います。UNIXでは、各ベンチマークの実行前にデバイスをアンマウント/再マウントすることは非常に標準的で、多くの場合、適切な測定のために「newfs」がスローされます。Windowsでコマンドラインツールを使用してデバイスをアンマウント/マウントできるかどうかはわかりませんが、自動化が目標であれば、そのようなユーティリティを探す価値があります。


1
Linuxでは、何らかの理由でunmount / remuontがオプションではない場合も実行できますがsync; echo 3 > /proc/sys/vm/drop_caches、これは特定のボリュームに関連するものだけでなく、すべてのキャッシュ/バッファに影響します。私は以前にWindowsで同様のトリックを探しましたが、見つけられませんでした。
デビッドスピレット2009

0

StackOverflowの質問に投稿したこの回答をご覧ください。

基本的にCreateFile、書き込み共有アクセスなしでハンドルを試みると、エラーを返したとしても、キャッシュをフラッシュして無効にします。

お役に立てれば!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.