chicken-users
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]