Ajustar algoritmo de liberação de cache de disco de gravação

Ajustar algoritmo de liberação de cache de disco de gravação

Eu gostaria de usar a memória livre para cache de gravação. O Linux faz isso automaticamente, mas possui um algoritmo de liberação estranho que eu gostaria de ajustar para meu uso.

Recentemente, usei ddrescuepara copiar um disco. Ele lê um bloco e grava-o no disco.

O que eu gostaria é que a leitura fosse lida o máximo possível até que não houvesse mais espaço livre e depois bloqueada até que algum espaço fosse liberado, enquanto ao mesmo tempo a escrita grava o mais rápido possível liberando memória.

Portanto, se o disco de gravação for mais rápido que o disco de leitura, nenhuma memória será usada, e se o disco de gravação for mais lento que o disco de leitura, toda a memória permanecerá usada até que a cópia seja concluída.

Em ambos os cenários, o uso da memória permanece constante (a menos que outros programas ocupem parte da memória livre).

Mas o que vejo é isto:

Gravar cache

A leitura preenche o cache (enquanto pouca ou nenhuma gravação é feita) e quando o cache atinge um limite (ou após um período de tempo), a leitura é bloqueada enquantotodoso cache é gravado no disco. É quase como se um troll estivesse sincronizando de vez em quando.

Eu tentei mudar o /proc/sys/vm/dirty_* sem sucesso: a única mudança que consegui provocar é a altura dos topos. Portanto, uma resposta que mencione /proc/sys/vm/dirty_* terá que fornecer valores testados que nivelem mensuravelmente o gráfico do dente de serra.

Um ajuste que diga ao Linux para começar a escrever o mais rápido possível, mas nunca bloqueie a leitura ou a gravação se houver espaço livre, provavelmente atenderá ao meu propósito.

Estou ciente de ferramentas como mbuffer. Eles achatarão o gráfico, mas não são dinâmicos (isto é, liberam memória quando a memória livre está baixa) e não permitem buscas, portanto não funcionarão com programas como ddrescue(que tem que buscar para frente e para trás).

informação relacionada