web-dev-qa-db-ja.com

Windowsでバッファとキャッシュをプログラムでクリアする方法

Cygwin環境で一部のbashコマンドが実行される速度をベンチマークする前に、バッファーもキャッシュも使用されていないことを確認する必要があります。私はWindows7PCのCygwin/bashでベンチマークを行っていますが、実際のキャッシュ動作はCygwinではなくWindows自体によって行われていると思われます。

nixベースのシステム では、次のようにしてすべてのキャッシュとバッファをクリアできます。

echo 3 > /proc/sys/vm/drop_caches

Windowsでのこのコマンドに相当するものは何ですか?

2
Hashim

Twistyは、これを行うためのネイティブツールがWindowsにないことは正しいです。

ただし、さらに調査とテストを行うと、SysInternalsの同期ツールでさえ、Windowsがファイルとデータをキャッシュするために使用するメモリ(ファイルシステムキャッシュとも呼ばれ、Windowsが呼び出すメモリ)を実際にはクリアしないようですスタンバイメモリ。これは、Windowsのすべてのメモリ割り当てを監視する別のSysInternalsツールである RAMMap を使用して示すことができます。

Syncツールを実行する前後にRAMMapのスタンバイメモリ列を調べると、Syncを実行する前後でWindowsのスタンバイメモリが実質的に変更されていないことがわかります。実際、Syncはメモリに目立った影響を与えていないようです。これは、私が知る限り、パフォーマンステストの目的には本質的に役に立たないものです。

私は、Windowsのスタンバイリストをクリアするための効果的なプログラム方法を発見しましたが、 EmptyStandbyList.exe の形式で、Wen JiaLiuの単純なコマンドラインプログラムです。

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

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

これを使用するには、EmptyStandbyList.exeファイルがシステムのPATH環境変数内の場所にあることを確認してから、EmptyStandbyList.exeを呼び出す必要があります。シェル、またはメモリをフラッシュする必要がある場合はスクリプト内から。

CMD

EmptyStandbyList.exe

そしてbash

cmd \/c EmptyStandbyList.exe

実行後にWindowsのスタンバイメモリが正常にクリアされたことを確認するには、RAMMapを再度使用できます。

実行する前にEmptyStandbyList.exe

enter image description here

EmptyStandbyList.exeを実行した後

enter image description here

1
Hashim

Windowsに組み込まれている同等のコマンドはありません。ただし、Microsoftは 無料で利用可能Syncコマンドを作成します。このコマンドは、書き込まれていないデータをディスクにフラッシュする場合に限り、要求された処理を実行します。これは、SysinternalsSuiteのツールの一部です。

これがその作者からの 説明 です:

UNIXには、同期と呼ばれる標準ユーティリティが用意されています。これを使用して、オペレーティングシステムに、すべてのファイルシステムデータをディスクにフラッシュして、システム障害が発生した場合にデータが安定して失われないようにすることができます。そうしないと、キャッシュに存在する変更されたデータが失われます。これは私が書いた同期と呼ばれるもので、すべてのバージョンのWindowsで動作します。変更されたファイルデータがハードドライブに安全に保存されていることを知りたいときはいつでも使用してください。

コマンドを実行するには、管理者権限が必要です。 allディスクのバッファをフラッシュするには、次のコマンドを実行します。

sync

C:のように、単一のドライブのみをターゲットにする場合は、次を使用します。

sync c:

次の方法でリムーバブルドライブのみをフラッシュすることもできます。

sync -r

このユーティリティは、Vista/Server2008以降のすべてのバージョンのWindowsで動作します。