Ajustar o algoritmo de limpeza do cache de disco de gravação

3

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 ).

    
por Ole Tange 29.09.2013 / 02:14

0 respostas

Tags