¿Cómo puedo limitar la memoria caché utilizada al copiar para que todavía haya memoria disponible para otra memoria caché?

Situación básica:

Estoy copiando algunos discos NTFS en openSuSE. Cada una es de 2TB. Cuando hago esto, el sistema se ejecuta lento.

Mis conjeturas:

Creo que es probable que sea debido al almacenamiento en caché. Linux decide descartar el caché útil (p. Ej., Kde4 inflables, discos de máquinas virtuales, binarios de LibreOffice, binarios de Thunderbird, etc.) y en su lugar, llena toda la memoria disponible (24 GB en total) con cosas de los discos de copia, que se leerán una sola vez. Luego se escribe y nunca se usa de nuevo. Entonces, cada vez que uso estas aplicaciones (o kde4), el disco debe leerse de nuevo, y leer la hinchazón del disco de nuevo hace que las cosas se detengan.

Debido a que la memoria caché se ha ido y el hecho de que estas aplicaciones hinchadas necesitan mucha memoria caché, esto hace que el sistema sea terriblemente lento.

Dado que es USB, el disco y el controlador del disco no son el cuello de botella, por lo que el uso de ionice no lo hace más rápido.

Creo que es el caché en lugar de solo que la placa base vaya demasiado lento, porque si dejo de copiar todo, todavía se queda entrecortado por un tiempo hasta que lo vuelva a incluir todo. Y si reinicio la copia, toma un minuto antes de que se vuelva a interrumpir. Pero también, puedo limitarlo a alrededor de 40 MB / s, y se ejecuta de nuevo más rápido (no porque tenga las cosas correctas en caché, sino porque los buses de la placa base tienen mucho ancho de banda adicional para los discos del sistema). Puedo aceptar completamente una pérdida de rendimiento de la capacidad de E / S de mi placa base que se consume por completo (que se usa al 100%, lo que significa un 0% de energía desperdiciada, lo que me hace feliz), pero no puedo aceptar que este mecanismo de almacenamiento en caché tenga un desempeño tan terrible en este uso específico caso.

<code># free
             total       used       free     shared    buffers     cached
Mem:      24731556   24531876     199680          0    8834056   12998916
-/+ buffers/cache:    2698904   22032652
Swap:      4194300      24764    4169536
</code>

También intenté lo mismo en Ubuntu, lo que provoca un bloqueo total del sistema. ;)

Y para aclarar, no estoy preguntando cómo dejar la memoria libre para el "sistema", sino para "caché". Sé que la memoria caché se devuelve automáticamente al sistema cuando es necesario, pero mi problema es que no está reservada para el almacenamiento en caché de cosas específicas.

Pregunta:

¿Hay alguna forma de indicar a estas operaciones de copia que limiten el uso de la memoria para que algunas cosas importantes permanezcan en la memoria caché y, por lo tanto, cualquier desaceleración sea el resultado del uso normal del disco y no vuelva a leer los mismos archivos que se usan comúnmente? Por ejemplo, ¿hay una configuración de memoria máxima por proceso / usuario / sistema de archivos que se pueda usar como caché / buffers?

Respuestas a la pregunta(7)

Su respuesta a la pregunta