Je suis tombé sur un article discutant de la vitesse de bifurcation dans Cygwin, donnant un `` taux de fourchette '' attendu dans Windows XP d'environ 30 à 50 par seconde ( lien )
J'ai un duo Core 2 (1,79 GHz) dont je m'attendrais à obtenir des résultats comparables, mais il ne gère qu'environ 8 fourches par seconde (et parfois beaucoup moins):
$ while (true); do date --utc; done | uniq -c
5 Wed Apr 21 12:38:10 UTC 2010
6 Wed Apr 21 12:38:11 UTC 2010
1 Wed Apr 21 12:38:12 UTC 2010
1 Wed Apr 21 12:38:13 UTC 2010
8 Wed Apr 21 12:38:14 UTC 2010
8 Wed Apr 21 12:38:15 UTC 2010
6 Wed Apr 21 12:38:16 UTC 2010
1 Wed Apr 21 12:38:18 UTC 2010
9 Wed Apr 21 12:38:19 UTC 2010
Pouvez-vous suggérer quelque chose que je pourrais faire pour accélérer les choses? Cette machine agit beaucoup plus lentement dans Cygwin que d'autres que j'ai utilisées auparavant qui étaient en réalité beaucoup plus lentes.
Mise à jour
Permettez-moi de justifier ma question: je ne pense pas qu'avoir un fork plus rapide rendra ma vie plus magique, mais je pense que cette référence est un bon proxy pour les problèmes de performances que je vois dans bash en raison de l'utilisation normale d'exécutables externes pour calculer les valeurs. Je trouve que j'obtiens une accélération notable sur Cygwin en parcourant mes scripts de démarrage de shell et bash-complétion et en essayant de remplacer les commandes externes par des commandes internes; sous Linux, ce n'est pas un problème. Souvent, cependant, ce n'est pas possible, et mon PC prend actuellement environ 14 secondes pour démarrer un shell avec un cache chaud et sans charge.
Réponses:
Cela n'a rien à voir avec la lenteur de la fourche.
J'ai vu cygwin exécuter chien lentement lorsque le répertoire "home" de Windows était sur un lecteur réseau. Chaque commande recherchait des binaires ralentissant considérablement les choses.
voir si
est plus rapide, si c'est le cas, c'est probablement votre problème
sinon essayez d'exécuter bash via strace / ltrace (s'ils fonctionnent même sur cygwin) et voyez ce qu'il fait quand il faut 1 seconde pour exécuter la date.
la source
J'ai bien peur que vous ne puissiez rien y faire.
Windows n'a pas d'
fork()
appel système natif , Cygwin doit donc l'émuler. L'implémentation de cette émulation est cependant très inefficace. (Voir FAQ Cygwin )MSYS2, qui est souvent utilisé dans des applications où l'on veut un environnement de ligne de commande similaire à Linux sur Windows, est basé sur Cygwin, c'est pourquoi il est également affecté par cela.
C'est en fait si mauvais, que
fork()
sur Windows est au moins un ordre de grandeur plus lent que sur LinuxL'exemple ci-dessus montre la différence entre un boîtier i5-2500k @ 4GHz, 32 Go de RAM Windows 10 Pro et un VPS RAM monocœur faible de 1 Go.
la source
Vous ne voyez pas de fourches; vous voyez fork, exec, appel système pour lire l'heure du jour, formater et convertir la sortie. Sans parler de quoi que ce soit d'autre est le partage de temps en parallèle.
Sur quelle base dites-vous que les autres machines " étaient en fait plus lentes"? Il y a beaucoup de choses qui contribuent à la vitesse réelle d'un ordinateur et à la perception par l'utilisateur de la vitesse de l'ordinateur. Quel genre de choses faites-vous où les fourchettes / sec sont une bonne mesure des performances? Quelle est la vitesse, l'architecture et la quantité de mémoire? Vitesse d'E / S du disque et mise en mémoire tampon?
Selon vous, lequel fera le plus de fourches / sec: un Core i7 exécutant Vista avec 512 Mo de RAM ou un Celeron exécutant un Linux minimal avec 2 Go?
la source