Puis-je accélérer la fourche de cygwin?

15

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.

Andrew Aylett
la source
1
Cygwin sera toujours lent, plus lent. Même VirtualBox / VMWare donnerait des performances plus rapides, ou si vous avez besoin d'un environnement de développement, optez pour msys. Mais cela ... je ne sais pas ... n'a jamais vraiment trouvé cygwin utilisable.
Apache
+1 pour le repère de fourche agréable et simple! Je viens de l'exécuter sur un VPS Linux à 5 $ / mois pour comparer avec mon ordinateur portable Windows i7, et le VPS a obtenu un score 30 fois plus élevé.
Mark K Cowan

Réponses:

2

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

while (true); do /bin/date --utc; done | uniq -c

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.

user23307
la source
1
Malheureusement, le codage en dur des chemins ne fait aucune différence appréciable. strace fonctionne dans Cygwin, mais rien ne me saute aux yeux lorsque je regarde la trace.
Andrew Aylett
1

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 Linux

msys2bash-windows-box$ time { date; }
Sa, 24. Feb 2018 16:51:44

real    0m0,046s
user    0m0,000s
sys     0m0,000s

msys2bash-windows-box$ while (true); do /bin/date --utc; done | uniq -c
     13 Sa, 24. Feb 2018 15:57:18
     17 Sa, 24. Feb 2018 15:57:19
     16 Sa, 24. Feb 2018 15:57:20


bash-linux-box$ time { date; }
Sat Feb 24 15:51:54 UTC 2018

real    0m0.002s
user    0m0.000s
sys     0m0.000s

bash-linux-box$ while (true); do date --utc; done | uniq -c
    211 Sat Feb 24 15:56:35 UTC 2018
    286 Sat Feb 24 15:56:36 UTC 2018
    260 Sat Feb 24 15:56:37 UTC 2018

L'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.

luxifer
la source
0

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?

mpez0
la source
@ mpez0: Veuillez voir ma justification mise à jour. Pour répondre spécifiquement à vos questions, ma base pour dire qu'ils étaient plus lents est qu'ils étaient d'une architecture plus ancienne avec une vitesse d'horloge plus lente, moins (et plus lentement) de RAM et un disque plus ancien et plus lent, mais toujours XP. Linux sera presque toujours plus rapide à bifurquer, car il utilise un modèle de bifurcation dans le noyau, contrairement à Windows. J'ai un P3 qui marque ~ 60 sur cette référence :).
Andrew Aylett