Una de las tantas ventajas de utilizar Linux es el poder elegir el sistema de archivos que vas a poner en tu disco duro. A lo mejor no quieres utilizar el antiguo FAT o la falta de soporte de escritura confiable de NTFS en Linux tampoco es de tu agrado. Para eso existe toda una fauna de sistemas de archivos para elegir.


Para ayudarte a elegir, tenemos una comparación de 4 de los más utilizados: Ext3, ReiserFS, JFS y XFS.


Existen varias comparaciones de sistemas de archivos para Linux pero la mayoría de ellos son anecdóticas, basadas en tareas artificiales o completas sobre núcleos antiguos. Este escrito sobre pruebas de patrones está basado en 11 tareas del mundo real apropiadas para un servidor de archivos con hardware pasado de moda (Pentium I/II, disco duro IDE).

¿Por qué otra prueba de patrones?


Encontré dos estudios de pruebas de patrones cuantitativos y reproducibles basados en el núcleo 2.6.x (ver Referencias). Benoit (2003) implementó 12 pruebas utilizando archivos grandes (mayores a 1Gb) en un servidor Pentium II con 512 Mb de memoria RAM. Esta prueba era bastante informativa; pero los resultados comienzan a envejecer (núcleo 2.6.0 [actualmente ya estamos en 2.6.16.9]) y mayormente se aplicaba a escenarios en los que se manipulaban únicamente ese gran tamaño de archivos (aplicaciones multimeda, científicas, bases de datos, etc).

Piszcz (2006) implementó 21 tareas simulando una variedad de operaciones sobre archivos en una Pentium III 500 con 786 Mb de memoria RAM y un disco duro de 400 Gb IDE 133. A la fecha, éste parece ser el trabajo más completo en el núcleo 2.6. Sin embargo, como muchas tareas eran “artificiales” (por ejemplo: copiar y borrar 10.000 directorios vacíos, “tocar” 10.000 archivos, dividir archivos recursivamente, etc.) puede ser difícil extrapolar conclusiones a esnecarios del mundo real.

Por ello, el objetivo de ésta prueba de patrones es completar la conclusiones de Piszcz (2006), enfocándonos exclusivamente en las operaciones del mundo real que se pueden encontrar en servidores de archivos de pequeños negocios (ver Descripción de las Tareas).

Configuración de las pruebas


Hardware

* Procesador: Intel Celeron 533
* Memoria RAM: 512Mb RAM PC100
* Placa Madre: ASUS P2B
* Disco Duro: WD Caviar SE 160Gb (EIDE 100, 7200 RPM, 8 MB Cache)
* Controladora: ATA/133 PCI (Silicon Image)

Software

* Sistema Operativo: Debian Etch (Kernel 2.6.15) actualizado por última vez el 18 de Abril de 2006
* No se encontraban corriendo los demonios opcionales (cron, ssh, samba, etc.)

Sistema de Archivos

* Ext3 (e2fsprogs 1.38)
* ReiserFS (reiserfsprogs 1.3.6.19)
* JFS (jfsutils 1.1.8)
* XFS (xfsprogs 2.7.14)

Descripción de Tareas
Operaciones en un archivo grande (imágen ISO, 700 Mb)

* Copiar la imágen de un segundo disco duro al disco de pruebas
* Copiar la imágen nuevamente a una nueva ubicación del disco de pruebas
* Eliminar ambas copias de la imágen

Operaciones sobre un árbol de archivos (7.500 archivos, 900 directorios, 1,9 Gb)

* Copiar el árbol de archivos de un segundo disco duro al disco de pruebas
* Copiar el árbol nuevamente a una nueva ubicación del disco de pruebas
* Eliminar ambas copias del árbol

Operaciones dentro de un árbol de archivos

* Listado recursivo del contenido del árbol de archivos y grabado en el disco de pruebas
* Encontrar archivos dentro del árbol de archivos que coincidan con un patrón específico

Operaciones sobre el sistema de archivos

* Creación del sistema de archivos (mkfs) (todos los sistemas de archivos fueron creados con los valores por defecto)
* Montar el sistema de archivo
* Desmontar el sistema de archivos

