Performans testini tekrarlamak için dosya önbelleğini temizleyin


106

Performans sonuçlarımın eğrilmesini önlemek için önbelleğe alınmış dosya içeriklerini kaldırmak için hangi araçları veya teknikleri kullanabilirim? Dosya ve dizin içerikleriyle ilgili önbelleğe alınmış bilgileri tamamen temizlemem veya seçerek kaldırmam gerektiğine inanıyorum.

Geliştirdiğim uygulama özel bir sıkıştırma aracıdır ve işletim sisteminin son zamanlarda dokunmadığı ve disk bloklarının önbelleğe alınamayacak kadar çok iş yapması bekleniyor.

Dosya işleme işini yapmak için farklı stratejilerin profilini çıkarma görevini tekrarladığımda IO zamanında gördüğüm değişkenliği kaldırmak istiyorum.

Esas olarak Windows XP çözümleriyle ilgileniyorum, çünkü bu benim ana geliştirme makinem, ancak linux kullanarak da test edebilirim ve bu nedenle bu ortam için cevaplarla da ilgileniyorum.

SysInternals CacheSet'i denedim , ancak "Temizle" yi tıklamak, birkaç kez okuduğum dosyaları yeniden okuma zamanında ölçülebilir bir artışa (soğuk önyüklemeden sonra zamanlamaya geri yükleme) neden olmuyor.



1
Bu soru neden silindi ?
Dan Dascalescu

Yanıtlar:


82

SysInternal'ın RAMMap uygulamasını kullanın .

rammap boş bekleme

Bekleme Listesini Boşalt / Boşalt menü seçeneği Windows dosya önbelleğini temizleyecektir.


2
RAMMap, Windows XP'de çalışmaz. Bu menü seçenekleri, SysInternals Cacheset uygulamasındaki "Temizle" düğmesinden farklı bir şey yapıyor mu?
Stephen Denne

@stephen bu teknik Windows 8 altında benim için mükemmel çalıştı! Windows XP şimdi 12 yaşında, bunu Vista, Windows 7 veya Windows 8'de deneyememenizin herhangi bir nedeni var mı?
Jeff Atwood

@Jeff Artık bu sınırlamalarla çalışmıyorum. Yani "Bekleme Listesini Boşalt", disk IO gerektiren son zamanlarda okunan bir dosyadan sonraki okumayla sonuçlanır?
Stephen Denne

2
Boş bekleme listesine tıkladıktan sonra dosya listesini yenilemek için F5'e basın
JoshG

3
Programlı bir yaklaşım için şu SO gönderisine bakın: stackoverflow.com/a/23085045/430360
snemarch

16

Windows XP için, dosyayı FILE_FLAG_NO_BUFFERING seçenekleriyle CreateFile kullanarak açıp ardından tutamacı kapatarak belirli bir dosya için önbelleği temizleyebilmelisiniz. Bu belgelenmedi ve Windows'un sonraki sürümlerinde çalışıp çalışmadığını bilmiyorum, ancak bunu uzun zaman önce dosya sıkıştırma kitaplıklarını karşılaştırmak için test kodu yazarken kullandım. Okuma veya yazma erişiminin bu hileyi etkileyip etkilemediğini hatırlamıyorum.


Windows 7 SP1, x64 altında benim için mükemmel çalışıyor. Harika bir ipucu!
cxxl

2
Yani bu her dosya için tekrarlanmalı mı? Örneğin, 10 alt dizinde 30 dosyaya yayılmış 100MB içeren bir dizini kopyalarsanız, önbellek yerine gerçek diski okuduğunuzdan emin olmak için her birini ayrı ayrı açmanız gerekir.
Synetech

Sitedeki diğer cevaplar bunun Win7 ve 8'de de çalıştığını doğrular. Vista'da çalıştığını varsayıyorum. Ve evet, her dosyada çalıştırmanız gerekiyor, ancak o kadar uzun sürmüyor. Tek yapmanız gereken her dosyayı açıp kapatmaktır ve kapattığınızda Windows önbelleği temizler. Bunu yaptıktan sonra, SONRA performans testinizi çalıştırırsınız.
Mooing Duck

1
Bu mükemmel bir cevaptı. Kodlaması basit, etkilidir ve çoğu Windows işletim sisteminde çalışmalıdır (XP dahil, yalnızca Win7x64 üzerinde test ettim). Dosyaları okuma ayrıcalıklarıyla ve paylaşım olmadan açtım. Combo'nun önemli olduğundan emin değilim.
Rosco

