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?

Original source

Related problems