キャッシュされたファイルの内容を削除して、パフォーマンス結果が歪まないようにするために使用できるツールまたはテクニックは何ですか?ファイルとディレクトリのコンテンツに関するキャッシュ情報を完全にクリアするか、選択的に削除する必要があると思います。
私が開発しているアプリケーションは特殊な圧縮ユーティリティであり、オペレーティングシステムが最近触れていないファイルやディスクブロックがキャッシュされそうにないファイルの読み取りと書き込みの多くの作業を行うことが期待されています。
IOファイル処理作業を行うためのさまざまな戦略のプロファイリングのタスクを繰り返すときに見られる変動性を取り除きたい。
私はメインの開発マシンであるWindows XPのソリューションに主に興味を持っていますが、Linuxを使用してテストすることもできるので、その環境の答えにも興味があります。
SysInternals CacheSet を試してみましたが、「クリア」をクリックしても、数回読んだだけのファイルを再読み込みする時間に測定可能な増加(コールドブート後のタイミングの復元)がありません。回。
SysInternalの RAMMapアプリ を使用します。
Empty/Empty Standby Listメニューオプションは、Windowsファイルキャッシュをクリアします。
簡単なグーグルでLinuxにこれらのオプションを提供します
sync && echo 1 > /proc/sys/vm/drop_caches
Windows XPの場合、FILE_FLAG_NO_BUFFERINGオプションを指定してCreateFileを使用してファイルを開き、ハンドルを閉じることにより、特定のファイルのキャッシュをクリアできるはずです。これは文書化されておらず、それが後のバージョンのWindowsで動作するかどうかはわかりませんが、ファイル圧縮ライブラリを比較するテストコードを書くときにこれを使用しました。読み取りまたは書き込みアクセスがこのトリックに影響を与えたかどうかは思い出せません。
コマンドラインユーティリティが見つかります here
ソースから:
EmptyStandbyList.exe
は、空にすることができるWindows(Vista以降)用のコマンドラインツールです。
- プロセスワーキングセット、
- 変更されたページのリスト、
- スタンバイリスト(優先度0〜7)、または
- 優先度0のスタンバイリストのみ。
使用法:
EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
#include <fcntl.h>
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
アドバイスオプション付きPOSIX_FADV_DONTNEED
:
指定されたデータは近い将来アクセスされません。
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」を削減しますが、実際のデータはスタンバイリストの形で存在し続け、他の場所に置き換えられるまで使用できます。 。その後、他のツールに置き換えるには、 MemAlloc や fashmem by Chad Austin または Windows Server 2003 Resource Kit Tools のConsume.exeなどのツールを使用します=。
動作するように思われる1つのテクニック(リブート以外)を見つけました:
ただし、選択的ではありません。理想的には、キャッシュしたくないファイルのディスクブロックをキャッシュするために使用されているメモリの特定の部分をクリアできるようにしたいと思います。
Windows API呼び出し https://docs.Microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize があり、ファイルシステムキャッシュのフラッシュに使用できます。キャッシュサイズを非常に小さな値に制限するためにも使用できます。これらの種類のテストに最適です。