Kann ich Cygwins Gabel beschleunigen?

15

Ich bin auf einen Beitrag gestoßen, in dem die Geschwindigkeit des Gabelns in Cygwin erörtert wurde und in Windows XP eine erwartete Verzweigungsrate von etwa 30-50 pro Sekunde angegeben wurde ( Link ).

Ich habe ein Core 2-Duo (1,79 GHz), mit dem ich vergleichbare Ergebnisse erwarten würde, aber es schafft nur etwa 8 Gabeln pro Sekunde (und manchmal viel weniger):

$ 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

Können Sie mir irgendetwas vorschlagen, was ich möglicherweise tun kann, um die Dinge zu beschleunigen? Diese Maschine wirkt viel langsamer in Cygwin als andere , die ich verwendet habe , bevor die eigentlich waren viel langsamer.

Aktualisieren

Lassen Sie mich meine Frage begründen: Ich glaube nicht, dass eine schnellere Gabel mein Leben auf magische Weise verbessern wird, aber ich glaube, dass dieser Benchmark ein guter Indikator für die Leistungsprobleme ist, die ich aufgrund der normalen Verwendung externer ausführbarer Dateien in Bash sehe Werte berechnen. Ich stelle fest, dass ich Cygwin spürbar beschleunige, indem ich meine Shell-Startskripte und die Bash-Vervollständigung durcharbeite und versuche, externe Befehle durch interne zu ersetzen. Unter Linux ist dies kein Problem. Häufig ist dies jedoch nicht möglich, und mein PC benötigt derzeit ca. 14 Sekunden, um eine Shell mit einem warmen Cache und ohne Last zu starten.

Andrew Aylett
quelle
1
Cygwin wird immer langsam und langsamer sein. Selbst VirtualBox / VMWare bietet eine schnellere Leistung. Wenn Sie eine Entwicklungsumgebung benötigen, entscheiden Sie sich für msys. Aber das ... weiß nicht ... fand cygwin nie wirklich brauchbar.
Apache
+1 für den schönen, einfachen Gabelbenchmark! Lief dies nur auf einem Linux-VPS mit 5 $ / Monat, um es mit meinem i7-Windows-Laptop zu vergleichen, und der VPS erzielte eine 30-mal höhere Punktzahl.
Mark K Cowan

Antworten:

2

Das hat nichts damit zu tun, dass die Gabel langsam ist.

Ich habe gesehen, wie Cygwin Hund langsam ausgeführt hat, als sich das Windows-Ausgangsverzeichnis auf einem Netzlaufwerk befand. Jeder einzelne Befehl würde dort nach Binaries suchen, die die Dinge enorm verlangsamen.

sehen ob

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

ist schneller, wenn ja, ist das wohl dein problem

Andernfalls versuchen Sie, bash über strace / ltrace auszuführen (wenn sie sogar auf cygwin arbeiten) und sehen, was es tut, wenn es 1 Sekunde dauert, um das Datum auszuführen.

user23307
quelle
1
Leider macht die harte Kodierung der Pfade keinen nennenswerten Unterschied. strace funktioniert in Cygwin, aber es springt mir nichts heraus, wenn ich mir die Spur ansehe.
Andrew Aylett
1

Ich fürchte, Sie können nicht viel dagegen tun.

Windows hat keinen fork()systemeigenen Systemaufruf, daher muss Cygwin diesen emulieren. Die Implementierung dieser Emulation ist jedoch sehr ineffizient. (Siehe Cygwin FAQ )

MSYS2, das häufig in Anwendungen verwendet wird, in denen eine Linux-ähnliche Befehlszeilenumgebung mit möglicherweise vollem Funktionsumfang unter Windows gewünscht wird, basiert auf Cygwin, weshalb es auch davon betroffen ist.

Eigentlich ist es so schlimm, dass a fork()unter Windows mindestens eine Größenordnung langsamer ist als unter 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

Das obige Beispiel zeigt den Unterschied zwischen einer i5-2500k @ 4GHz, 32GiB RAM Windows 10 Pro Box und einer schwachen 1GiB RAM VPS mit einem Kern

luxifer
quelle
0

Sie sehen keine Gabeln; Sie sehen Fork, Exec, Systemaufruf zum Lesen der Uhrzeit, Formatieren und Konvertieren der Ausgabe. Ganz zu schweigen von der parallelen Zeitteilung.

Auf welcher Grundlage sagen Sie die anderen Maschinen „eigentlich waren langsamer“? Es gibt viele Faktoren, die zur tatsächlichen Geschwindigkeit eines Computers und zur Wahrnehmung der Computergeschwindigkeit durch den Benutzer beitragen. Was machst du da, wo Gabeln / Sek. Ein gutes Maß für die Leistung sind? Was ist die Speichergeschwindigkeit, Architektur und Menge? Disk I / O Geschwindigkeit und Pufferung?

Was wird Ihrer Meinung nach mehr Gabeln / Sek. Bewirken? Ein Core i7 mit Vista mit 512 MB RAM oder ein Celeron mit einem minimalen Linux mit 2 GB?

mpez0
quelle
@ mpez0: Bitte beachte meine aktualisierte Begründung. Um Ihre Fragen konkret zu beantworten, meine Grundlage für die Aussage, dass sie langsamer waren, ist, dass sie eine ältere Architektur mit einer langsameren Taktrate, weniger (und langsamerem) RAM und einer älteren, langsameren Festplatte, aber immer noch XP, hatten. Linux wird beim Forken fast immer schneller sein, da es ein Forking-Modell im Kernel verwendet, bei dem Windows dies nicht tut. Ich habe einen P3, der auf diesem Benchmark ~ 60 Punkte erzielt :).
Andrew Aylett