¿Cómo reducir el búfer de escritura de Linux para dispositivos extraíbles?

¿Cómo reducir el búfer de escritura de Linux para dispositivos extraíbles?

Cuando escribo contenido en dispositivos extraíbles en Linux (memorias USB/HDD, tarjetas SD, etc.), a menudo veo velocidades de escritura increíbles en los primeros segundos, a veces del orden de GB/s (llenado del búfer de escritura) seguido de varios minutos de silencio (el búfer se escribe realmente en el dispositivo).

Es engañoso. Hace que sea difícil juzgar la velocidad de escritura real. Es molesto (no se puede interrumpir un programa mientras se vacía el buffer). Puede causar daños al FS y, como mínimo, contenido no escrito cuando el dispositivo se desconecta mientras aún se está escribiendo.

En mi caso, el búfer de escritura parece tener más de un GB. ¿Hay alguna manera de controlarlo? Me gustaría reducirlo a un valor más sensato.

Nota: No se trata de la caché del sistema de archivos, este efecto también aparece en dispositivos sin formato.

Nota: No quiero desactivar completamente los buffers de escritura.

¡Gracias!

Respuesta1

Encontré la respuesta. Linux de 64 bits mantiene un búfer de escritura grande (¡20% de la memoria disponible!) de forma predeterminada. (Curiosamente, Linux de 32 bits se limita a un máximo de 180 MB) Para cambiar el tamaño del búfer sucio a, por ejemplo, 200 MB, se puede usar

echo 200000000 > /proc/sys/vm/dirty_bytes

Opara utilizar un porcentaje de RAM, por ejemplo, 1%:

echo 1 > /proc/sys/vm/dirty_ratio

Más información:https://lwn.net/Articles/572911/

información relacionada