Ao gravar conteúdo em dispositivos removíveis no Linux (pen drives/HDDs, cartões SD, etc), muitas vezes vejo velocidades de gravação incríveis nos primeiros segundos, às vezes na ordem de GB/s (preenchimento do buffer de gravação) seguido por vários minutos de silêncio (buffer realmente sendo gravado no dispositivo).
É enganoso. Torna difícil avaliar a velocidade real de gravação. É irritante (não é possível interromper um programa enquanto ele está liberando buffers). Isso pode causar danos ao FS e, pelo menos, conteúdo não escrito quando o dispositivo é desconectado enquanto ainda está sendo gravado.
O buffer de gravação parece ter mais de um GB no meu caso. Existe uma maneira de controlá-lo? Eu gostaria de reduzi-lo para um valor mais sensato.
Nota: Não se trata de cache do sistema de arquivos, este efeito também aparece em dispositivos brutos
Nota: não quero desabilitar totalmente os buffers de gravação
Obrigado!
Responder1
Eu encontrei a resposta. O Linux de 64 bits mantém um grande buffer de gravação (20% da memória disponível!) por padrão. (Curiosamente, o Linux de 32 bits limita-se a no máximo 180 MB) Para alterar o tamanho do buffer sujo para, por exemplo, 200 MB, pode-se usar
echo 200000000 > /proc/sys/vm/dirty_bytes
OUpara usar uma porcentagem de RAM, por exemplo, 1%:
echo 1 > /proc/sys/vm/dirty_ratio
Mais Informações:https://lwn.net/Articles/572911/