Uno de los problema mas comunes al instalar Linux o administrar una maquina en Linux es encontrar el sistema de archivos que mas se ajuste a nuestras necesidades. a continuación tenemos un script que creara varios sistemas de archivos y realizara diversas pruebas.
echo "****************************" echo "*Creating Files for loopback*" echo "****************************" echo " " echo "Creating file" dd if=/dev/zero of=filesystem.fs count=5000000 echo "Formating btrfs filesystem" mkfs.btrfs filesystem.fs mkdir filesystem echo "Configuring loopback" losetup /dev/loop0 filesystem.fs mount -t btrfs /dev/loop0 filesystem cd filesystem cp ../script.sh ./ sh script.sh umount /dev/loop0 echo "Formating ext2 filesystem" mkfs -t ext2 /dev/loop0 mount -t ext2 /dev/loop0 filesystem cd filesystem cp ../script.sh ./ sh script.sh echo "Formating ext3 filesystem" mkfs -t ext3 /dev/loop0 mount -t ext3 /dev/loop0 filesystem cd filesystem cp ../script.sh ./ sh script.sh echo "Formating ext4 filesystem" mkfs -t ext4 /dev/loop0 mount -t ext4 /dev/loop0 filesystem cd filesystem cp ../script.sh ./ sh script.sh echo "Formating XFS filesystem" mkfs -t xfs -f /dev/loop0 mount -t xfs /dev/loop0 filesystem cd filesystem cp ../script.sh ./ sh script.sh echo ""Formating ReiserFS filesystem" mkfs.reiserfs /dev/loop0 mount -t reiserfs /dev/loop0 filesystem cd filesystem cp ../script.sh ./ sh script.sh
creara un archivo de 5gb que utilizara como disco duro (enlazado con /dev/loop0) para ejecutar la siguiente batería de pruebas.
Prueba 1: Crear 10000 ficheros
mkdir fileDir echo "Creating Files" date --rfc-3339=ns for i in {1..10000} do touch fileDir/$i done date --rfc-3339=ns
en esta prueba XFS se lleva la peor parte en esta parte posiblemente a causa de las write barriers que lo obliga a escribir en el disco mas veces de las necesarias, encfs a pesar de estar encriptado no se ve penalizado. Los otros sistemas de archivos tienen un rendimiento similar.
Prueba 2: Buscar dentro de los 10000 ficheros
echo "Finding Fluzo generator" date --rfc-3339=ns for i in {1..10000} do grep "fluzo" fileDir/$i done date --rfc-3339=ns
Esta prueba obliga al sistema abrir todos los archivos para buscar en su contenido la palabra “fluzo”, el retraso de encfs se debe por su penalización al estar encriptado el resto de sistemas de archivo no tienen una diferencia de rendimiento destacable siendo XFS y btrfs un poco mas lentos que la familia ext y reiserFS
Prueba 3: Eliminar los archivos de la prueba 1
echo "Removing File Directory" date --rfc-3339=ns rm -rf fileDir date --rfc-3339=ns
XFS se lleva la peor parte en esta prueba siendo extremadamente lento (¿write barriers?) , encfs también sufre una pequeña penalización pero no es tan destacable como el XFS los sistemas de archivos que utilizan un árbol como estructura sufren una mayor penalización que los que usan una lista.
Prueba 4: Buscar en una estructura de 10000 directorios
mkdir dirDir echo "Creating Directories" cd dirDir for i in {1..10000} do mkdir $i done cd .. echo "Finding Fluzo into directory struct" date --rfc-3339=ns find fluzo date --rfc-3339=ns
Esta prueba obliga al kernel a abrir el contenido de todos los directorios y buscar en sus estructuras. Los arboles B+ de ReiserFs le otorgan una alta ventaja frente al resto siendo el mas eficiente el encfs el perdedor es ext3
Prueba 5: Eliminar 10000 directorios
echo "Removing Directories" date --rfc-3339=ns rm -rf dirDir date --rfc-3339=ns
La operaciones de eliminación de ficheros son mas rápidas en ext2 sobre el resto de los ficheros, los otros sistemas se ven penalizados al balancear los arboles el sistema encfs sufre una altisima penalización
Prueba 6: Copiar el kernel desde el directorio home del usuario
echo "Copying Kernel from user home" date --rfc-3339=ns cp ~/kernel.tar.gz ./ date --rfc-3339=ns
La copia de un archivo grande muestra que tanto ext3 como ext2 no pueden alardear de un gran rendimiento el resto de sistemas de archivos realizan la misma acción en menos tiempo (casi la mitad) a excepción de Encfs que queda en un puesto intermedio
Prueba 6: Copiar el kernel al home del usuario
echo "Copying Kernel to user home" date --rfc-3339=ns cp kernel.tar.gz ~/kernel2.tar.gz date --rfc-3339=ns rm -rf ~/kernel2.tar.gz
La siguiente prueba obliga al sistema a realizar una lectura del sistema del archivo copiado en el paso anterior XFS aparece como el vencedor en cuanto a rendimiento seguido de ext2 y btrfs el resto de sistemas de archivos muestran un retraso considerable al realizar la lectura siendo el mas lento ext3
Prueba 7 : Descomprimir el tarball del kernel
echo "Untar Kernel source" date --rfc-3339=ns tar -xzf kernel.tar.gz date --rfc-3339=ns
La descompresión del tarball del kernel obliga al sistema de archivo a crear un gran numero de directorios y sus archivos XFS vuelve a ser el mas lento, y ext2 el mas rapido, ext3,ext4 y reiserFS se aproximan al rendimiento de ext2 quedando btrfs un poco descolgado y encfs en un punto intermedio
Prueba 8: Comprimir el codigo fuente del kernel
echo "tar Kernel source" date --rfc-3339=ns tar -czf paquete.tar.gz linux-2.6.32/ date --rfc-3339=ns
Esta prueba combina la lectura de todos los archivos del kernel con la creación de un nuevo archivo en el caso de XFS su velocidad de lectura compensa su lentitud de escritura teniendo todos los sistemas un rendimiento simila a excepciçon de encfs que se vuelve a mostrar como el mas lento de todos
Prueba 9: Eliminar la carpeta que contiene el codigo del kernel
echo "Removing Kernel Source Tree" date --rfc-3339=ns rm -rf linux-2.6.32 date --rfc-3339=ns
Esta prueba obliga al sistema de archivos a eliminar un gran conjunto de archivos y directorios. ext4 es el mas rapido con diferencia y XFS se perfila como el sistema mas lento de todos los demas sistemas de archivos muestran un rendimiento un poco mas lento que ext4 (entre 2 y 4 veces mas lentos).
Prueba 10: Copiar 10 veces el tarball del kernel
echo "Copying 10 times kernel tarball" date --rfc-3339=ns for i in {1..10} do cp paquete.tar.gz paquete.tar.gz.$i done date --rfc-3339=ns
En esta prueba obligamos al sistema de archivos a crear 10 archivos de tamaño mediano leyendo un archivo localizado en el mismo sistema de archivos, reiserFS es el mas rapido aunque pero no llefa a ser doblado por ninguno de los otros sistemas de archivos a excepción de Encfs.
Prueba 11: Crear un archivo de 1Gb
echo "Creating a 1GB file" date --rfc-3339=ns dd if=/dev/zero of=gigafile.file count=2097152 date --rfc-3339=ns
En esta prueba llenamos 1/5 parte del sistema de ficheros con un unico archivo siendo los rendimientos similares ganando XFS y el resto de los sistemas teniendo unos retrasos no mayores que el doble en el caso de ReiserFS y Ext3, encfs sigue demostrando que es el mas lento con diferencia (4 veces mas lento aprox).
Prueba 12: Copiar el archivo de 1Gb creado en la prueba anterior
echo "Copying gigafile" date --rfc-3339=ns cp gigafile.file newgigafile.file date --rfc-3339=ns
En esta prueba obligamos al sistema de archivos a leer 1/5 parte de su contenido y a escribirla en otro archivo btrfs es el mas rapido con diferencia seguido de ext4 y a lo lejos por XFS tanto ext2, ext3 y reiser son los menos apropiados para trabajar con archivos tan grandes. encfs tiene un rendimiento lento quedando en un punto intermedio, posiblemente al usarse sobre un sistema ext4.
Prueba 13: Separar un archivo en varias partes de distintos tamaños
dd if=/dev/zero of=tosplit.img count=20480 mkdir splitDir echo "Spliting 10 Mb file" date --rfc-3339=ns split -b 1000 -d tosplit.img splitDir/mi_split1000.s split -b 1024 -d tosplit.img splitDir/mi_split1024.s split -b 2048 -d tosplit.img splitDir/mi_split2048.s split -b 4096 -d tosplit.img splitDir/mi_split4096.s split -b 8192 -d tosplit.img splitDir/mi_split8192.s date --rfc-3339=ns
En esta prueba se obliga al sistema a duvidir un fichero de 10Mb en un conjunto de partes del tamalo de 1000,1024,2048,4096 y 8192 bytes, la lentitud de XFS creando archivos lo relega a ser el mas lento de todos reiserFS y ext2 quedan en un segundo grupo que tarda un poco mas del doble que el grupo de cabeza formado por btrfs,ext3 y ext4. Encfs tarda un poco mas del triple.
Prueba 14: Leer el archivo de 1Gb con cat redirigiendo la salida a /dev/null
echo "Cat 1GB file to dev/null" date --rfc-3339=ns cat gigafile.file >/dev/null date --rfc-3339=ns
En la ultima prueba obligamos al sistema de archivos a leer un archivo grande de 1Gb 1/5 el tamaño total. reiserFS muestra un rendimiento sorprendente siendo el sistema mas recomendado para lecturas de archivos grandes, seguido de btrfs con un tiempo de unas 10-15 veces mas lento mientras que el resto de sistemas de archivos quedan agrupados en unos tiempos de mas del doble que btrfs.
Podemos observar todas las pruebas juntas en la siguientes listas
y los tiempos totales de todas las operaciones juntas
para un uso mixto los mas recomendables son btrfs y ext4 seguidos de reiser y ext2 junto a ext3 encfs se perfila como uno de los mas lentos y menos recomendable.
podiamos clasificar los 3 mejores en la siguiente lista:
- creación ficheros: reiserFS, ext4
- eliminación ficheros: reiserFS, ext4
- lectura de ficheros: ext2, btrfs,xfs (grandes)
Las siguientes pruebas no han tenido en cuenta características como journaling, capacidades de encriptación, rendimiento en configuraciones RAID y sistemas de archivos con mucho movimiento donde aparezcan penalizaciones por fragmentación.
Mira que tienes tiempo para perderlo….
El estudio es interesante, pero en realidad los datos no reflejan un uso habitual de un dispositivo de almacenamiento.
El escenario es cambiante, dependiendo del uso del uso que hagas del sistema de archivos y la decisión del sistema de archivos depende de eso