Parece que la primera vez que ejecuto find
o ls
en un directorio, lleva un tiempo trabajar. Pero, cada vez después, es rápido, como si una lista de los contenidos del directorio se hubiera almacenado o indexado en alguna parte.
¿Hay alguna manera de preservar este caché en los reinicios de la computadora?
Respuestas:
Puede usar vmtouch para agregar archivos a la caché de su página (caché de disco).
Ponga
nohup vmtouch -dl <files or directories> &
su/etc/rc.local
archivo para agregar y bloquear archivos en el caché de su página en el arranque. Si desea agregar archivos a la memoria caché de su página, pero no quiere bloquearlos en la memoria, use la-t
bandera en lugar de las-ld
banderas.Para obtener más información sobre el caché de la página, mire aquí , aquí y en wikipedia .
fuente
build-essential
paquete. Descargarvmtouch.c
. Ejecutegcc -O2 -o vmtouch vmtouch.c
omake vmtouch
y obtendrá el binariovmtouch
que luego puede copiar, por ejemplo,/usr/local/bin
o llamar./vmotouch
.vmtouch
como un comando de inicio lento? Mi esperanza había sido preservar un caché en las botas en lugar de (costosamente) regenerarlo cada vez."Conservar a través de reinicios", lo dudo. Pero puede reconstruir trivialmente el caché al arrancar, lo que logra casi lo mismo menos un pequeño retraso.
Cree un archivo
/etc/cron.d/rebuild-fs-cache
y coloque lo siguiente en él:Esto usa
nice
yionice
(que debe instalarse de manera predeterminada y definitivamente debe estar disponible a través del administrador de paquetes; Debian los colocacoreutils
yutil-linux
, respectivamente) para reducir la prioridad delfind
proceso a los niveles más agradables posibles, lo que significa que no debería interferir con nada más ejecutándose en su sistema pero tardará un poco más en completarse.find
pasará por sí mismo ystat()
todo, lo que obliga al núcleo a cargar los datos del sistema de archivos desde el disco a la memoria.Una vez que se ha creado el caché, siempre que no se elimine porque el sistema operativo necesita la memoria para otra cosa, debe mantenerse. He estado usando esto por un tiempo y las listas de directorios incluso en directorios grandes son significativamente más rápidas que sin el trabajo cron anterior, aunque no puedo citar ningún número exacto.
fuente
locate
, que viene con laupdatedb
actualización de una base de datos de localización: en.wikipedia.org/wiki/Locate_(Unix)locate
en absoluto, pero usols
mucho. Y ocasionalmentefind
. (Además, find y ls son los comandos específicos sobre los que pregunta el OP). El punto de usarfind
aquí es que itera sobre todo en el almacenamiento llamando a stat (), por lo que el núcleo debe cargar los metadatos en la memoria. Una vez que está allí, es tan bueno como si estuviera almacenado en un reinicio.