why is cygwin so slow
cygwin, linux
Solution
As others have already mentioned, Cygwin's implementation of fork and process spawning on Windows in general are slow.
Using this fork() benchmark, I get following results:
rr-@cygwin:~$ ./test 1000
Forked, executed and destroyed 1000 processes in 5.660011 seconds.
rr-@arch:~$ ./test 1000
Forked, executed and destroyed 1000 processes in 0.142595 seconds.
rr-@debian:~$ ./test 1000
Forked, executed and destroyed 1000 processes in 1.141982 seconds.
Using `time (for i in {1..10000};do cat /dev/null;done)` to benchmark process spawning performance, I get following results:
rr-@work:~$ time (for i in {1..10000};do cat /dev/null;done)
(...) 19.11s user 38.13s system 87% cpu 1:05.48 total
rr-@arch:~$ time (for i in {1..10000};do cat /dev/null;done)
(...) 0.06s user 0.56s system 18% cpu 3.407 total
rr-@debian:~$ time (for i in {1..10000};do cat /dev/null;done)
(...) 0.51s user 4.98s system 21% cpu 25.354 total
Hardware specifications:
- cygwin: `Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz`
- arch: `Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz`
- debian: `Intel(R) Core(TM)2 Duo CPU T5270 @ 1.40GHz`
So as you see, no matter what you use, Cygwin will always operate worse. It loses hands down even to worse hardware (`cygwin` vs. `debian` in this benchmark, as per this comparison).
Problem
I run a script on Ubuntu, and tested its time: ``` $ time ./merger ./merger 0.02s user 0.03s system 99% cpu 0.050 total ``` it spent less than 1 second. but if I used cygwin: ``` $ time ./merger real 3m22.407s user 0m0.367s sys 0m0.354s ``` It spent more than 3 minutes. Why did this happen? What shall I do to increase the executing speed on cygwin?