sistema de archivos para millones de archivos pequeños

44

¿Qué sistema de archivos de Linux elegirías para la mejor velocidad en el siguiente escenario:

  • cien millones de archivos
  • ~ 2k tamaño de archivo en promedio
  • > 95% de acceso de lectura
  • bastante acceso aleatorio
  • alta concurrencia (> 100 procesos)

Nota: Los archivos se almacenan en un árbol jerárquico profundo para evitar directorios grandes. Cada directorio de hoja contiene alrededor de mil archivos.

¿Cómo lo compararías?

bene
fuente
3
Hay alguna información adicional necesaria. Por ejemplo, ¿está almacenando todos los archivos en un directorio plano o en directorios anidados (ordenados)? Esto puede tener un impacto dramático en el rendimiento en los tiempos de acceso a archivos. Examinar 100,000,000 entradas en un arreglo "plano" implicará una sobrecarga significativa independientemente del tipo de FS; En el mejor de los casos, está buscando un árbol de búsqueda de algún tipo, que todavía requiere múltiples búsquedas para llegar a su archivo. Si cataloga los archivos en subdirectorios, el tiempo de acceso se acelerará significativamente ya que hay menos entradas para buscar en cada nivel.
Avery Payne
¿Se accede al archivo en serie o simultáneamente?
Steve Schnepp

Respuestas:

19

Aquí hay algunos resultados que comparan todos los principales FS de linux con bonnie ++ que puede usar como punto de partida.

En términos de búsquedas aleatorias, Reiser gana, seguido de EXT4, seguido de JFS. No estoy seguro de si esto se correlacionará exactamente con las búsquedas de directorio, pero parece que sería un indicador. Tendrás que hacer tus propias pruebas para eso específicamente. EXT2 supera todo para los tiempos de creación de archivos, probablemente debido a la falta de un diario, aún EXT4 supera todo excepto Reiser, que es posible que no desee utilizar debido al estado actual de Hans Reiser.

Es posible que desee buscar unidades que admitan NCQ y asegurarse de que su instalación esté configurada para usarla. Bajo una búsqueda intensa, debería proporcionar un aumento de velocidad.

Por último, asegúrese de que su máquina tenga una tonelada de ram. Como los archivos no se actualizan a menudo, Linux terminará almacenando en caché la mayoría de ellos en RAM si tiene espacio libre. Si sus patrones de uso son correctos, esto le dará un aumento de velocidad masivo.

Andrew Cholakian
fuente
1
El problema de Bonnie ++ es que ni siquiera prueba mi escenario de uso más o menos
bene
2
Tienes un punto sobre no probar las búsquedas de directorio, pero honestamente, si ese es tu punto de estrangulamiento, es mejor que descargues tus datos en una base de datos real. Los sistemas de archivos no funcionan tan bien en los pequeños objetos de la mayoría de las bases de datos están diseñados para usar
Andrew Cholakian
77
@AndrewCholakian Link ahora está muerto.
Don Scott
8

Estoy de acuerdo con la mayoría de lo que dijo Andrew, excepto que recomendaría Reiser4 o el ReiserFS más antiguo (pero mejor compatible) . Como indican esas pruebas (y la documentación de ReiserFS), está diseñado para la situación sobre la que está preguntando (gran cantidad de archivos o directorios pequeños). He usado ReiserFS en el pasado con Gentoo y Ubuntu sin ningún problema.

En cuanto al estado de Hans Reiser, no lo veo como un problema con el código o la estabilidad del sistema de archivos. Reiser4 incluso está patrocinado por DARPA y Linspire, por lo que si bien estoy de acuerdo en que el desarrollo posterior del Sistema de archivos Reiser es indeterminado, no creo que sea un factor decisivo sobre si alguien debería usarlo o no.

Miguel
fuente
3
He usado ReiserFS durante mucho tiempo. En realidad, todavía lo estoy usando en un servidor Gentoo anterior que aún no he podido reinstalar. Esta instalación tiene 4 años este mayo. Lo que puedo decirte es que se ha ralentizado significativamente. Ese fenómeno ha tenido lugar con el tiempo en todos los sistemas de archivos que usan ReiserFS que están en uso activo de lectura + escritura en todas las máquinas que tenían dichos sistemas de archivos, sin excepciones, por lo que si desea usarlo durante un período prolongado de tiempo, es algo para mantener en mente. Me he alejado de él, usando XFS para grandes sistemas de archivos ahora.
Mihai Limbăşan
3

Sé que esta no es una respuesta directa a su pregunta, pero en estos casos creo que una base de datos podría ser más adecuada para alojar esto. Los archivos pequeños pueden almacenarse en formato binario en una tabla de base de datos y recuperarse en wil. Sin embargo, el software que está utilizando estos archivos debería ser capaz de soportar esto ...

