Znajdź / buforowanie ls

10

Wydaje się, że przy pierwszym uruchomieniu findlub lsw katalogu praca zajmuje trochę czasu. Ale za każdym razem jest szybki, jakby lista zawartości katalogu została gdzieś zbuforowana lub zindeksowana.

Czy istnieje sposób na zachowanie tej pamięci podręcznej podczas ponownego uruchamiania komputera?

Richard
źródło
1
To jest rzeczywiście buforowane. Linux używa nieużywanej pamięci jako pamięci podręcznej i buforów (to jeden z powodów, dla których zawsze powinieneś mieć jakąś wymianę, nawet przy „wystarczającej” pamięci RAM). Bezpłatne polecenie pokazuje, ile jest dostępnych. Nie jestem pewien, czy warto buforować między restartami, wiele może się zmieniać między butami. Co powiesz na wykonanie zadania cron z najniższym priorytetem co 10,30 minut, aby po prostu przejrzeć wszystkie pliki? Powinien utrzymywać pamięć podręczną stosunkowo aktualną przez cały czas. Pomyśl także, że istnieje sposób (dla jądra) na wykrywanie zmian plików.
Baard Kopperud

Odpowiedzi:

8

Możesz użyć vmtouch, aby dodać pliki do pamięci podręcznej strony (pamięci podręcznej dysku).

Umieścić nohup vmtouch -dl <files or directories> &w /etc/rc.localpliku, aby dodać i plików lock na swoją stronę pamięci podręcznej na bagażniku. Jeśli chcesz dodać pliki do pamięci podręcznej strony, ale nie chcesz blokować ich w pamięci, użyj -tflagi zamiast -ldflag.

Aby uzyskać więcej informacji o pamięci podręcznej strony, spójrz tutaj , tutaj i na wikipedii .

Społeczność
źródło
To polecenie nie wydaje się dostępne w Ubuntu - czy istnieje alternatywa, którą mogę wypróbować?
Richard
@Richard Bardzo łatwo jest samemu skompilować vmtouch: zainstaluj build-essentialpakiet. Pobierz vmtouch.c. Uruchom gcc -O2 -o vmtouch vmtouch.club make vmtouchotrzymasz plik binarny, vmtouchktóry możesz następnie skopiować na przykład /usr/local/binlub zadzwonić ./vmotouch.
jofel
@Richard Nie używam Ubuntu, więc nie przetestowałem tego i nie biorę odpowiedzialności, ale przeglądanie „Ubuntu mvtouch” przywołało to ppa .
terdon
@jofel, tak, kompilacja była łatwa - dzięki. Po prostu wolę używać pakietów, jeśli to możliwe.
Richard
@Evan, popraw mnie, jeśli się mylę, ale czy nie użyłbyś vmtouchpolecenia uruchamiania przy spowolnieniu całego działania? Moją nadzieją było zachowanie bufora na obuwie zamiast (drogiego) regenerowania go za każdym razem.
Richard,
2

„Zachowaj przez ponowne uruchomienie”, wątpię. Ale możesz w trywialny sposób odbudować pamięć podręczną podczas uruchamiania, co osiąga prawie to samo, z niewielkim opóźnieniem.

Utwórz plik /etc/cron.d/rebuild-fs-cachei umieść w nim następujące elementy:

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

Wykorzystuje nicei ionice(które powinny być instalowane domyślnie, a na pewno dostępna za pośrednictwem menedżera pakietów; umieszcza je w Debianie coreutilsi util-linux, odpowiednio), aby obniżyć priorytet findprocesu najpiękniejszych możliwych poziomach, co oznacza, że nie powinny kolidować z niczym innym działa w systemie, ale jego ukończenie potrwa nieco dłużej. findsam przejdzie i stat()wszystko, co zmusi jądro do załadowania danych systemu plików z dysku do pamięci.

Po zbudowaniu pamięci podręcznej, o ile nie zostanie wyczyszczona, ponieważ system operacyjny potrzebuje pamięci na coś innego, należy ją zachować. Używam tego od dłuższego czasu, a wykazy katalogów nawet w dużych katalogach są znacznie szybsze niż bez powyższego zadania cron, chociaż nie mogę podać dokładnych liczb.

CVn
źródło
1
Jeśli masz zamiar wynaleźć koło na nowo, równie dobrze możesz użyć locate, który zawiera updatedbaktualizację zlokalizowanej bazy danych: en.wikipedia.org/wiki/Locate_(Unix)
laebshade
@laebshade W ogóle nie używam locate, ale używam lsdużo. I od czasu do czasu find. (Również find i ls są konkretnymi poleceniami, o które prosi OP). Skorzystanie z findtego polega na tym, że iteruje wszystko na pamięci wywołując stat (), więc jądro musi załadować metadane do pamięci. Gdy już tam jest, jest tak dobry, jakby był przechowywany podczas ponownego uruchamiania.
CVn