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.
la source
Réponses:
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.
la source
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."Système de fichiers le plus rapide? tmpfs monté hors de la RAM disponible, avec
noatime
set.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
la source
À la réponse de Michael Dillon, je peux ajouter que vous pouvez créer un système de fichiers ext4 avec quelques options:
-i 8096 vous donne plus d'inodes par taille, utile car les environnements de construction créent beaucoup de fichiers.
la source
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).
la source
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:
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.
noatime
aide à 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.
la source
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.
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
la source