limpiar - memoria cache linux
¿Un disco RAM de escritura directa o un almacenamiento masivo en caché del sistema de archivos? (5)
Tengo un programa que está golpeando fuertemente el sistema de archivos, leyendo y escribiendo en un conjunto de archivos de trabajo. Los archivos tienen un tamaño de varios gigabytes, pero no tan grandes como para no caber en un disco RAM. Las máquinas en las que se ejecuta este programa son típicamente cajas Ubuntu Linux.
¿Hay alguna forma de configurar el administrador de archivos para que tenga un caché muy grande, e incluso para cachear las escrituras para que lleguen al disco más tarde?
¿O hay una manera de crear un disco RAM que se graba en un disco real?
¿Has comprobado si tus discos están usando su caché de escritura incorporado? Puede hacer una diferencia considerable. En Linux, puedes cambiar el comportamiento con hdparm
:
/sbin/hdparm -W 0 /dev/hda 0 Disable write caching
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching
Obviamente, si el almacenamiento en caché de escritura está habilitado, existe la posibilidad de pérdida o corrupción de datos si su sistema se apaga de manera impura (por ejemplo, corte de energía).
En términos de software, el kernel de Linux utiliza dos números principales para parametrizar el comportamiento de escritura.
/proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio
Los valores predeterminados modernos son escribir con más frecuencia, para evitar grandes picos de escritura . Usted podría tratar de ajustar estos para satisfacer sus necesidades. Aquí hay una excelente discusión de los parámetros disponibles y cómo puede intentar ajustarlos.
La pregunta aquí realmente es ¿cuánta durabilidad requiere?
Normalmente, Linux felizmente utilizará tanto ram como caché de archivos por un tiempo, luego vuelve a escribir los cambios. Esto es normalmente lo que desea, por lo que perderá algunos, pero no demasiados, datos en caso de un fallo.
Las aplicaciones pueden, por supuesto, forzar una reescritura con (por ejemplo) fdatasync () y fsync ().
Para obtener un mejor rendimiento, puede llamar a fdatasync con menos frecuencia, por ejemplo, sacrificando la durabilidad.
Podría crear un ramdisk y RAID-1 con una partición física. Mire las opciones --write-mostly y --write-behind. Puede usarlos para crear el disco físico del cual no debe leerse (solo escribir en), y para establecer el número de operaciones de escritura pendientes, respectivamente.
Alternativamente, mira la documentación de pdflush. Hay una buena página aquí: http://www.westnet.com/~gsmith/content/linux-pdflush.htm (también vinculado por ire_and_curses) Más allá de lo que se mencionó, probablemente querrá aumentar la velocidad hasta 100 para favorecer disco caché sobre intercambio.
Pero valdría la pena aprender cómo funciona todo, y sintonizarlo con su aplicación específica. Linux ya está optimizado para el caso general, y solo usted sabe en qué se diferencia su situación específica. :)
Puede ser ¿Necesita disco SSD basado en RAM?
Por defecto, Linux utilizará RAM libre (casi toda) para almacenar en caché los accesos al disco, y retrasará las escrituras. Las heurísticas utilizadas por el kernel para decidir la estrategia de almacenamiento en caché no son perfectas, pero batirlas en una situación específica no es fácil. Además, al registrar los sistemas de archivos (es decir, todos los sistemas de archivos predeterminados en la actualidad), las escrituras reales en el disco se realizarán de manera tal que resista las colisiones; Esto implica un poco de sobrecarga. Es posible que desee tratar de jugar con las opciones del sistema de archivos. Por ejemplo, para ext3
, intente montar con data=writeback
o incluso async
(estas opciones pueden mejorar el rendimiento del sistema de archivos, a expensas de una menor capacidad de recuperación ante fallos). Además, use noatime
para reducir la actividad del sistema de archivos.
Programáticamente, es posible que también desee realizar accesos de disco a través de asignaciones de memoria (con mmap
). Esto es un poco práctico, pero da más control sobre la administración y optimización de datos.