Hapus cache file untuk mengulangi pengujian kinerja

106

Alat atau teknik apa yang dapat saya gunakan untuk menghapus konten file cache untuk mencegah hasil kinerja saya miring? Saya yakin saya perlu benar-benar menghapus, atau secara selektif menghapus informasi cache tentang file dan isi direktori.

Aplikasi yang saya kembangkan adalah utilitas kompresi khusus, dan diharapkan melakukan banyak pekerjaan membaca dan menulis file yang belum disentuh sistem operasi baru-baru ini, dan yang blok disknya kemungkinan tidak akan di-cache.

Saya ingin menghapus variabilitas yang saya lihat di waktu IO ketika saya mengulangi tugas membuat profil berbagai strategi untuk melakukan pekerjaan pemrosesan file.

Saya terutama tertarik pada solusi untuk Windows XP, karena itu adalah mesin pengembangan utama saya, tetapi saya juga dapat menguji menggunakan linux, dan saya juga tertarik dengan jawaban untuk lingkungan itu.

Saya mencoba SysInternals CacheSet , tetapi mengklik "Clear" tidak menghasilkan peningkatan yang dapat diukur (pemulihan ke waktu setelah cold-boot) pada waktu untuk membaca ulang file yang baru saja saya baca beberapa kali.

Stephen Denne
sumber
kemungkinan duplikat dari Bagaimana cara membatalkan cache sistem file?
pengguna541686
1
Mengapa pertanyaan ini dihapus ?
Dan Dascalescu

Jawaban:

82

Gunakan aplikasi RAMMap SysInternal .

rammap siaga kosong

Opsi menu Empty / Empty Standby List akan menghapus cache file Windows.

terkecil
sumber
2
RAMMap tidak berjalan di Windows XP. Apakah opsi menu tersebut melakukan sesuatu yang berbeda dari tombol "Clear" di aplikasi SysInternals Cacheset?
Stephen Denne
@stephen teknik ini bekerja dengan sempurna untuk saya di bawah Windows 8! Windows XP sekarang berusia 12 tahun, apa alasan Anda tidak dapat mencoba ini di Vista, Windows 7, atau Windows 8?
Jeff Atwood
@Jeff Saya tidak lagi bekerja dengan keterbatasan itu. Jadi "Empty Standby List" menghasilkan pembacaan berikutnya dari file yang baru saja dibaca yang memerlukan IO disk?
Stephen Denne
2
Tekan F5 untuk menyegarkan daftar file setelah mengklik daftar siaga kosong
JoshG
3
Untuk pendekatan programatik, lihat posting SO ini: stackoverflow.com/a/23085045/430360
snemarch
16

Untuk Windows XP, Anda harus dapat mengosongkan cache untuk file tertentu dengan membuka file tersebut menggunakan CreateFile dengan opsi FILE_FLAG_NO_BUFFERING dan kemudian menutup pegangannya. Ini tidak didokumentasikan, dan saya tidak tahu apakah ini berfungsi pada versi Windows yang lebih baru, tetapi saya menggunakan ini sejak lama ketika menulis kode uji untuk membandingkan pustaka kompresi file. Saya tidak ingat apakah akses baca atau tulis memengaruhi trik ini.


sumber
Bekerja dengan sempurna untuk saya di bawah Windows 7 SP1, x64. Tip bagus!
cxxl
2
Jadi itu harus diulang untuk setiap file ? Jadi, jika misalnya, Anda menyalin direktori berisi 100MB yang tersebar di 30 file dalam 10 subdirektori, Anda harus membuka setiap file secara terpisah untuk memastikan Anda membaca disk yang sebenarnya, bukan cache?
Synetech
Jawaban lain di situs menegaskan ini berfungsi di Win7 dan 8 juga. Saya kira ini berfungsi pada vista. Dan ya, Anda harus menjalankannya di setiap file, tetapi tidak butuh waktu lama. Yang perlu Anda lakukan hanyalah membuka dan menutup setiap file, dan saat Anda menutup, Windows membersihkan cache. Setelah Anda melakukan ini, MAKA Anda menjalankan tes kinerja Anda.
Mooing Duck
1
Ini adalah jawaban yang sempurna. Mudah dikodekan, efektif, dan harus berfungsi pada sebagian besar OS windows (termasuk XP, saya hanya menguji di Win7x64). Saya membuka file dengan hak istimewa membaca dan tidak berbagi. Tidak yakin apa kombo itu penting.
Rosco
Fungsionalitas serupa di Linux (2.4.10 dan seterusnya) dengan flag O_DIRECT di syscall open (2). Lebih tepatnya, dari apa yang saya pahami, O_DIRECT tidak menghapus cache untuk file itu, ia mencoba yang terbaik untuk mem-bypassnya.
kaiwan
14

