web-dev-qa-db-ja.com

ファイルキャッシュをクリアしてパフォーマンステストを繰り返す

キャッシュされたファイルの内容を削除して、パフォーマンス結果が歪まないようにするために使用できるツールまたはテクニックは何ですか?ファイルとディレクトリのコンテンツに関するキャッシュ情報を完全にクリアするか、選択的に削除する必要があると思います。

私が開発しているアプリケーションは特殊な圧縮ユーティリティであり、オペレーティングシステムが最近触れていないファイルやディスクブロックがキャッシュされそうにないファイルの読み取りと書き込みの多くの作業を行うことが期待されています。

IOファイル処理作業を行うためのさまざまな戦略のプロファイリングのタスクを繰り返すときに見られる変動性を取り除きたい。

私はメインの開発マシンであるWindows XPのソリューションに主に興味を持っていますが、Linuxを使用してテストすることもできるので、その環境の答えにも興味があります。

SysInternals CacheSet を試してみましたが、「クリア」をクリックしても、数回読んだだけのファイルを再読み込みする時間に測定可能な増加(コールドブート後のタイミングの復元)がありません。回。

101
Stephen Denne

SysInternalの RAMMapアプリ を使用します。

rammap empty standby

Empty/Empty Standby Listメニューオプションは、Windowsファイルキャッシュをクリアします。

80
smallest

簡単なグーグルでLinuxにこれらのオプションを提供します

  1. ファイルを保持しているパーティションをアンマウントおよびマウントします
  2. sync && echo 1 > /proc/sys/vm/drop_caches
14
John Nilsson

Windows XPの場合、FILE_FLAG_NO_BUFFERINGオプションを指定してCreateFileを使用してファイルを開き、ハンドルを閉じることにより、特定のファイルのキャッシュをクリアできるはずです。これは文書化されておらず、それが後のバージョンのWindowsで動作するかどうかはわかりませんが、ファイル圧縮ライブラリを比較するテストコードを書くときにこれを使用しました。読み取りまたは書き込みアクセスがこのトリックに影響を与えたかどうかは思い出せません。

14
user901295

コマンドラインユーティリティが見つかります here

ソースから:

EmptyStandbyList.exeは、空にすることができるWindows(Vista以降)用のコマンドラインツールです。

  • プロセスワーキングセット、
  • 変更されたページのリスト、
  • スタンバイリスト(優先度0〜7)、または
  • 優先度0のスタンバイリストのみ。

使用法:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
7
 #include <fcntl.h>

int posix_fadvise(int fd, off_t offset, off_t len, int advice);

アドバイスオプション付きPOSIX_FADV_DONTNEED
指定されたデータは近い将来アクセスされません。

3
Mark

Windowsのより良いビューについては、XP Filesystem Cache-try ATM by Tim Murgent -ファイルシステムキャッシュのワーキングセットサイズとスタンバイリストサイズの両方を表示できます。 Windowsの場合XP-ダウンロード可能なATMの古いバージョン1が必要です here since V2 =および V には、Server 2003、Vista、またはそれ以上が必要です。

Sysinternals Cacheset は「Cache WS Min」を削減しますが、実際のデータはスタンバイリストの形で存在し続け、他の場所に置き換えられるまで使用できます。 。その後、他のツールに置き換えるには、 MemAllocfashmem by Chad Austin または Windows Server 2003 Resource Kit Tools のConsume.exeなどのツールを使用します=。

3
robertcollier4

動作するように思われる1つのテクニック(リブート以外)を見つけました:

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

ただし、選択的ではありません。理想的には、キャッシュしたくないファイルのディスクブロックをキャッシュするために使用されているメモリの特定の部分をクリアできるようにしたいと思います。

3
Stephen Denne

Windows API呼び出し https://docs.Microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize があり、ファイルシステムキャッシュのフラッシュに使用できます。キャッシュサイズを非常に小さな値に制限するためにも使用できます。これらの種類のテストに最適です。

0
Geoff Johnson

Linuxについても質問されたように、関連する答えがあります here

コマンドラインツール vmtouch を使用すると、特にファイルやディレクトリをシステムファイルキャッシュに追加および削除できます。

0
seeker