Ajustar el algoritmo de vaciado de caché del disco de escritura

Ajustar el algoritmo de vaciado de caché del disco de escritura

Me gustaría utilizar la memoria libre para la caché de escritura. Linux lo hace automáticamente, pero tiene un algoritmo de vaciado extraño que me gustaría ajustar para mi uso.

Recientemente he utilizado ddrescuepara copiar un disco. Lee un bloque y lo escribe en el disco.

Lo que me gustaría es que la lectura se lea lo más posible hasta que no quede más libre y luego se bloquee hasta que se libere algo de espacio, mientras que al mismo tiempo la escritura escribe lo más rápido posible liberando memoria.

Entonces, si el disco de escritura es más rápido que el disco de lectura, no se utilizará memoria, y si el disco de escritura es más lento que el disco de lectura, toda la memoria permanecerá utilizada hasta que se complete la copia.

En ambos escenarios, el uso de la memoria permanece constante (a menos que otros programas tomen parte de la memoria libre).

Pero lo que veo es esto:

Escribir caché

La lectura llena el caché (mientras se realiza poca o ninguna escritura) y cuando el caché alcanza un límite (o después de un período de tiempo), la lectura se bloquea mientrastodoel caché se escribe en el disco. Es casi como si un troll estuviera ejecutando "sincronización" de vez en cuando.

Intenté cambiar /proc/sys/vm/dirty_* sin éxito: el único cambio que pude provocar es la altura de las partes superiores. Entonces, una respuesta que mencione /proc/sys/vm/dirty_* tendrá que proporcionar valores probados que aplanen de manera mensurable el gráfico de dientes de sierra.

Lo más probable es que una configuración que le indique a Linux que comience a escribir lo antes posible pero que nunca bloquee la lectura o la escritura si hay espacio libre sea adecuada para mi propósito.

Conozco herramientas como mbuffer. Aplanarán el gráfico, pero no son dinámicos (es decir, liberan memoria cuando la memoria libre es baja) y no permiten búsquedas, por lo que no funcionarán con programas como ddrescue(que tiene que buscar de un lado a otro).

información relacionada