Googling cepat memberikan opsi ini untuk Linux

  1. Lepas dan pasang partisi yang menampung file
  2. sync && echo 1 > /proc/sys/vm/drop_caches
John Nilsson
sumber
2
Terima kasih, itu terlihat sangat berguna, meskipun saya mungkin ingin menggemakan 3 daripada 1. Saya terutama tertarik pada Windows XP, itulah sebabnya saya tidak menemukannya di googling saya.
Stephen Denne
Sayangnya lingkungan linux tempat saya dapat menggunakan ini, memiliki versi kernel 2.6.9. drop_caches ditambahkan di kernel 2.6.16
Stephen Denne
Banyak posting lain yang telah saya baca menyarankan agar Anda dapat melepas dan me-mount filesystem untuk menghapus semua item yang di-cache untuk itu, saya berasumsi bahwa itu yang terjadi sebelum 2.6.16 serta di kernel yang lebih baru.
TafT
12

Utilitas baris perintah dapat ditemukan di sini

dari sumber:

EmptyStandbyList.exe adalah alat baris perintah untuk Windows (Vista dan yang lebih baru) yang dapat mengosongkan:

  • proses kerja set,
  • daftar halaman yang diubah,
  • daftar siaga (prioritas 0 hingga 7), atau
  • prioritas 0 daftar standby saja.

Pemakaian:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
Edwin van Mierlo
sumber
3
Jawaban yang sangat diremehkan di tengah semua kebisingan, utilitas sederhana yang melakukan satu pekerjaan dan melakukannya dengan baik. Anda mungkin harus memasukkan lebih banyak detail dalam jawaban untuk mendapatkan suara positif yang pantas Anda dapatkan.
Prometheus
3

Saya telah menemukan satu teknik (selain me-reboot) yang tampaknya berfungsi:

  1. Jalankan beberapa salinan MemAlloc
  2. Dengan masing-masing, alokasikan potongan besar memori beberapa kali
  3. Gunakan Process Explorer untuk mengamati pengurangan ukuran Cache Sistem ke tingkat yang sangat rendah
  4. Keluar dari program MemAlloc

Itu tidak selektif. Idealnya saya ingin dapat menghapus bagian tertentu dari memori yang digunakan untuk menyimpan blok disk dari file yang saya ingin tidak lagi di-cache.

Stephen Denne
sumber
Itu memiliki efek samping mendorong barang-barang ke halamanfile yang akan mematikan kinerja cukup lama sesudahnya. Jika Anda akan beralih ke kludge, Anda mungkin juga membaca beberapa file besar lainnya; setidaknya itu hanya membersihkan cache disk dan tidak ada yang lain.
Synetech
3

Untuk tampilan Cache Sistem File Windows XP yang jauh lebih baik - coba ATM oleh Tim Murgent - ini memungkinkan Anda untuk melihat cache sistem file ukuran Set Kerja dan ukuran Daftar Siaga dalam tampilan yang lebih rinci dan akurat. Untuk Windows XP - Anda memerlukan ATM versi 1 lama yang tersedia untuk diunduh di sini karena V2 dan V3 memerlukan Server 2003, Vista, atau lebih tinggi.

Anda akan mengamati bahwa meskipun Sysinternals Cacheset akan mengurangi "Cache WS Min" - data sebenarnya masih tetap ada dalam bentuk daftar Standby dari mana ia dapat digunakan hingga diganti dengan yang lain. Untuk kemudian menggantinya dengan sesuatu yang lain gunakan alat seperti MemAlloc atau flushmem oleh Chad Austin atau Consume.exe dari Alat Kit Sumber Daya Windows Server 2003 .

robertcollier4
sumber
0

Seperti pertanyaan yang juga ditanyakan untuk Linux, ada jawaban terkait di sini .

Alat baris perintah vmtouch memungkinkan untuk menambahkan dan menghapus file dan direktori dari cache file sistem, antara lain.

pencari
sumber