Jeroen Landheer
fuente
1
¿Qué es un sistema de archivos, si no solo una base de datos jerárquica? Su propuesta agrega capas de abstracción, complejidad y software que probablemente no están garantizados. Además, el propietario de la pregunta está cumpliendo su tarea con 'Filosofía UNIX', que sospecho que no te gusta ser más un chico de Windows.
Stu Thompson
3
En primer lugar, no tengo nada en contra de Unix ni nada más en esa área. Existen grandes diferencias entre los sistemas de archivos y las bases de datos y es por eso que ambas tecnologías se desarrollaron. Las bases de datos están diseñadas para trabajar con una gran cantidad de pequeñas entidades, en las que hacen un mejor trabajo que la mayoría de los sistemas de archivos. Simplemente estaba señalando que podría haber otro camino que puedes tomar con esto.
Jeroen Landheer
1
Y es mucho más fácil "limpiar / aspirar" un archivo db que desfragmentar un sistema de archivos en Linux. La mayoría / todos los fs no proporcionan esa funcionalidad, lo que dice que no es necesario. Sin embargo, al observar el comentario de Mihai anterior, puedes ver que no es estrictamente cierto.
Gringo Suave
3

Alguien en el Unix StackExchange creó un punto de referencia (con fuente) para probar solo este escenario:

P: ¿Cuál es el sistema de archivos Linux de más alto rendimiento para almacenar muchos archivos pequeños (HDD, no SSD)?

El mejor rendimiento de lectura parece provenir de ReiserFS.

luegoickdude
fuente
Btrfs parece tener resultados mejores o comparables en todo menos eliminar. Pero, ¿con qué frecuencia elimina 300k archivos? Me gustaban los rfs en el pasado, pero btrfs podría ser una mejor apuesta para el futuro.
Gringo Suave
3

En mi experiencia, ext2 sopla ext4 fuera del agua para archivos pequeños. Si no te importa la integridad de la escritura, es genial. Por ejemplo, subversion crea montones y montones y montones de archivos pequeños, que ext4 y otros sistemas de archivos (XFS) se ahogan (ejecute un trabajo cron que sincronice los datos con ext4 desde ext2 cada media hora más o menos prácticamente resuelve el problema).

La ejecución de estos comandos hace que ext2 sea aún más rápido (aunque la mayoría de estas opciones hacen que el sistema de archivos sea inestable después de un bloqueo, a menos que ejecute la sincronización antes de que falle). Estos comandos casi no tienen efecto en ext4 con archivos pequeños.

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure
Jason Hall
fuente
1

Supongo que ext3 (o ext4), tal vez JFS sería una buena solución. Sería cauteloso con ext4 y btrfs (los sistemas de archivos son complicados; prepárese con copias de seguridad si desea utilizar las últimas novedades).

También hay varios parámetros que puede ajustar durante el tiempo de mkfs para ajustar el sistema de archivos a su gusto.

Sin duda lo recomendaría contra XFS. No porque sea un mal sistema de archivos, sino que la creación / eliminación es una operación costosa.


Para evitar problemas con las búsquedas en el directorio, use un esquema de nombres inteligente, por ejemplo:

<first letter of id>_<last letter of id>/<id>

o esquemas similares, más complicados. Esto acelerará sus búsquedas en el directorio y, por lo tanto, las velocidades de acceso generales. (Es un viejo truco de Unix, creo que desde V7)


fuente
1
¿Cuál es la ventaja de usar la primera y la última letra y no solo las primeras n letras?
bene
es solo uno de los posibles esquemas: si sería una ventaja depende de la "clave" utilizada para la indexación. Este esquema particular que había visto hacía referencia a la aplicación que almacenaba datos sobre las personas en la organización, y de esta manera tienen una mejor indexación. Como siempre, debe adaptarlo a sus datos y luego al perfil hasta que encuentre respuestas exactas :)
1

La mayoría de los FS se ahogarán con más de 65K archivos en un directorio, creo que eso sigue siendo cierto para ext4. Los sistemas de archivos Reiser no tienen ese límite (la gente de mp3.com pagó para asegurarse de eso). No estoy seguro de nada más, pero ese es uno de los escenarios de uso para los que se creó ReiserFS.

Ronald Pottol
fuente
1
Es ReiserFS, no RieserFS
Daniel Rikowski
Este fin de semana tuve un directorio en ext4 con 1000000 archivos. Siempre que no lo haga lso complete la pestaña, funcionará rápidamente. Probablemente debido al índice.
Ole Tange
ext4 tiene una extensión dir_index, que acelera muchos archivos en un directorio.
alfonx