La secuencia de 11 tareas (desde la creación del sistema de archivos hasta su desmonado fue corrida por un script Bash 3 veces (se reportó el promedio). Cada una de las secuencias tomó al rededor de 7 minutos. El tiempo que tomó cada tarea en completarse (en segundos), el porcentaje de CPU dedicado a cada tarea y el número de fallas de página mayores/menores durante la misma fueron calculados con la utilidad GNU time (versión 1.78).

Resultados

Capacidad de la partición

La capacidad inicial (después de la creación del sistema de archivos) y residual (después de la eliminación del sistema de archivos) fue calculada como la proporción de la cantidad de bloques disponibles entre la cantidad de bloques de la partición. Ext3 tiene la peor capacidad inicial (92,77%), mientras que otros sistemas de archivos mantienen prácticamente toda la capacidad de la partición (ReiserFS: 99,83%, JFS: 99,82%, XFS: 99,95%). Curiosamente, la capacidad residual de Ext3 y ReiserFS es idéntica a la inicial, mientras que JFS y XFS perdieron alrededor de 0,02% de la capacidad de la partición, sugiriendo que éstos sistemas de archivos pueden crecer dinámicamente, pero no volver completamente a su estado inicial (y tamaño) una vez removido un archivo.

Conclusión: para utilizar el máximo de la capacidad de la partición hay que utilizar ReiserFS, JFS o XFS.

Creación, montado y desmontado de sistemas de archivos

La creación de un sistema de archivos en una partición de pruebas de 20 Gb tomó 14,7 segundos a Ext3, comparado con 2 segundos o menos para los demás sistemas de archivos (ReiserFS: 2,2 - JFS: 1,3 - XFS: 0,7). Sin embargo, ReiserFS tomó entre 5 y 15 veces más para montar el sistema de archivos (2,3 segundos) comparado con los demás sistemas de archivos (Ext3: 0,2 - JFS: 0,2 - XFS: 0,5) y también el doble de tiempo para desmontar el sistema de archivos (0,4 segundos). Todos los sistemas de archivos mostraron cantidades parecidas de utilización de CPU para crear el sistema de archivos (entre 59% para ReiserFS y 74% de JFS) y para montar el mismo (entre 6% y 9%). Sin embargo, Ext3 y XFS mostraron aproximadamente el doble de uso de CPU al desmontar (37% y 45%) comparado con ReiserFS y JFS (14% y 27%).

Conclusión: para creación, montado y desmontado rápido de sistemas de archivos hay que utilizar JFS o XFS.

Operaciones en archivos grandes (imágen ISO, 700 Mb)

La copia inicial del archivo tomó más en Ext3 (38,2 segundos) y ReiserFS (41,8) comparados con JFS y XFS (35,1 y 34,8). El segundo copiado en el mismo disco aventaha en XFS (33,1 segundos) comparado con los demás (Ext3: 37,3 - JFS: 39,4 - ReiserFS: 43,9). El borrado de la imágen fue aproximadamente 100 veces más rápido en JFS y XFS (0,02 segundos en ambos) comparado con 1,5 segundos para ReiserFS y 2,5 segundos para Ext3. Todos los sistemas de archivos mostraron cantidades comparables de uso de CPU para la primera copia (entre 46% y 51%) y para la segunda copia de la imágen (entre 38% y 50%). ReiserFS mostró un uso del 48% de CPU para borrar la imágen mientras que los demás utilizaron sólo 10%. Se notaba una tendencia de JFS a utilizar menos CPU que los demás sistemas de archivos (aproximadamente entre 5% y 10%). El número de menor fallas de página fue muy similar (desde 600 para XFS hasta 661 para ReiserFS)

Conclusión: para operaciones rápidas en archivos grandes, elige JFS o XFS. Si se necesita minimizar el uso de CPU, sería JFS.

Operaciones sobre un árbol de archivos (7.500 archivos, 900 directorios, 1,9 Gb)

La copia inicial del árbol fue más rápida para Ext3 (158,3 segundos) y XFS (166,1 segundos) comparado con ReiserFS y JFS (172,1 y 180,1). Resultados similares se observaron durante la segunda copia en el mismo disco duro, que aventajó Ext3 (120 segundos) comparado con otros sistemas de archivos (XFS: 135,2 - ReiserFS: 136,9 - JFS: 151). Sin embargo, la eliminación del árbol fue aproximadamente el doble de lenta para Ext3 (22 segundos) al compararlo con ReiserFS (8,2 segundos), XFS (10,5 segs) y JFS (12,5 segs). Todos los sistemas de archivos mostraron usos de CPU similares para el primer copiado (entre 27% y 36%) y para el segundo copiado (entre 29% para JFS y 45% para ReiserFS). Sorprendentemente, ReiserFS y XFS mostraron un uso más intensivo de CPU para elimiar el árbol (86% y 65%) cuando los demás sistemas de archivos utilizaron alrededor de 15%. Nuevamente, se podía ver una tendencia marcada de JFS para utilizar menos CPU que cualquier otro sistema de archivos. El número de menor fallas de página fue significativamente mayor para ReiserFS (5843 en total) al compararlo con los demás (entre 1400 y 1490). Esta diferencia se debe a una tasa mayor de fallas de página (entre 5 y 20 veces) en ReiserFS en la segunda copia y el borrado del árbol.

Conclusión: Para operaciones rápidas en un gran árbol de archivos, elige Ext3 o XFS. Las pruebas de patrones de otros autores han respaldado el uso de ReiserFS para operaciones en gran número de archivos pequeños. Sin embargo, los resultados actuales en un árbol compuesto de miles de archivos de diferentes tamaños (10 Kb a 5 Mb) sugiere que tanto Ext3 como XFS podrían ser más apropiados para las operaciones de un servidor de archivos del mundo real. Aún si JFS minimiza el uso de CPU, debería notarse que dicho sistema de archivos tiene una latencia significativamente mayor para operaciones con un gran árbol de archivos

Listado de directorios y búsqueda de archivos en el árbol de archivos

El listado completo (y recursivo) de los directorios de árbol fue más rápido para ReiserFS (1,4 segundos) y XFS (1,8) comparado con Ext3 y JFS (2,5 y 3,1). Resultados similares se observaron durante la búsqueda de archivos, donde ReiserFS (0,8 segundos) y XFS (2,8 segundos) mostraron resultados más veloces comparados con Ext3 (4,6 segundos) y JFS (5 segundos). Ext3 y JFS demostraron un uso de CPU parecido para el listado de directorios (35%) y la búsqueda de archivos (6%). XFS hizo un mayor uso de CPU para el listado de directorios (70%) pero fue similar en cuanto a la búsqueda de archivos (10%). ReiserFS parecería el sistema de archivos más exigente al marcar 71% de uso de CPU en el listado de directorios y 36% para la búsqueda de archivos. Nuevamente, el número de la menor cantidad de fallas de página fue 3 veces mayor para ReiserFS (1991 en total) comparado con los demás sistemas de archivos (desde 704 a 712).

Conclusión: Los resultados sugieren que, para estas tareas, los sistemas de archivos pueden ser agrupados en

1. Rápidos y exigentes con el uso de CPU (ReiserFS y XFS)
2. Más lentos pero con menor uso de CPU (Ext3 y JFS)

XFS parece ser un buen balance con resultados relativamente rápidos, un uso moderado de la CPU y una tasa de fallas de página aceptable.

Conlusión General

Estos resultados reafirman observaciones anteriores de Piszcz (2006) sobre la reducida capacidad de disco de Ext3, tiempos de montado mayores para ReiserFS y mayor tiempo de creación del sistema de archivos para Ext3. Lo que es más, como en este reporte, ambos estudios notaron que JFS es el sistema de archivos de menor uso de CPU. Finalmente, este reporte aparece ser el primero en mostrar la alta falla de páginas de ReiserFS en la mayoría de las operaciones usuales sobre archivos.

Reconociendo los méritos relativos de cada sistema de archivos, un administrador del sistema no tiene más remedio que instalar sólo un sistema de archivos en sus servidores. Basado en todas las pruebas de patrones que se hicieron en este reporte, XFS aparenta ser uno de los más apropiados para ser instalado en un servidor de archivos para las necesidades de una casa o pequeña empresa:

* Utiliza la máxima capacidad de los discos duros
* Es el más rápido en crear, montar y desmontar el sistema de archivos
* Es el sistema de archivos más veloz para operaciones en archivos grandes (mayores a 500 Mb)
* Es un gran segundo lugar para operaciones en una gran cantidad de archivos o directorios pequeños o de mediano tamaño
* Demuestra un buen equilibrio entre uso de CPU y tiempo de respuesta para grandes listados de directorios o búsquedas de archivos
* No es el sistema de archivos con menos uso de CPU pero se observa un aceptable uso de los recursos del sistema para hardware pasado de moda

Mientras que Piczcz (2006) no recomendó explícitamente XFS, él concluyó que “personalmente, sigo eligiendo XFS por performance del sistema de archivos y escalabilidad”. No puedo sino soportar esa conclusión.