2012-03-04 12 views

cevap

39

sync komutunu veya sync() işlevini istediğiniz gibi çıkarır.

disk önbellek flushing'e isterseniz: echo 3 | sudo tee /proc/sys/vm/drop_caches

+6

'sync',% 100 ilişkisizdir. Uzun ömürlü çoklu-GB okuma önbelleklerinden bahsediyorum, kısa süreli yazılmamış veri miktarları değil, “sync” ile ilgileniyor (ve her 10 ya da daha fazla saniyede diske yazılıyor). – taw

+7

Disk önbelleklerinden mi bahsediyorsunuz? Echo 3'ü dene | sudo tee/proc/sys/vm/drop_caches' –

+0

Yorumunuzu kabul ediyorum, ancak bu mümkün değil. – taw

1

unmounting ve test altındaki diskin tüm önbelleklerini ve tampon sıfırlayacak yeniden montaj.

+2

Her zaman değil. Örnek: 'mount/dev/sda1/mnt', şimdi'/dev/sda' açılış bölümüne bakın (lütfen '1' eksikini fark edin), sonra '/ mnt' altındaki bir dosyayı değiştirin. Bunun farklı önbellekler kullandığı için bunun '/ dev/sda'ya yansımadığını görebilirsiniz. Bu durumda, umount/mnt', '/ dev/sda' etkilemediği için fiziksel olarak aynı sürücü olsa bile yardımcı olmaz. – Tino

23

Böyle yapabilirsiniz:

# synC# (move data, modified through FS -> HDD cache) + flush HDD cache 
# echo 3 > /proc/sys/vm/drop_caches # (slab + pagecache) -> HDD (https://www.kernel.org/doc/Documentation/sysctl/vm.txt) 
# blockdev --flushbufs /dev/sda 
# hdparm -F /dev/sda 

# NEXT COMMAND IS NOT FOR BENCHMARKING: 
# should be run before unplug, flushes everything possible guaranteed. 
# echo 1 > /sys/block/sdX/device/delete 
Bunu emin, hdparm kullanarak HDD önbelleği kapatmak için arzu olmayabilir, bu üç farklı sistem çağrıları da

olduğunu görmek için strace kullanabilir

Hangi şeyi kıyaslıyorsun?

Herhangi bir şekilde, HDD'nin son kullanılan veriyi son 64/32/16 MB önbelleğe almasını engelleyemezsiniz. Bu önbelleği öldürmek için, sadece bir miktar sıfır (ve sifon) yazın + HDD'den ilgisiz bir yer okuyun. Önbellek, okuma-parça ve yazma bölümüne bölünebileceğinden, bu gereklidir. Bundan sonra HDD'yi kıyaslayabilirsiniz.

+1

+1 'blockdev' tam olarak aradığım şeydi. – Tino

+3

'blockdev --flushbufs/dev/sda' USB sürücüm ile çalışır, ancak SATA SSD sürücüsüyle hiçbir etkisi yoktur. 'echo 3 | sudo tee/proc/sys/vm/drop_caches' her iki sürücüyle çalışır. –

+0

Son komut, diski çekirdekten kaldırır. Diski (veya diski herhangi bir şekilde kullanın) sonra kesinlikle karşılaştırmak mümkün olmayacaktır ve disk kullanımda ise tehlikeli. Diğer komutlarla birlikte eklemenin bir nedeni yok. İşte bu komutu ne zaman kullanacağınız ve neler yaptığını gösteren bir örnek: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/removing_devices.html – ndemou

17

Disk önbelleği temizleme: echo 3 | sudo tee /proc/sys/vm/drop_caches

Komut belgeleri: https://www.kernel.org/doc/Documentation/sysctl/vm.txt

bu yazma çekirdek özgür olmak o hafızayı neden bellekten temiz önbelleğe, dentries ve inode'lara bırakmasına neden olur. ücretsiz pagecache için

:

echo 3 > /proc/sys/vm/drop_caches

: ücretsiz pagecache, dentries ve düğüm için

echo 2 > /proc/sys/vm/drop_caches

: ücretsiz dentries ve düğüm için

echo 1 > /proc/sys/vm/drop_caches

Bu, tahribatsız bir işlem olduğundan ve kirli nesneler serbest olmadığından, tüm önbelleğe alınmış nesnelerin serbest bırakıldığından emin olmak için kullanıcı önce "eşitleme" çalıştırmalıdır.

3

Kısa yeterince iyi cevap: (kopya dostu yapıştırın)

DISK=/dev/sdX # <===ADJUST THIS=== 
sync 
echo 3 > /proc/sys/vm/drop_caches 
blockdev --flushbufs $DISK 
hdparm -F $DISK 

Açıklama:

sync: floş dosya sistemi tamponları: man sayfasından. Değiştirilen blokları diske zorla, süper bloğu güncelle.

echo 3 > /proc/sys/vm/drop_cache: floş tampon [to] çağrı blok aygıtı IOCTL'ler: man sayfasından: from the kernel docsbu çekirdek temiz önbelleklerini

blockdev --flushbufs /dev/sda bırakmasına neden olur.

hdparm -F /dev/sda: man sayfasından: on-sürücüye yazma önbelleği tamponunu boşaltır blockdev ve hdparm komutları onlar için farklı IOCTL'ler sorunu an answer above göre benzer

rağmen (eski sürücüler bu uygulayamaz) cihaz.

Uzun muhtemelen daha iyi yol:

(Sana diski biçimlendirilmiş olduğunu varsayıyoruz ama diske doğrudan yazmak isterseniz bu komutları adapte edebilir) bu sadece bir defa

Çalıştır 1 kriter önce:

:

MOUNT=/mnt/test # <===ADJUST THIS=== 
dd if=/dev/urandom of=$MOUNT/temp-hddread.tmp bs=64M count=16 

Run her kayıt önbelleklerini boşaltmak istiyorum

İşiniz bittiğinde bunu çalıştırın.

MOUNT=/mnt/test # <===ADJUST THIS=== 
rm $MOUNT/temp-hddread.tmp 

Açıklama: HDD Yukarıdaki komutlar tarafından temizlenmez H/W önbellekleri olabilir

. Onları çöple doldurmak için sahte rastgele veriler yazmayı ve okuyorum. Ne kadar veri HDD önbelleğinin büyüklüğüne bağlı olarak değişir./Dev/urandom kullanıyorum çünkü hızlı ve true rasgeleliğini önemsemiyoruz. Başlangıçtan /mnt/test/temp-hddread.tmp oluşturuyorum ve her zaman yeterince rastgele veri okumak istediğimde kullanıyorum. Her seferinde yeterince rastgele veri yazmak istediğim zaman /mnt/test/temp-hddwrite.tmp dosyası oluşturup siliyorum.

Kredi

Ben mevcut cevapların en canlı parçalarına dayanan bu cevabı yazdım.

İlgili konular