Bul / ls önbellekleme


10

İlk kez çalıştırdığımda findya lsda bir dizinde çalıştığım zaman biraz zaman alıyor. Ancak, her seferinde, direktörün içeriğinin bir listesi bir yerde önbelleğe alınmış veya dizine eklenmiş gibi hızlıdır.

Bu önbelleği bilgisayarın yeniden başlatılmasında korumanın bir yolu var mı?


1
Gerçekten önbelleğe alınmış. Linux kullanılmayan belleği önbellek ve arabellekler olarak kullanır (bu, "yeterli" RAM ile bile her zaman bazı takaslara sahip olmanızın bir nedenidir). Serbest komut size ne kadarının kullanılabilir olduğunu gösterir. Yeniden başlatmalar arasında önbelleklemede çok nokta olduğundan emin değilim, botlar arasında çok şey değişebilir. Tüm dosyalarınızı gözden geçirmek için her 10,30 dakikada bir en düşük priorety ile çalışacak bir cron işi yapmaya ne dersiniz? Önbelleği her zaman nispeten güncel tutmalıdır. Ayrıca dosya değişikliklerini algılamanın bir yolu (çekirdek için) olduğunu düşünün.
Baard Kopperud

Yanıtlar:


8

Vmtouch uygulamasını sayfa önbelleğinize (disk önbelleği) dosya eklemek için kullanabilirsiniz .

Put nohup vmtouch -dl <files or directories> &your içinde /etc/rc.localaçılışta sayfanızı önbelleğine eklemek için dosya ve kilit dosyaları. Sayfa önbelleğinize dosya eklemek istiyor ancak bunları belleğe kilitlemek istemiyorsanız, -tbayraklar yerine bayrağı kullanın -ld.

Sayfa önbelleği hakkında daha fazla bilgi için buraya , buraya ve wikipedia'ya bakın .


Bu komut Ubuntu'da mevcut görünmüyor - deneyebileceğim bir alternatif var mı?
Richard

@Richard vmtouch'u kendiniz derlemek çok kolaydır: build-essentialPaketi kurun . İndirin vmtouch.c. gcc -O2 -o vmtouch vmtouch.cVeya komutunu çalıştırın make vmtouchve vmtouchsonra örneğin kopyalayabileceğiniz /usr/local/binveya arayabileceğiniz ikili dosyayı alırsınız ./vmotouch.
jofel

@Richard Ben Ubuntu kullanmıyorum, bu yüzden bunu test etmedim ve hiçbir sorumluluk almadım ama "Ubuntu mvtouch" googling bu ppa getirdi .
terdon

@jofel, evet, derlemek yeterince kolaydı - teşekkürler. Sadece mümkün olduğunda paketleri kullanmayı tercih ederim.
Richard

@Evan, yanılıyorsam beni düzeltin, ama vmtouchbir önyükleme komutu olarak kullanmazsanız tüm işler yavaşlar mı? Umudum (her zaman) (pahalı) rejenerasyon yerine botlar arasında bir önbellek korumak olmuştu.
Richard

2

"Yeniden başlatmalarda koru", bundan şüpheliyim. Ancak önyükleme sırasında önbelleği önemsiz bir şekilde yeniden oluşturabilirsiniz, bu da neredeyse aynı şeyi eksi küçük bir gecikmeyle gerçekleştirir.

Bir dosya oluşturun /etc/cron.d/rebuild-fs-cacheve içine dosya ekleyin:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

Bu kullanır niceve ionice(varsayılan olarak kurulmalı ve paket yöneticisi aracılığıyla kesinlikle kullanılabilir olmalıdır; Debian bunları sırasıyla coreutilsve util-linuxsırasıyla) findişlemin önceliğini mümkün olan en güzel seviyelere düşürmek için kullanır, yani başka hiçbir şeye müdahale etmemesi gerekir sisteminizde çalışır ancak tamamlanması biraz daha uzun sürer. findkendisi ve stat()her şey, çekirdeği dosya sistemi verilerini diskten belleğe yüklemeye zorlar.

Önbellek oluşturulduktan sonra, işletim sisteminin başka bir şey için belleğe ihtiyacı olduğu için temizlenmediği sürece, korunmalıdır. Bunu bir süredir kullanıyorum ve büyük dizinlerde bile dizin listeleri , herhangi bir kesin sayıyı gösteremese de, yukarıdaki cron işi olmadan önemli ölçüde daha hızlı.


1
Eğer tekerleği yeniden icat etmek gidiyoruz, siz de kullanabilirsiniz locatebirlikte gelir ki, updatedbgüncelleştirmek için bir veritabanı bulun: en.wikipedia.org/wiki/Locate_(Unix)
laebshade

@ laebshade Hiç kullanmıyorum locateama çok kullanıyorum ls. Ve bazen find. (Ayrıca, find ve ls, OP'nin sorduğu özel komutlardır.) findBurada kullanmanın amacı, depolama çağrısı stat () üzerindeki her şeyin üzerinde yinelemesidir, böylece çekirdek meta verileri belleğe yüklemelidir. Bir kez orada, bir yeniden başlatma boyunca depolanmış gibi iyidir.
CVn
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.