149 votes

Comment puis-je obtenir Windows d’aller aussi vite que Linux pour la compilation C++ ?

Je sais que ce n'est pas tellement une question de programmation, mais c'est pertinent.

Je travaille sur une assez grande croix au projet de plate-forme. Sur Windows j'utilise VC++ 2008. Sur Linux, j'utilise gcc. Il y a environ 40k fichiers dans le projet. Windows est de 10x à 40x plus lent que Linux à la compilation et la liaison d'un même projet. Comment puis-je régler ce problème?

Un seul changement incrémental construire 20 secondes sur Linux et > 3 minutes sur Windows. Pourquoi? Je peux même installer le " or " de l'éditeur de liens dans Linux et d'obtenir que le temps de 7 secondes.

De même git est de 10x à 40x plus rapide sous Linux que Windows.

Dans le git cas, il est possible de git n'est pas à l'aide de Windows de façon optimale, mais VC++? Vous pensez que Microsoft aurait envie de faire leurs propres développeurs aussi productif que possible, et une compilation plus rapide serait aller un long chemin vers que. Peut-être qu'ils essaient d'encourager les développeurs en C#?

Comme test simple, trouver un dossier avec beaucoup de sous-dossiers et de faire une simple

dir /s > c:\list.txt

sur Windows. Le faire deux fois et le temps de la seconde manche de sorte qu'il s'exécute à partir du cache. Copiez les fichiers de Linux et ne l'équivalent de 2 pistes et le temps de la seconde manche.

ls -R > /tmp/list.txt

J'ai 2 postes de travail avec exactement les mêmes caractéristiques. HP Z600s avec 12gig de ram, 8 cœurs à 3.0 ghz. Sur un dossier avec ~400k de fichiers Windows prend 40seconds, Linux prend moins de 1 seconde.

Est-il un paramètre de registre, je peux mettre pour accélérer Windows? Ce qui donne?

32voto

Noufal Ibrahim Points 32200

