Quel est le système de fichiers le plus rapide pour les versions développeur?

10

Je mets en place une boîte Linux qui agira comme un serveur de build d'intégration continue; nous allons principalement construire des trucs Java, mais je pense que cette question s'applique à tout langage compilé.

Quels paramètres de système de fichiers et de configuration dois-je utiliser? (Par exemple, je sais que je n'aurai pas besoin de temps pour cela!) Le serveur de génération passera beaucoup de temps à lire et à écrire de petits fichiers et à analyser les répertoires pour voir quels fichiers ont été modifiés.

MISE À JOUR: L'intégrité des données est une priorité faible dans ce cas; c'est juste une machine de construction ... les artefacts finaux seront zippés et archivés ailleurs. Si le système de fichiers sur la machine de construction est corrompu et perd toutes les données, nous pouvons simplement effacer et recréer une image; les builds continueront de fonctionner comme avant.

Dan Fabulich
la source
Dupe possible? serverfault.com/questions/29193/…
gravyface
Lisez le lien que gravyface a donné, mais assurez-vous également de mettre de côté la partition dans laquelle vous allez faire vos builds, vous pouvez ensuite tester les réponses que vous obtenez ici. Si vous avez de l'argent, voyez si vous pouvez renoncer à utiliser des disques (à l'aide d'un ramdisk ou de tmpfs cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem )
devenant le

Réponses:

6

Utilisez ext4fs comme système de fichiers de base avec quelques options d'accélération comme

noatime,data=writeback,nobh,barrier=0,commit=300

Ensuite, montez un ramdisk tmpfs sur l'union pour que les fichiers écrits pendant les builds bénéficient des avantages du ramdisk. Modifiez la procédure de génération pour déplacer les fichiers binaires résultants hors des tmpfs à la fin de la génération, ou fusionnez les tmpfs dans ext4fs avant de les démonter.

Michael Dillon
la source
Bien qu'il soit plus rapide, il convient de noter:, barrier=0À partir du wiki de l'archive: "La désactivation des barrières lorsque les disques ne peuvent pas garantir que les caches sont correctement écrits en cas de panne de courant peut entraîner une corruption grave du système de fichiers et une perte de données."
ideasman42
6

Système de fichiers le plus rapide? tmpfs monté hors de la RAM disponible, avec noatimeset.

Cela n'est viable que si vous avez une procédure pour vérifier tout ce qui est nécessaire pour construire votre arborescence source (puisque le contenu d'un système de fichiers tmpfs disparaîtra au redémarrage), et si la source et les objets s'insèrent dans un coin raisonnable de votre RAM disponible ( avec assez de reste pour exécuter votre compilateur et l'éditeur de liens sans échange). Cela dit, vous ne pouvez pas battre le travail sur RAM pour la vitesse

voretaq7
la source
C'est une excellente réponse, mais pas tout à fait celle que je recherche; c'est plus de RAM que je ne peux me le permettre. (Peut-être dans quelques années, lorsque la RAM
coûtera
@Dan - Quelle est la taille de votre arbre source? :-)
voretaq7
L'arbre source n'est pas si énorme, mais les objets construits et les fichiers de test sont trop volumineux pour tenir en mémoire sans échange.
Dan Fabulich
2

À la réponse de Michael Dillon, je peux ajouter que vous pouvez créer un système de fichiers ext4 avec quelques options:

mkfs.ext4 -O dir_index,extent -i 8096 /dev/<disk>


dir_index
    Use hashed b-trees to speed up lookups in large directories.

extent 
    Instead of using the indirect block scheme for storing the location of data blocks in an inode, use extents instead.  This is a  much  more  efficient  encoding  which  speeds  up filesystem access, especially for large files.

-i 8096 vous donne plus d'inodes par taille, utile car les environnements de construction créent beaucoup de fichiers.

initié
la source
0

Pour les sources, il serait préférable d'avoir un support de compression à la volée, qui est Reiser4 ou Btrfs . Les deux ne sont "pas encore destinés à la production", bien que j'aie entendu parler de personnes utilisant les deux FS de manière intensive et heureuse. :-)

