it-swarm-es.com

sistema de archivos para millones de archivos pequeños

¿Para qué sistema de archivos de Linux elegirías 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?

44
bene

Aquí hay algunos resultados que comparan todos los FSes principales 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.

20
Andrew Cholakian

Estoy de acuerdo con la mayoría de lo que dijo Andrew, excepto que recomendaría Reiser4 o el anterior (pero mejor compatible) ReiserFS . Como indican esas pruebas (y la documentación para ReiserFS), está diseñado para la situación sobre la que está preguntando (grandes cantidades de archivos pequeños o directorios). 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.

8
Mike

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

4
Jeroen Landheer

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.

3
thenickdude

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
3
Jason Hall

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 recomendaría en 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)

1
p_l

La mayoría FS se ahogará 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 en mp3.com pagó para hacer seguro de eso) No estoy seguro de nada más, pero ese es uno de los escenarios de uso para los que se creó ReiserFS.

1
Ronald Pottol