actualizaciones efectivas de archivos en Linux

actualizaciones efectivas de archivos en Linux

En una configuración de alto rendimiento (muchas actualizaciones simultáneas) en Linux, cuál es el método más eficaz para actualizar un archivo de 30k en el disco:


1. simplemente actualice el archivo respectivo
2. elimine el archivo antiguo y guarde el nuevo


Lo que más me preocupa es el tiempo de acceso al disco, pero también la carga del procesador puede ser un factor aquí.

Respuesta1

El subsistema de disco y el sistema de archivos que esté utilizando tendrán un gran impacto aquí. De hecho, hay tantos resultados posibles diferentes que probablemente deberías compararlos. Sin embargo :

  • Tenga en cuenta que las E/S reales y síncronas están limitadas a aproximadamente 100 IOPS para una unidad SATA, 200 para una unidad SAS y varían enormemente de 10 IOPS a 10000 con SSD. Multiplique la cantidad de IOPS por la cantidad de unidades de datos.
  • Los sistemas de archivos modernos agruparán las operaciones de escritura. La elección adecuada del sistema de archivos y el ajuste detallado cambiarán los resultados en un factor de 10 a 100.
  • Los controladores de almacenamiento modernos pueden almacenar en caché las escrituras. La configuración adecuada de la caché de reescritura cambiará una vez más los resultados en un factor de 10 a 1000.

Entonces, hardware adecuado (controlador RAID real con caché WB, SSD), software adecuado (sistema de archivos moderno, ext3 está absolutamente fuera de discusión aquí, elegiría xfs pero ext4 es una opción) y ajuste adecuado (pruebe varios programadores de IO del kernel , tamaño de IO, etc.) tendrán un impacto inmenso.

Respuesta2

Si lo está actualizando MUCHO, es probable que el hecho de que el contenido de los archivos esté obsoleto no sea un problema para usted. Si es así, péguelo en tmpfs, trunque el archivo al actualizarlo y vuelva a escribirlo. Ese sería el método más económico ya que no es probable que utilice ningún disco.

Lo más cercano es truncar/escribir en un sistema de archivos que tenga lano hay tiempoconjunto de opciones de montaje y registro en diario desactivado. Pero nuevamente, es arriesgado si fallas, ya que es posible que pierdas los datos.

Después de eso, vuelve a ser hora con el registro en diario activado.

Recuerde, Linux almacena en buffer las escrituras y sincronizaciones en el disco a intervalos determinados, por lo que normalmente no "sentirá" el impacto de una escritura desde el punto de vista de E/S (a menos que sea una escritura muy intensa, pero eso se puede ajustar). También puede modificar las condiciones para sincronizar con el disco para que el búfer de escritura se llene durante un tiempo prolongado antes de sincronizar con el disco.

Si buscas hacer algo realmente inteligente... utiliza fallocate para preasignar espacio para el archivo, que sería su valor máximo posible. Luego, mmap abre el archivo para leerlo directamente en la memoria. Entonces la reescritura será casi instantánea (pero con pérdidas si hubo un corte de energía). Luego puede controlar cuándo volver al disco con la llamada msync.

Respuesta3

Suponiendo que se trata de un archivo FLAT, y no de un archivo de base de datos, las ventajas y desventajas de cualquiera de los métodos son:

  1. Si simplemente sobrescribe el contenido del archivo en el lugar, ciertamente evitará los pasos de reasignación. Entonces podrías ahorrar un poco de tiempo allí. Sin embargo, la colocación de las piezas puede no ser la óptima.

  2. Es posible que obtenga una ubicación más óptima de los datos dependiendo de la fragmentación del disco. Pero será un poco más lento ya que se debe asignar espacio y si está ejecutando en una configuración más segura, será necesario tiempo para poner a cero el bloque antes de la asignación.

información relacionada