Le choix suivant (je le fais habituellement) est Reiser3 , pas Ext3 . Ext3 peut être un peu plus rapide de nos jours, mais Reiser3 n'a pas de limite de temps de format pour les nœuds i, prend en charge le changement en ligne de l'option "data =". Il a un support "queue" permettant un compactage des fichiers plus serré, mais si vous êtes préoccupé par la vitesse, "notail".

Les deux XFS et JFS seraient une douleur pour le cas "beaucoup de petits fichiers", surtout si vous avez besoin de les rm'ing.

(Oublié de mentionner EXT4: Oui, c'est encore plus rapide que EXT3. Mais toutes les limitations d'EXT3 mentionnées ci-dessus sont aussi d'EXT4).

poige
la source
0

Les opérations que vous décrivez donnent quelques indications clés sur ce que le système de fichiers idéal doit être capable de faire:

  • Accès r / w massivement aléatoires pendant le processus de construction.
  • De très nombreux fichiers sont mis à jour en peu de temps, des opérations de métadonnées rapides sont donc essentielles.
  • Gestion efficace de nombreux petits fichiers sur des systèmes de fichiers très volumineux.
  • Suffisamment mûr pour ne pas risquer de perdre des données dans des cas marginaux peu fréquents et obscurs.

Btrfs et Ext4 sont trois des précédents, et le quatrième est discutable. Ext4 est probablement suffisamment mature pour cela, mais btrfs n'a pas encore terminé la cuisson. noatimeaide à rendre les opérations de métadonnées plus efficaces, mais lorsque vous créez un tas de nouveaux fichiers, vous avez toujours besoin d'opérations de métadonnées pour être extrêmement rapides.

C'est à ce moment que le stockage sous-jacent devient un facteur. Les opérations de métadonnées XFS ont tendance à se concentrer sur quelques blocs, ce qui peut entraver les opérations. Les systèmes de fichiers de style Ext sont plus efficaces pour rapprocher les métadonnées des données qu'elles décrivent. Cependant, si votre stockage est suffisamment abstrait (vous exécutez dans un VPS ou attaché à un SAN), cela n'a pas d'importance .

Chaque système de fichiers a peu d'accélérations qui peuvent être faites pour gagner quelques points de pourcentage supplémentaires. La performance du stockage sous-jacent aura un impact considérable sur le gain que vous verrez.

Dans le langage du stockage, si vous avez suffisamment de surcharge d'opérations d'E / S dans votre stockage, les inefficacités du système de fichiers commencent à ne plus avoir autant d'importance. Si vous utilisez un SSD pour votre partition de build, le choix du système de fichiers est moins important que celui avec lequel vous êtes plus à l'aise de travailler.

sysadmin1138
la source
En fait, je ne me soucie pas beaucoup de la perte de données. (Mise à jour de la question pour clarifier.) Je veux dire, la perte de données n'est pas une bonne chose, mais je ne stocke pas de données critiques; Je traite de nombreux fichiers et déplace les données ailleurs. Si je pouvais me permettre la RAM, j'utiliserais simplement tmpfs comme voretaq7 recommandé ci-dessus.
Dan Fabulich
0

Pour beaucoup de petits fichiers, je recommanderais Reiser à ext3, xfs, jfs ..., bien que j'aie entendu dire que ext4 est beaucoup mieux (c'est-à-dire à l'opposé de ce que dit Poise) que ses incarnations précédentes pour ce modèle d'accès.

Reiser pousse une grande partie de la structure des fichiers dans l'arborescence des inodes - donc cela fonctionne très bien quand il s'agit de petits fichiers.

Cependant, les différences de comportement entre les principaux systèmes de fichiers sont relativement faibles par rapport aux avantages que vous obtiendrez en ayant suffisamment de mémoire physique pour mettre en cache / tampon efficacement.

et l'analyse des répertoires pour voir quels fichiers ont été modifiés.

C'est une façon merdique de résoudre le problème - même si c'est relativement simple. Si c'est si important, pensez à écrire un gestionnaire inotify pour indexer les mods.

OTOH, si vous utilisez un SSD flash (qui vous donnera des temps de recherche très bas), je recommanderais d'utiliser un fs qui distribue l'écriture plus efficacement pour des raisons de longévité - par exemple JFFS2

symcbean
la source