[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Windows vs Linux Performance, windows host 4-6x slower than linux gu
From: |
Mark Fisher |
Subject: |
Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm |
Date: |
Thu, 9 Sep 2021 13:29:40 +0100 |
Thanks Mario, these are very useful points.
I took a benchmark that would easily compile on both from
https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/fasta-gcc-9.html
Both windows and linux compiling with:
> gcc -pipe -O3 -fomit-frame-pointer fasta.c -o fasta
> time ./fasta 100000000 > /dev/null
Running times for 100M iterations were:
Linux (VM): 2.014, 2.028, 2.016, 2.028
Windows (Host): 2.992, 2.964, 2.980, 2.965
so slower, but not 4-6x, only 1.5x
I'll have a think about your other points after I've tried Peter's
suggestion of trying with __fastcall.
I did try dropping back to 5.2.0 as I have a custom 5.3.0 that is
patched for chicken-install, but it gave the same results under
windows.
On Wed, 8 Sept 2021 at 17:48, Mario Domenech Goulart
<mario@parenteses.org> wrote:
>
> On Mon, 6 Sep 2021 21:25:48 +0100 Mark Fisher <mark.j.fisher@gmail.com> wrote:
>
> > The compilation options enable instrumentation-based profiling. There's
> > statistical profiling available when running executables with -:p which
> > might give you more useful data (see
> > https://www.more-magic.net/posts/statistical-profiling.html for more
> > infomation). Could you please try that one as well?
> >
> > I had found that article, didn't realise it was as easy as adding the
> > switch when running.
> >
> > Here's the output for windows:
> > reading `PROFILE.15844' ...
> >
> > procedure
> > calls seconds average percent
> > -----------------------------------------------------------------------------------------------------------------------
> > ../advents/2015/aoc2015day04.scm:35:
> > message-digest-byte-vector#message-digest-string 149 8.269 0.055
> > 69.671
> > ../advents/2015/aoc2015day04.scm:35: chicken.string#conc
> > 112 1.320 0.011 11.120
> > ##sys#substring=?
> > 72 1.050 0.014 8.845
> > ../advents/aoc-files.scm:43: streams.primitive#$make-stream-eager$
> > 10 0.140 0.014 1.179
> > ##sys#profile-exit
> > 11 0.120 0.010 1.010
> > ../advents/2015/aoc2015day04.scm:35: loop240
> > 9 0.090 0.010 0.758
> > comparators/default.scm:115: make-comparator
> > 9 0.090 0.010 0.758
> > comparators/default.scm:111: object-type
> > 8 0.090 0.011 0.758
> > ../advents/aoc-files.scm:47: streams.utils#stream-fold-right
> > 2 0.060 0.030 0.505
> > ../advents/2015/aoc2015day03.scm:110: streams.primitive#stream-null?
> > 5 0.050 0.010 0.421
> > ../advents/aoc-files.scm:44: streams.primitive#stream-cdr
> > 4 0.040 0.010 0.336
> > ../advents/2015/aoc2015day03.scm:110: streams.primitive#$make-stream-eager$
> > 3 0.040 0.013 0.336
> > comparators/comparators-impl.scm:235: acc
> > 3 0.030 0.010 0.252
> > ../advents/2015/aoc2015day03.scm:113: streams.primitive#stream-null?
> > 3 0.030 0.010 0.252
> > comparators/comparators-impl.scm:236: acc
> > 3 0.030 0.010 0.252
> > ../advents/aoc-files.scm:43: streams.primitive#stream-car
> > 3 0.030 0.010 0.252
> > ../advents/2015/aoc2015day01.scm:70: streams.derived#stream-fold
> > 1 0.030 0.030 0.252
> > ../advents/2015/aoc2015day01.scm:95: streams.utils#stream-find
> > 1 0.030 0.030 0.252
> > ##sys#profile-entry
> > 2 0.020 0.010 0.168
> > ../advents/aoc-files.scm:41: streams.derived#stream-append
> > 2 0.020 0.010 0.168
> > comparators/comparators-impl.scm:234: acc
> > 2 0.020 0.010 0.168
> > ../advents/2015/aoc2015day03.scm:72: srfi-113#set-adjoin!
> > 2 0.020 0.010 0.168
> > comparators/default.scm:87: object-type
> > 2 0.020 0.010 0.168
> > comparators/default.scm:110: object-type
> > 2 0.020 0.010 0.168
> > comparators/comparators-impl.scm:200: %salt%
> > 2 0.020 0.010 0.168
> > ../advents/2015/aoc2015day03.scm:113: streams.primitive#$make-stream-eager$
> > 2 0.020 0.010 0.168
> > ../advents/2015/aoc2015day03.scm:113: streams.primitive#stream-car
> > 1 0.020 0.020 0.168
> > ../advents/aoc-files.scm:40: streams.derived#stream-append
> > 1 0.010 0.010 0.084
> > comparators/comparators-impl.scm:166: exact
> > 1 0.010 0.010 0.084
> > ../advents/2015/advent2015.scm:38: scheme#display
> > 1 0.010 0.010 0.084
> > ../advents/2015/aoc2015day03.scm:110: streams.primitive#$make-stream-lazy$
> > 1 0.010 0.010 0.084
> > ../advents/2015/aoc2015day02.scm:86: g194
> > 1 0.010 0.010 0.084
> > ../advents/2015/aoc2015day03.scm:71: streams.derived#stream-fold
> > 1 0.010 0.010 0.084
> > comparators/comparators-impl.scm:95: g307
> > 1 0.010 0.010 0.084
> > comparators/comparators-impl.scm:222: g450
> > 1 0.010 0.010 0.084
> > comparators/default.scm:56: g721
> > 1 0.010 0.010 0.084
> > ../advents/2015/aoc2015day04.scm:8: chicken.load#load-extension
> > 1 0.010 0.010 0.084
> > comparators/comparators-impl.scm:166: scheme#round
> > 1 0.010 0.010 0.084
> > ../advents/2015/advent2015.scm:26: format#format
> > 1 0.010 0.010 0.084
> > ../advents/2015/aoc2015day03.scm:110: streams.primitive#stream-cdr
> > 1 0.010 0.010 0.084
> > ../advents/2015/aoc2015day03.scm:110: streams.primitive#stream-car
> > 1 0.010 0.010 0.084
> > ../advents/2015/aoc2015day01.scm:46: chicken.load#load-extension
> > 1 0.010 0.010 0.084
> >
> > Under linux:
> > reading `PROFILE.220771' ...
> >
> > procedure
> > calls seconds average percent
> > -----------------------------------------------------------------------------------------------------------------------
> > ../advents/2015/aoc2015day04.scm:35:
> > message-digest-byte-vector#message-digest-string 35 2.020 0.057
> > 73.722
> > ../advents/2015/aoc2015day04.scm:35: chicken.string#conc
> > 30 0.320 0.010 11.678
> > ##sys#substring=?
> > 9 0.090 0.010 3.284
> > ../advents/2015/aoc2015day04.scm:35: loop240
> > 2 0.060 0.030 2.189
> > comparators/default.scm:115: make-comparator
> > 2 0.030 0.014 1.094
> > ../advents/aoc-files.scm:43: streams.primitive#$make-stream-eager$
> > 2 0.030 0.014 1.094
> > comparators/default.scm:111: object-type
> > 2 0.020 0.010 0.729
> > ##sys#profile-exit
> > 2 0.020 0.010 0.729
> > ../advents/2015/aoc2015day03.scm:72: srfi-113#set-adjoin!
> > 2 0.020 0.010 0.729
> > ../advents/2015/aoc2015day01.scm:95: streams.utils#stream-find
> > 1 0.020 0.020 0.729
> > ../advents/2015/aoc2015day03.scm:110: streams.primitive#$make-stream-lazy$
> > 1 0.010 0.010 0.364
> > comparators/default.scm:110: object-type
> > 1 0.010 0.010 0.364
> > ##sys#list->string
> > 1 0.010 0.010 0.364
> > comparators/comparators-impl.scm:236: acc
> > 1 0.010 0.010 0.364
> > ../advents/2015/aoc2015day03.scm:110: streams.primitive#stream-car
> > 1 0.010 0.010 0.364
> > ../advents/2015/advent2015.scm:25: format#format
> > 1 0.010 0.010 0.364
> > ../advents/2015/aoc2015day03.scm:113: streams.primitive#stream-null?
> > 1 0.010 0.010 0.364
> > ../advents/aoc-files.scm:38: streams.primitive#$make-stream-lazy$
> > 1 0.010 0.010 0.364
> > ##sys#profile-entry
> > 1 0.010 0.010 0.364
> > ##sys#dynamic-wind
> > 1 0.010 0.010 0.364
> > ../advents/2015/aoc2015day03.scm:113: streams.primitive#$make-stream-lazy$
> > 1 0.010 0.010 0.364
> >
> > which does show a lot more calls in windows.
>
> Thanks for sharing your results.
>
> Some [potentially wrong/misleading/stupid] notes and questions:
>
> * I believe in this particular case the profiler based on
> instrumentation can provide more reliable results. The statistical
> profiler relies on signal handling -- I think that itself can be a
> source of discrepancies when it comes to comparing results obtained
> from different systems.
>
> * Do you observe the same behavior with other programs? For example,
> you said that GCC is the same version on both Linux and Windows. If
> you compile the same C file on both systems, is gcc ~4 times slower on
> Windows too? I mean gcc's execution time (i.e., time to compile a
> file).
>
> * I wonder if the CHICKEN runtime/eggs is going through some slow path
> in Windows' libc that is not affecting the entire virtualized Linux
> system running your CHICKEN program. If the virtualization software
> manages to avoid that slow path, that could explain the performance
> difference.
>
> * Is it possible that Windows is doing something funny to the execution
> of your binaries? Like some runtime analysis to detect malicious
> behavior? Sounds a bit crazy, but who knows.
>
> I'm sorry. I don't really understand why things are slower on Windows.
> At this point I have more questions than answers. :-)
>
> All the best.
> Mario
> --
> http://parenteses.org/mario
- Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Mark Fisher, 2021/09/06
- Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Jordan Henderson, 2021/09/06
- Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Mario Domenech Goulart, 2021/09/06
- Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Mark Fisher, 2021/09/06
- Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Vasilij Schneidermann, 2021/09/06
- Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Mark Fisher, 2021/09/06
- Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Mario Domenech Goulart, 2021/09/08
- Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm,
Mark Fisher <=
Re: Windows vs Linux Performance, windows host 4-6x slower than linux guest vm, Peter Bex, 2021/09/09