GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo limitar el caché utilizado al copiar para que todavía haya memoria disponible para otro caché?

¡El comando nocache es la respuesta general a este problema! Consulte https://github.com/Feh/nocache o búsquelo en Debian y Ubuntu 13.10 (descarado).

Gracias, Peter, por alertarnos sobre la opción --drop-cache" en rsync. Pero eso fue rechazado en sentido ascendente (Error 9560 – opción drop-cache), a favor de una solución más general para esto:el nuevo comando "nocache" basado en el trabajo de rsync con fadvise.

Simplemente anteponga "nocache" a cualquier comando que desee. También tiene buenas utilidades para describir y modificar el estado de caché de los archivos. P.ej. aquí están los efectos con y sin nocache:

$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%)  [filesize=7776.2K, pagesize=4K]
$ ./nocache cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%)  [filesize=7776.2K, pagesize=4K]\
$ cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 1945/1945 (100.0%)  [filesize=7776.2K, pagesize=4K]

Así que espero que funcione para otros programas de copia de seguridad (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar, etc.) y otros comandos que no desea que destruyan su caché.


Kristof Provost estaba muy cerca, pero en mi situación, no quería usar dd ni escribir mi propio software, así que la solución fue usar la opción "--drop-cache" en rsync.

Lo he usado muchas veces desde que creé esta pregunta, y parece solucionar el problema por completo. Una excepción fue cuando uso rsync para copiar desde una máquina FreeBSD, que no admite "--drop-cache". Así que escribí un contenedor para reemplazar el comando /usr/local/bin/rsync y eliminé esa opción, y ahora también funciona copiando desde allí.

Todavía usa una gran cantidad de memoria para los búferes y parece no mantener casi ningún caché, pero funciona sin problemas de todos modos.

$ free
             total       used       free     shared    buffers     cached
Mem:      24731544   24531576     199968          0   15349680     850624
-/+ buffers/cache:    8331272   16400272
Swap:      4194300     602648    3591652

El kernel no puede saber que no utilizará los datos almacenados en caché para copiarlos nuevamente. Esta es su ventaja de información.

Pero podría establecer el swapiness en 0:sudo sysctl vm.swappiness=0. Esto hará que Linux elimine el caché antes de que las bibliotecas, etc., se escriban en el intercambio.

También funciona bien para mí, especialmente muy eficaz en combinación con hugh ram (16-32 GB).


Linux
  1. Cómo borrar la caché de memoria en Linux

  2. Linux:¿cómo obtener la cantidad de memoria disponible de forma portátil en todas las distribuciones?

  3. CentOS/RHEL 6:Cómo limitar los recursos de memoria para un usuario específico usando cgroups

  4. ¿Cómo puedo medir el uso de memoria real de una aplicación o proceso?

  5. ¿Cómo puedo *solo* obtener la cantidad de bytes disponibles en un disco en bash?

¿Cómo puedo verificar el conteo de visitas para cada regla en iptables?

¿Cómo vaciar la memoria caché de la CPU para una región de espacio de direcciones en Linux?

Fish Shell:¿Cómo puedo personalizar los colores para la función de autocompletar?

¿Cómo puedo mostrar el uso de memoria de cada proceso si hago un 'ps -ef'?

¿Cómo puedo determinar el tamaño actual del ARC en ZFS y cómo se relaciona el ARC con la memoria caché o libre?

¿Cómo puedo reservar un bloque de memoria del kernel de Linux?