Açık (2) sistem çağrısında O_DIRECT bayrağı ile Linux'ta (2.4.10 sonrası) benzer işlevsellik. Daha doğrusu, anladığım kadarıyla, O_DIRECT o dosya için önbelleği temizlemiyor, en iyisi onu atlatmaya çalışıyor.
kaiwan

14

Hızlı bir googling, Linux için bu seçenekleri sunar

  1. Dosyaları tutan bölümü ayırın ve bağlayın
  2. sync && echo 1 > /proc/sys/vm/drop_caches

2
Teşekkürler, bu çok kullanışlı görünüyor, ancak muhtemelen 1 yerine 3'ü yankılamak isteyebilirim. Öncelikle Windows XP ile ilgileniyorum, bu yüzden Google'da bunu bulamadım.
Stephen Denne

Maalesef bunu kullanabileceğim linux ortamı 2.6.9 çekirdek sürümüne sahip. drop_caches, 2.6.16 çekirdeğine eklendi
Stephen Denne

Okumuş olduğum diğer birçok gönderi, dosya sistemini ayırıp bağlayabileceğinizi ve bunun için tüm parçalanmış öğeleri kaldırabileceğinizi önermektedir, bunun 2.6.16'dan önce ve daha yeni çekirdeklerde geçerli olduğunu varsayıyorum.
TafT

12

Bir komut satırı yardımcı programı burada bulunabilir

kaynaktan:

EmptyStandbyList.exe Windows (Vista ve üzeri) için aşağıdakileri boşaltabilen bir komut satırı aracıdır:

  • süreç çalışma setleri,
  • değiştirilmiş sayfa listesi,
  • bekleme listeleri (öncelikler 0 ila 7) veya
  • yalnızca öncelik 0 bekleme listesi.

Kullanım:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

3
Tek bir işi yapan ve onu iyi yapan tüm gürültü, basit yardımcı programın ortasında fazlasıyla küçümsenen bir cevap. Hak ettiğiniz olumlu oyları almak için muhtemelen cevaba daha fazla ayrıntı eklemelisiniz.
Prometheus


3

İşe yarayan bir teknik (yeniden başlatma dışında) buldum:

  1. MemAlloc'un birkaç kopyasını çalıştırın
  2. Her biri ile birkaç kez büyük bellek parçaları ayırın
  3. Sistem Önbelleği boyutunun çok düşük seviyelere düştüğünü gözlemlemek için İşlem Gezgini'ni kullanın
  4. MemAlloc programlarından çıkın

Yine de seçici değil. İdeal olarak, artık önbelleğe alınmasını istemediğim dosyaların disk bloklarını önbelleğe almak için kullanılan belirli bellek bölümlerini temizleyebilmek istiyorum.


Bu, bir şeyleri disk belleği dosyasına itmenin yan etkisine sahiptir ve bu, daha sonra bir süre performansı düşürecektir. Bir kludge'a başvuracaksanız, başka bir büyük dosya da okuyabilirsiniz; en azından bu sadece disk önbelleğini temizler, başka hiçbir şey yok.
Synetech 01

3

Windows XP Dosya Sistemi Önbelleğinin çok daha iyi bir görünümü için - Tim Murgent ATM'sini deneyin - hem dosya sistemi önbelleği Çalışma Kümesi boyutunu hem de Bekleme Listesi boyutunu daha ayrıntılı ve doğru bir görünümde görmenizi sağlar. Windows XP için - V2 ve V3 Server 2003, Vista veya daha üstünü gerektirdiğinden beri buradan indirilebilen eski ATM sürümü 1'e ihtiyacınız vardır .

Sysinternals Cacheset'in "Cache WS Min" değerini azaltmasına rağmen - gerçek verilerin, başka bir şeyle değiştirilinceye kadar kullanılabildiği Bekleme listeleri şeklinde var olmaya devam ettiğini gözlemleyeceksiniz . Daha sonra başka bir şeyle değiştirmek için MemAlloc veya flushmem by Chad Austin veya Windows Server 2003 Kaynak Seti Araçlarından Consume.exe gibi bir araç kullanın .


0

Soru Linux için de sorulduğu için, burada bununla ilgili bir cevap var .

Komut satırı aracı vmtouch , diğer şeylerin yanı sıra sistem dosyası önbelleğinden dosya ve dizin eklemeye ve kaldırmaya izin verir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.