À moins d'un hardcore systèmes Windows hacker vient le long, vous n'allez pas pour obtenir plus de commentaires partisans (dont je ne vais pas le faire) et de la spéculation (qui est ce que je vais essayer).

  1. Le système de fichiers, Vous devriez essayer les mêmes opérations (y compris l' dir) sur le même système de fichiers. Je suis tombé sur ce qui les repères quelques systèmes de fichiers pour les différents paramètres.

  2. La mise en cache. Une fois, j'ai essayé d'exécuter une compilation sous Linux sur un disque RAM et trouvé que c'était plus lent que de courir sur le disque grâce à la manière dont le noyau prend en charge la mise en cache. C'est un solide point de vente pour Linux et peut-être la raison pour laquelle le rendement est donc différent.

  3. Mauvais dépendance spécifications sur Windows. Peut-être que le chrome dépendance spécifications pour Windows ne sont pas correctes pour Linux. Cela peut entraîner des compilations lorsque vous faites un petit changement. Vous pourriez être en mesure de confirmer cela avec le même compilateur chaîne de compilation sous Windows.

31voto

RickNZ Points 12053

Quelques idées:

  1. Désactiver 8.3 noms. Cela peut être un grand facteur sur les lecteurs avec un grand nombre de fichiers et un relativement petit nombre de dossiers: fsutil behavior set disable8dot3 1
  2. Utiliser plus de dossiers. Dans mon expérience, NTFS commence à ralentir de plus de 1000 fichiers par dossier.
  3. Permettre des constructions parallèles avec MSBuild; il suffit d'ajouter le "/m" de l'interrupteur, et il sera automatiquement commencer une copie de MSBuild par cœur de PROCESSEUR.
  4. Placer vos fichiers sur un disque SSD -- aide énormément pour aléatoire I/O.
  5. Si votre taille de fichier moyenne est de beaucoup supérieure à 4 KO, envisager la reconstruction du système de fichiers avec une taille de cluster plus importante qui correspond à peu près à la moyenne de la taille du fichier.
  6. Assurez-vous que les fichiers ont été défragmenté. Fichiers fragmentés causer beaucoup de recherches disque, qui peut vous coûter un facteur de 40+ débit. Utiliser le "contig" utilitaire de sysinternals, ou intégré dans le défragmenteur de Windows.
  7. Si votre moyenne de la taille du fichier est de petite taille, et la partition que vous êtes sur les est relativement complet, il est possible que vous êtes en cours d'exécution avec une fragmenté MFT, ce qui est mauvais pour la performance. Aussi, les fichiers plus petits que 1K sont stockées directement dans la MFT. Le "contig" utilitaire mentionné ci-dessus peut vous aider, ou vous pouvez avoir à augmenter la taille du MFT. La commande suivante va doubler, à 25% du volume: fsutil behavior set mftzone 2 Modifier le dernier numéro à 3 ou 4 pour augmenter la taille supplémentaire de 12,5% par incréments. Après l'exécution de la commande, le redémarrage, puis créez le système de fichiers.
  8. Désactiver l'heure du dernier accès: fsutil behavior set disablelastaccess 1
  9. Désactiver le service d'indexation
  10. Désactiver votre anti-virus et anti-logiciels espions, ou tout au moins à la les dossiers pertinents pour être ignoré.
  11. Placer vos fichiers sur un autre disque physique à partir de l'OS et le fichier de pagination. À l'aide d'un lecteur physique distinct permet à Windows d'utiliser en parallèle d'e/s pour les deux disques.
  12. Jetez un oeil à vos options de compilation. Le Windows compilateur C++ a une tonne d'options, assurez-vous que vous êtes seulement en utilisant ceux que vous avez vraiment besoin.
  13. Essayez d'augmenter la quantité de mémoire utilisée par le système d'exploitation utilise pour paginée du pool de mémoires tampons (assurez-vous que vous avez suffisamment de RAM en premier): fsutil behavior set memoryusage 2
  14. Vérifier l'erreur Windows journal assurez-vous que vous n'avez pas occasionnellement des erreurs de disque.
  15. Jetez un oeil à Disque Physique des compteurs de performance liés à voir comment occupé votre disques. Haute longueurs de file d'attente ou le temps long par transfert sont de mauvais signes.
  16. Le premier 30% de partitions de disque est beaucoup plus rapide que le reste du disque en termes de matières premières, le temps de transfert. Plus étroite des partitions aussi aider à réduire les temps de recherche.
  17. Êtes-vous à l'aide de RAID? Si oui, vous pourriez avoir besoin pour optimiser votre choix de type de RAID (RAID-5 est mauvais pour écrire lourds opérations comme la compilation)
  18. Désactivez tous les services que vous n'avez pas besoin
  19. Défragmenter dossiers: copier tous les fichiers sur un autre disque (seulement les fichiers), supprimer les fichiers d'origine, copiez tous les dossiers sur un autre disque (juste les dossiers vides), supprimez les dossiers d'origine, de défragmenter le disque dur d'origine, copiez le dossier de la structure arrière en premier, puis copier les fichiers. Lorsque Windows s'appuie dossiers volumineux qu'un fichier à la fois, les dossiers finissent par être fragmenté et lent. ("contig" devrait aider à ici aussi)
  20. Si vous êtes dépendant des e/S et ont des cycles PROCESSEUR de rechange, essayez de désactiver la compression de disque. Il peut fournir certains des accélérations significatives pour les fichiers fortement compressibles (comme le code source), avec un coût de la CPU.

25voto

Agent_L Points 1583

NTFS enregistre chaque fois que temps d’accès du fichier. Vous pouvez essayez de le désactiver : « fsutil behavior set disablelastaccess 1 » (redémarrer)

17voto

bfrog Points 256

Personnellement, j’ai trouvé une machine virtuelle de windows sur linux a réussi à enlever une grande partie de la lenteur d’e/s dans windows, probables parce que la machine virtuelle linux faisait beaucoup de mise en cache que Windows lui-même n’était pas en cours d’exécution.

Faisant que j’ai pu accélérer les temps de compilation d’un projet C++ de grand (250Kloc) je travaillais sur de quelque chose comme 15 minutes à environ 6 minutes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X