Marco Atzeri via Cygwin-apps wrote:
On 16.12.2020 13:13, Hamish McIntyre-Bhatty via Cygwin-apps wrote:
Hi,
So I know it's been mentioned a lot that fork is slow on Cygwin, but
compared to other people's machines, eg when building, it seems way
slower for me.
First I'd like to know if there's a good way to measure this that anyone
has found, because I'm not sure how to measure it. If I print multiple
lines with echo in a script, I can see it printing maybe 2-3 a second -
it's very slow.
I think this might be because I'm using a Virtual Machine with
VirtualBox, and QEMU/KVM might be quicker. I'm using Avira Antivurus,
with exceptions for the cygwin install folders (C:\cygwin64, C:\cygwin).
It might be nice if we could so some comparisons so I can figure out
what's wrong.
Hamish
Same AV here, W10 64bit (no VM), 2 year old Laptop
model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
4 cores
https://github.com/mondalaci/fork-benchmark
it seems there is a aging effect
Result of power management? Could possibly be prevented if another minor
cpu load is run in parallel.
$ ./fork-benchmark.exe 1000
Forked, executed and destroyed 1000 processes in 39.928576 seconds.
$ ./fork-benchmark.exe 1000
Forked, executed and destroyed 1000 processes in 42.701295 seconds.
$ ./fork-benchmark.exe 1000
Forked, executed and destroyed 1000 processes in 49.890909 seconds.
$ ./fork-benchmark.exe 1000
Forked, executed and destroyed 1000 processes in 61.657031 seconds.
9 year old PC, W10 64bit, no VM, Intel i7-2600K CPU @ 3.4GHz, 4 cores /
8 threads
AV: Windows Defender
Cygwin x86_64
Protection on:
$ ./fork-benchmark-64 1000
Forked, executed and destroyed 1000 processes in 16.651101 seconds.
$ ./fork-benchmark-64 1000
Forked, executed and destroyed 1000 processes in 16.674107 seconds.
Protection off:
$ ./fork-benchmark-64 1000
Forked, executed and destroyed 1000 processes in 14.281071 seconds.
$ ./fork-benchmark-64 1000
Forked, executed and destroyed 1000 processes in 14.426482 seconds.
An alternative which could be run out-of-the-box is the good old
'date(s) per second' benchmark. Its results are comparable:
$ while true; do date; done | uniq -c
...
53 Wed Dec 16 19:23:26 CET 2020 <== Protection on
54 Wed Dec 16 19:23:27 CET 2020
56 Wed Dec 16 19:23:28 CET 2020
55 Wed Dec 16 19:23:29 CET 2020
56 Wed Dec 16 19:23:30 CET 2020
...
52 Wed Dec 16 19:23:37 CET 2020
54 Wed Dec 16 19:23:38 CET 2020
56 Wed Dec 16 19:23:39 CET 2020
63 Wed Dec 16 19:23:40 CET 2020 <== Protection off
63 Wed Dec 16 19:23:41 CET 2020
62 Wed Dec 16 19:23:42 CET 2020
64 Wed Dec 16 19:23:43 CET 2020
...
63 Wed Dec 16 19:23:51 CET 2020
64 Wed Dec 16 19:23:52 CET 2020
63 Wed Dec 16 19:23:53 CET 2020
55 Wed Dec 16 19:23:54 CET 2020 <== Protection on
48 Wed Dec 16 19:23:55 CET 2020
53 Wed Dec 16 19:23:56 CET 2020
54 Wed Dec 16 19:23:57 CET 2020
54 Wed Dec 16 19:23:58 CET 2020
...
Cygwin x86 is somewhat slower:
Protection on:
$ ./fork-benchmark-32.exe 1000
Forked, executed and destroyed 1000 processes in 19.231766 seconds.
Protection off:
$ ./fork-benchmark-32.exe 1000
Forked, executed and destroyed 1000 processes in 17.107739 seconds.
Regards,
Christian