2010-02-17 9 views
17

Tengo un programa que está afectando mucho al sistema de archivos, leyendo y escribiendo en un conjunto de archivos de trabajo. Los archivos tienen varios gigabytes de tamaño, pero no tan grandes como para no caber en un disco RAM. Las máquinas en las que se ejecuta este programa suelen ser cajas Ubuntu Linux.disco RAM de escritura directa, o almacenamiento en caché masivo del sistema de archivos?

¿Hay alguna manera de configurar el administrador de archivos para que tenga un caché muy grande e incluso almacenar en caché las escrituras para que lleguen al disco más adelante?

¿O existe alguna forma de crear un disco RAM que se pueda escribir en un disco real?

+1

Es mejor preguntar esto en SuperUser. – extraneon

+0

Manténgalo simple: trabaje en/dev/shm y haga una copia en el almacenamiento permanente de vez en cuando. –

Respuesta

22

De forma predeterminada, Linux utilizará RAM libre (casi todo) para almacenar en caché los accesos al disco, y retrasará las escrituras. La heurística utilizada por el kernel para decidir la estrategia de almacenamiento en caché no es perfecta, pero no es fácil superarla en una situación específica. Además, en los sistemas de archivos de journalling (es decir, todos los sistemas de archivos predeterminados en la actualidad), las escrituras reales en el disco se realizarán de forma tal que resilen los bloqueos; esto implica un poco de sobrecarga. Es posible que desee intentar 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 resistencia a los fallos). Además, use noatime para reducir la actividad del sistema de archivos.

Mediante programación, es posible que también desee realizar accesos al 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.

+3

El montaje de los sistemas de archivos relevantes con 'noatime' es definitivamente un buen consejo para este caso. – caf

+0

'vmtouch' también es útil si realmente quiere obligar al kernel a guardar cosas en caché (como lo hago actualmente) –

16

¿Ha comprobado si sus discos están utilizando su caché de escritura incorporada? Puede hacer una diferencia considerable. En Linux, se puede 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 está habilitada la caché de escritura, entonces existe la posibilidad de pérdida o corrupción de datos si el sistema se apaga uncleanly (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 

defecto modernos son para escribir con más frecuencia, para evitar huge write spikes. Puede intentar ajustar estos para satisfacer sus necesidades. Aquí hay un excellent discussion de los parámetros disponibles y cómo puede intentar ajustarlos.

12

Puede crear un disco RAM y RAID-1 con una partición física. Mire las opciones escribir primero y escribir. Puede usarlos para hacer que el disco físico no se lea (solo se escriba) y para establecer el número de operaciones de escritura pendientes, respectivamente.

Como alternativa, consulte la documentación para pdflush. Hay una buena página aquí: http://www.westnet.com/~gsmith/content/linux-pdflush.htm (también enlazado por ire_and_curses) Más allá de lo que he mencionado, es probable que desee cambiar el swappiness hasta 100 para favorecer la caché de disco en lugar del intercambio.

Pero valdría la pena aprender cómo funciona todo y sintonizarlo con su aplicación específica. Linux ya está ajustado para el caso general, y solo usted sabe cómo difiere su situación específica. :)

+3

Dannysauer significa las opciones' -write-mostly' y '-write-behind' de' mdadm' – mabraham

+0

Tenga en cuenta que el software Linux RAID-1 no espera a que todos los datos se repliquen en el dispositivo de grabación diferida en un apagado normal. Simplemente marca las áreas que requieren sincronización en el mapa de bits de escritura y planea continuar copiando datos cuando el sistema está encendido nuevamente. Sin embargo, cuando está nuevamente encendido, el dispositivo RAID primario se ha ido o reemplazado con un disco RAM nuevo. Pérdida de datos. –

-4

¿Puede necesitar disco SSD basado en RAM?

+0

Él/Ella quiere usar su RAM para optimizar el disco-IO. No es una nueva unidad. – alfonx

1

La pregunta aquí realmente es ¿cuánta durabilidad necesita?

Normalmente, Linux estará feliz de usar tanto RAM como lo hay para almacenar en caché los archivos por un tiempo, y luego volver a escribir los cambios. Esto es normalmente lo que desea, por lo que perderá algunos, pero no demasiados datos en caso de un bloqueo.

Las aplicaciones pueden, por supuesto, forzar una escritura de regreso con (por ejemplo) fdatasync() y fsync().

Para obtener un mejor rendimiento, puede llamar a fdatasync con menos frecuencia, por ejemplo, sacrificando la durabilidad.

Cuestiones relacionadas