6

パフォーマンス テストを実行する場合、ファイル システム キャッシュのヒットまたはミスがテスト結果に大きな影響を与える可能性があります。したがって、通常、このようなテストを実行する前に、使用されたファイルはシステム キャッシュから削除されます。Linuxでそれを行う方法は?

明確化:可能であれば、ソリューションに root 権限は必要ありません。

4

5 に答える 5

11

スーパーユーザーとして、次のことができます。

ページキャッシュを解放するには:

  • エコー 1 > /proc/sys/vm/drop_caches

dentry と inode を解放するには:

  • エコー 2 > /proc/sys/vm/drop_caches

ページキャッシュ、dentry、inode を解放するには:

  • エコー 3 > /proc/sys/vm/drop_caches

この操作によってデータが「失われる」ことはありません (キャッシュは、データが削除される前にディスクに書き込まれます)。たとえば、実行した場合、すべてのキャッシュをクリアする必要があります

sync; echo 3 > /proc/sys/vm/drop_caches

私が言ったように、スーパーユーザー (root) だけがそうすることができます。

于 2008-10-02T12:38:24.943 に答える
10

ハ、私は答えを持っています:

#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
  int fd;
  fd = open(argv[1], O_RDONLY);
  fdatasync(fd);
  posix_fadvise(fd, 0,0,POSIX_FADV_DONTNEED);
  close(fd);
  return 0;
}

これはhttp://insights.oetiker.ch/linux/fadvise.htmlからのものです

于 2008-10-02T14:58:52.157 に答える
6

posix_fadvise を簡単に呼び出すことができる、Eric Wong によるコマンド ライン ユーティリティがあります。

http://git.bogomips.org/cgit/pcu.git/tree/README

それは次のように簡単です

$ pcu-fadvise -a dontneed filename-to-evict
于 2009-07-22T20:12:48.200 に答える
0

O_DIRECTの使用に関して:それは別の方法で結果を混乱させるでしょう。カーネルはファイルシステムデータをread()バッファに直接DMAしようとするため、追加のコピーを行わなくてもアプリケーションに渡すことができます。O_DIRECTがない場合、カーネルはファイルデータをページキャッシュにDMAし、ページキャッシュからread()バッファにコピーします。

アプリが実際に本番環境でO_DIRECTを使用する場合、これは問題ありません。O_DIRECTを使用してパフォーマンステストを実行してから、本番用にO_DIRECTを削除すると、パフォーマンステストは非現実的になります。

于 2008-10-02T13:55:39.703 に答える
-1

テストデータを別のファイルシステムに配置できる場合、テストのためにファイルシステムを新たにマウントすると、空のキャッシュが得られます。

"user" オプションを指定して /etc/fstab にテスト ファイルシステムをリストすると、スーパーユーザーにならずにテスト用にマウントできます。

于 2008-10-12T11:35:31.870 に答える