web-dev-qa-db-fra.com

Système de fichiers pour des millions de petits fichiers

Quel système de fichiers Linux choisiriez-vous meilleure vitesse dans le scénario suivant:

  • cent millions de fichiers
  • ~ Taille de fichier 2K en moyenne
  • > 95% lire l'accès
  • un accès assez aléatoire
  • concurrence élevée (> 100 procédés)

Remarque: Les fichiers sont stockés dans un arbre hiérarchique profond pour éviter les grands répertoires. Chaque répertoire de feuille contient environ mille fichiers.

Comment allez-vous le comparer?

44
bene

Voici quelques-uns résultats comparant tous les principaux FSE Linux avec Bonnie ++ que vous pouvez utiliser comme point de départ.

En termes de recherche aléatoire, les victoires, suivies de EXT4, suivies de JFS. Je ne sais pas si cela corrélera exactement les recherches d'annuaire, mais cela semble être un indicateur. Vous devrez faire vos propres tests pour cela spécifiquement. EXT2 bat le pantalon de tout pour les temps de création de fichiers, probablement en raison de son manque de journal, toujours EXT4 bat tout, sauf Reiser que vous ne voudrez peut-être pas utiliser en raison du statut actuel de Hans Reiser.

Vous voudrez peut-être examiner les entraînements prenant en charge la NCQ et assurez-vous que votre installation est configurée pour l'utiliser. Sous Heavy Cherchant, il devrait fournir une augmentation de la vitesse.

Enfin, assurez-vous que votre machine a une tonne de RAM. Étant donné que les fichiers ne sont pas souvent mis à jour, Linux finira par mettre en cache la plupart d'entre eux vers la RAM si elle a un espace libre. Si vos habitudes d'utilisation ont raison, cela vous donnera une augmentation de la vitesse massive.

20

Je suis d'accord avec la majeure partie de ce que Andrew a dit, sauf que je recommanderais reiser4 ou le plus ancien (mais mieux soutenu) reiserfs . Comme ces tests (et la documentation pour REISERFS) indiquent, il est conçu pour préciser la situation que vous posez sur (grand nombre de petits fichiers ou répertoires). J'ai utilisé Reiserfs dans le passé avec Gentoo et Ubuntu sans aucun problème.

En ce qui concerne le statut de Hans Reiser, je ne le vois pas comme un problème avec le code ou la stabilité du système de fichiers lui-même. Reiser4 est même sponsorisé par Darpa et Linspire, alors que je conviens que le développement du système de fichiers Reiser est indéterminé, je ne suis pas une chose qui devrait être un facteur déterminant quant à savoir si quelqu'un doit l'utiliser ou non.

8
Mike

Je sais que ce n'est pas une réponse directe à votre question, mais dans ces cas, je pense qu'une base de données pourrait être plus appropriée pour l'organiser. Les petits fichiers peuvent être stockés au format binaire dans une table de base de données et récupérés à Wil. Le logiciel qui utilise ces fichiers devrait pouvoir supporter cela ...

4
Jeroen Landheer

Quelqu'un sur l'Unix Stackexchange a créé une référence (avec source) pour tester ce scénario:

Q: Quel est le système de fichiers Linux le plus performant pour stocker de nombreux petits fichiers (HDD, NON SSD)?

Les meilleures performances de lecture semblent provenir de Reiserfs.

3
thenickdude

Dans mon expérience, EXT2 souffle ext4 hors de l'eau pour de petits fichiers. Si vous ne vous souciez pas de l'intégrité de l'écriture, c'est génial. Par exemple, Subversion crée des lots et des lots et de nombreux petits fichiers, que Ext4 et d'autres systèmes de fichiers (XFS) s'étouffent (exécutez un travail cron qui rsyncs sur EXT4 à partir de EXT2 toutes les demi-heures ou de résolution de manière virtuelle.)

Exécuter ces commandes rendent EXT2 encore plus rapidement (même si la plupart de ces options rendent le système de fichiers instable après un crash, sauf si vous exécutez Sync avant qu'il ne se bloque). Ces commandes n'ont presque aucun effet sur EXT4 avec de petits fichiers.

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

Je suppose que EXT3 (ou EXT4), peut-être que JFS serait une bonne solution. Je me méfierais avec EXT4 et BTRFS (les systèmes de fichiers sont difficiles - préparez-vous avec des sauvegardes si vous souhaitez utiliser la dernière chose la plus récente).

Il existe également divers paramètres que vous pouvez modifier pendant le temps MKFS pour régler le système de fichiers à votre goût.

Je recommanderais certainement contre XFS. Pas parce que c'est un mauvais système de fichiers, mais la création/la suppression est une opération coûteuse.


Pour éviter les problèmes des recherches de répertoire, utilisez un schéma de dénomination intelligent, par exemple:

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

ou des systèmes similaires et plus compliqués. Cela accélérera vos recherches de répertoire et ainsi des vitesses d'accès globales. (C'est une ancienne astuce Unix, de retour de v7 je pense)

1
p_l

La plupart FS = Je vais s'étouffer avec plus de 65 000 fichiers dans un dir, je pense que c'est toujours vrai de EXT4. Les systèmes de fichiers Reiser n'ont pas cette limite (les personnes à mp3.com payées pour faire sûr de cela). Je ne suis pas sûr de quoi que ce soit d'autre, mais c'est l'un des scénarios d'utilisation que REISERFS a été faite.

1
Ronald Pottol