Eu gostaria de usar a memória livre para o cache de gravação. O Linux faz isso automaticamente, mas tem algum algoritmo de descarga estranho que eu gostaria de sintonizar para o meu uso.
Eu usei recentemente ddrescue
para copiar um disco. Ele lê um bloco e grava o bloco em disco.
O que eu gostaria é que a leitura seja lida o máximo possível até que não haja mais liberdade, em seguida, bloquear até que algum espaço seja liberado, enquanto ao mesmo tempo a escrita é escrita 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 será 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 eu vejo é isto:
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 enquanto todo o cache é escrito em disco. É quase como se um troll estivesse executando 'sync' de vez em quando.
Eu tentei mudar o / proc / sys / vm / dirty_ * sem sucesso: A única mudança que consegui provocar foi o quão alto os tops são. Portanto, uma resposta que mencione / proc / sys / vm / dirty_ * terá que fornecer valores testados que mensurem de maneira mensurável o gráfico de 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 escrita, se houver espaço livre, provavelmente servirá ao meu propósito.
Estou ciente de ferramentas como mbuffer
. Eles vão achatar o gráfico, mas eles não são dinâmicos (ou seja, liberar memória quando o mem livre é baixo) e eles não permitem buscas, então eles não funcionarão com programas como ddrescue
(que tem que ir e voltar ).