Czy mogę przyspieszyć rozwidlenie cygwina?

15

Natknąłem się na post omawiający szybkość rozwidlania w Cygwin, dający oczekiwaną „szybkość rozwidlenia” w Windows XP około 30-50 na sekundę ( link )

Mam duet Core 2 (1,79 GHz), który spodziewałbym się uzyskać porównywalne wyniki, ale zarządza on jedynie około 8 widelcami na sekundę (a czasem o wiele mniej):

$ 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

Czy możesz zasugerować coś, co mogę zrobić, aby przyspieszyć? Ta maszyna działa o wiele wolniej w Cygwin niż inne, z których wcześniej korzystałem, a które były znacznie wolniejsze.

Aktualizacja

Pozwólcie, że uzasadnię moje pytanie: nie wierzę, że szybszy rozwidlenie magicznie poprawi moje życie, ale wierzę, że ten test porównawczy jest dobrym wskaźnikiem problemów z wydajnością, które widzę w bashu z powodu normalnego korzystania z zewnętrznych plików wykonywalnych obliczyć wartości. Zauważyłem, że zauważam przyspieszenie w Cygwin, przechodząc przez moje skrypty uruchamiające powłokę i kończąc bash i próbując zastąpić polecenia zewnętrzne wewnętrznymi; w Linuksie to nie jest problem. Często jednak nie jest to możliwe, a mój komputer obecnie zajmuje ~ 14 sekund, aby uruchomić powłokę z ciepłą pamięcią podręczną i bez obciążenia.

Andrew Aylett
źródło
1
Cygwin będzie zawsze wolny, wolniejszy. Nawet VirtualBox / VMWare dałoby wyższą wydajność, a jeśli potrzebujesz środowiska programistycznego, skorzystaj z msys. Ale to ... nie wiem ... tak naprawdę nigdy nie było tak użyteczne.
Apache
+1 za ładny, prosty benchmark widelca! Właśnie uruchomiłem to na systemie Linux VPS o wartości 5 $ / miesiąc, aby porównać z moim laptopem z systemem i7 Windows, a VPS uzyskał 30-krotnie wyższy wynik.
Mark K Cowan

Odpowiedzi:

2

Nie ma to nic wspólnego z powolnym rozwidleniem.

Widziałem, jak cygwin biegał powoli, gdy katalog „home” systemu Windows znajdował się na dysku sieciowym. Każde polecenie szukałoby tam plików binarnych, które znacznie spowalniałyby działanie.

zobacz czy

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

jest szybszy, jeśli tak, to prawdopodobnie twój problem

w przeciwnym razie spróbuj uruchomić bash przez strace / ltrace (jeśli nawet działają na cygwin) i zobacz, co robi, gdy wykonanie daty zajmuje 1 sekundę.

użytkownik23307
źródło
1
Niestety kodowanie ścieżek nie robi znaczącej różnicy. strace działa w Cygwin, ale nic nie wyskakuje na mnie, gdy patrzę na ślad.
Andrew Aylett
1

Obawiam się, że nic nie możesz na to poradzić.

Windows nie ma natywnego fork()wywołania systemowego, więc Cygwin musi to naśladować. Implementacja tej emulacji jest jednak bardzo nieefektywna. (Zobacz Cygwin FAQ )

MSYS2, często używany w aplikacjach, w których chce się mieć w pełni funkcjonalne środowisko wiersza poleceń podobne do Linuksa w systemie Windows, jest oparte na Cygwin, dlatego też ma to wpływ.

Jest tak źle, że fork()w systemie Windows jest o co najmniej jeden rząd wielkości wolniejszy niż w systemie 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

Powyższy przykład pokazuje różnicę między i5-2500k @ 4GHz, 32GiB RAM Windows 10 Pro a słabym jednordzeniowym, 1GiB RAM VPS

luxifer
źródło
0

Nie widzisz widelców; widzisz fork, exec, wywołanie systemowe, aby odczytać zegar czasu dziennego, sformatować i przekonwertować dane wyjściowe. Nie wspominając już o tym, czym jest równoległe dzielenie czasu.

Na jakiej podstawie twierdzisz, że inne maszyny „faktycznie były wolniejsze”? Istnieje wiele rzeczy, które wpływają na rzeczywistą prędkość komputera i postrzeganie prędkości komputera przez użytkownika. Co robisz, gdy wydajność wideł na sekundę jest dobrym miernikiem wydajności? Jaka jest szybkość pamięci, architektura i ilość? Prędkość we / wy dysku i buforowanie?

Jak myślisz, co zrobi więcej widelców na sekundę: Core i7 z Vista z 512 MB pamięci RAM lub Celeron z minimalnym Linuksem z 2 GB?

mpez0
źródło
@ mpez0: Proszę zobaczyć moje zaktualizowane uzasadnienie. Aby odpowiedzieć konkretnie na twoje pytania, moją podstawą do stwierdzenia, że ​​były one wolniejsze, jest to, że miały starszą architekturę z wolniejszym zegarem, mniejszą (i wolniejszą) pamięcią RAM i starszym, wolniejszym dyskiem, ale wciąż XP. Linux prawie zawsze będzie działał szybciej w rozwidlaniu, ponieważ używa modelu rozwidlania w jądrze, w którym nie działa Windows. Mam P3, który osiąga ~ 60 na tym benchmarku :).
Andrew Aylett