Comprobando el rendimiento de los sistemas de archivos de Linux

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

create 10000 filesen 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

find a file

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

Remove file directory

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

find a file into directory struct

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

remove 10000 directories

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

copy kernel from user home

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

copy kernel to user home

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

untar kernel

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

tar kernel source

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

remove kernel source tree

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

copy ten times kernel tarball

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

create 1GB file

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

copy a gigabite file

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

split 10 MB file

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

cat 1gb file to /dev/null

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

All Filesystem testy los tiempos totales de todas las operaciones juntas

total time filesystempara 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.

2 Replies to “Comprobando el rendimiento de los sistemas de archivos de Linux”

  1. 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.

    1. 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

Leave a Reply

Your email address will not be published. Required fields are marked *