Posso accelerare la forcella di Cygwin?


15

Mi sono imbattuto in un post che parlava della velocità di biforcazione in Cygwin, fornendo un "fork rate" atteso in Windows XP di circa 30-50 al secondo ( link )

Ho un duo Core 2 (1,79 GHz) che mi aspetterei di ottenere risultati comparabili, ma gestisce solo circa 8 fork al secondo (e talvolta molto meno):

$ 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

Puoi suggerire qualcosa che potrei essere in grado di fare per accelerare le cose? Questa macchina agisce molto più lentamente in Cygwin rispetto ad altre che ho usato prima che in realtà erano molto più lente.

Aggiornare

Consentitemi di giustificare la mia domanda: non credo che avere un fork più veloce possa magicamente migliorare la mia vita, ma credo che questo benchmark sia un buon proxy per i problemi di prestazioni che sto vedendo in bash a causa del normale uso di eseguibili esterni per calcolare i valori. Trovo di ottenere una notevole accelerazione su Cygwin passando attraverso gli script di avvio della shell e il completamento della bash e cercando di sostituire i comandi esterni con quelli interni; su Linux questo non è un problema. Spesso, tuttavia, ciò non è possibile e il mio PC impiega attualmente ~ 14 secondi per avviare una shell con una cache calda e senza carico.


1
Cygwin sarà sempre lento, più lento. Anche VirtualBox / VMWare darebbe prestazioni più veloci, o se hai bisogno di un ambiente di sviluppo, vai con msys. Ma questo ... non lo so ... non ho mai trovato Cygwin utilizzabile.
Shiki,

+1 per il benchmark piacevole e semplice della forcella! Ho appena eseguito questo su un VPS Linux da 5 $ / mese per confrontarlo con il mio laptop Windows i7 e il VPS ha ottenuto un punteggio 30 volte maggiore.
Mark K Cowan,

Risposte:


2

Questo non ha nulla a che fare con il fork che è lento.

Ho visto cygwin eseguire il cane lentamente quando la directory "home" di Windows si trovava su un'unità di rete. Ogni singolo comando cercherebbe lì binari che rallentano enormemente le cose.

Vedi se

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

è più veloce, se è così, questo è probabilmente il tuo problema

altrimenti prova a eseguire bash tramite strace / ltrace (se funzionano anche su cygwin) e vedi cosa sta facendo quando ci vuole 1 secondo per eseguire date.


1
Sfortunatamente, codificare i percorsi non fa alcuna differenza apprezzabile. strace funziona in Cygwin, ma nulla mi salta fuori quando guardo la traccia.
Andrew Aylett,

1

Temo che non ci sia molto da fare al riguardo.

Windows non ha un fork()syscall nativo, quindi Cygwin deve emularlo. L'implementazione di questa emulazione è tuttavia molto inefficiente. (Vedi le domande frequenti su Cygwin )

MSYS2, che viene spesso utilizzato in applicazioni in cui si desidera un ambiente da riga di comando simile a Linux probabilmente completo su Windows, si basa su Cygwin, motivo per cui ne è anche influenzato.

In realtà è così male che a fork()su Windows è almeno un ordine di grandezza più lento rispetto a 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'esempio sopra mostra la differenza tra un box Windows 10 Pro i5-2500k @ 4GHz, 32GiB RAM e un debole VPS 1GiB RAM 1 core


0

Non vedi forchette; stai vedendo fork, exec, chiamata di sistema per leggere l'ora del giorno, formattare e convertire l'output. Per non parlare di qualsiasi altra cosa sia la condivisione del tempo in parallelo.

Su quale base dici che le altre macchine " erano effettivamente più lente"? Ci sono molte cose che contribuiscono alla velocità effettiva di un computer e alla percezione dell'utente della velocità del computer. Che tipo di cose stai facendo dove le forcelle / sec sono una buona misura delle prestazioni? Qual è la velocità, l'architettura e la quantità di memoria? Velocità I / O e buffering del disco?

Quale pensi che farà più fork / sec: un Core i7 con Vista con 512 MB di RAM o un Celeron con un Linux minimo con 2 GB?


@ mpez0: consulta la mia giustificazione aggiornata. Per rispondere in modo specifico alle tue domande, la mia base per dire che erano più lenti è che avevano un'architettura più vecchia con una velocità di clock più lenta, meno (e più lenta) RAM e un disco più vecchio e più lento, ma comunque XP. Linux sarà quasi sempre più veloce nel fork, perché usa un modello di fork nel kernel dove Windows no. Ho un P3 che segna circa 60 su quel benchmark :).
Andrew Aylett,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.