[Mono-list] Poor Mono performance
Rodrigo Kumpera
kumpera at gmail.com
Tue Mar 12 20:34:18 UTC 2013
A few important things to keep in mind:
-The Windows port of mono lags in terms of performance compared to OSX and
linux;
-The new, and significantly faster, garbage collector is not fully
supported on windows, and absent on 2.10;
-The new 3.0 series is significantly faster;
On Tue, Mar 12, 2013 at 12:54 PM, Nigel Delaney
<nigel.delaney at outlook.com>wrote:
> Edward and Imre - Wow, okay your results definitely didn't mesh with mine,
> very strange things are afoot... On my windows 7 with an Intel i7 3.4 GHz
> processor I had substantially different runtimes comparing mono and .NET
> 4.5. Below shows the 2x2 factorial for compiler versus runtime. These
> results do not change much across replicates, and basically there is a
> massive performance difference between .NET and mono when I ran it. I
> don’t know if at this stage this is due to cache misses/etc. Looking at
> the IL produced by the two different compilers, there are some differences
> in the methods and they load the different methods at different positions
> in the table, in any event there is a clear difference between all of these
> 4 except the two mono treatments. I wonder if this is a .NET 4 v 4.5 thing?
> ****
>
> ** **
>
> *Compiler*
>
> *CLI*
>
> *Time*
>
> mcs ****
>
> Mono 2.10.9****
>
> 1.9 s****
>
> mcs ****
>
> .NET 4.5****
>
> .93 s****
>
> Visual Studio****
>
> Mono 2.10.9****
>
> 1.87 s****
>
> Visual Studio****
>
> .NET 4.5****
>
> 0.64 s****
>
> ** **
>
> ** **
>
> Imre – you missed the point of my email, and obviously I could have made
> the program a lot faster than I did. The point is that your program is
> generally slow for other reasons, though you seemed to be worried about
> using Arrays or Lists which is peanuts compared to other things you could
> do. In particular, in both Mono and .NET, method calls are expensive. In
> my experience, adding numbers and incrementing values takes no time
> compared to calling the method that does these things. I was suggesting
> you should do the following things:****
>
> ** **
>
> 1 – Make sure the method is inlined, avoid the method call.****
>
> ** **
>
> 2 – Do not insert the for loop inside a useless do while loop. You are
> checking conditions inside and outside the method and likely preventing
> important optimizations like caching the list.count property. I don’t know
> what you are trying to do, but note that if you replace the do/while code
> with the code below, than you inline the Advance method, can still do
> everything inside the loop and it is over an order of magnitude faster on
> either .NET or Mono. Not sure if you can do this with your code, but the
> point is mono v. .NET performance differences pale in comparison to the
> nested for-loop-method-call-inside-do-while-loop performance penalty you
> are paying right now. ****
>
> ** **
>
> for (int index = counters.Count - 1; index >= 0; --index)****
>
> {****
>
> ++counter;****
>
> if (counters[index] == (totals[index] - 1))****
>
> {****
>
> counters[index] = 0;****
>
> continue;****
>
> }****
>
> else****
>
> {****
>
> ++counters[index];****
>
> }****
>
> ** **
>
> //All kinds of other stuff can be done here....****
>
> }****
>
> ** **
>
> -N****
>
> ** **
>
> ** **
>
> -----Original Message-----
> From: mono-list-bounces at lists.ximian.com [mailto:
> mono-list-bounces at lists.ximian.com] On Behalf Of edward.harvey.mono
> Sent: Tuesday, March 12, 2013 10:06 AM
> To: imreolajos; mono-list at lists.ximian.com
> Subject: Re: [Mono-list] Poor Mono performance
>
> ** **
>
> > From: mono-list-bounces at lists.ximian.com [mailto:mono-list- ****
>
> > bounces at lists.ximian.com] On Behalf Of imreolajos****
>
> > ****
>
> > SpeedTest.cs****
>
> > <http://mono.1490590.n4.nabble.com/file/n4658877/SpeedTest.cs>****
>
> ** **
>
> Ok, you've provided some source code, you said it is important to you, and
> it represents your real life work load. You've said you had some
> performance problems with it and would like to know why and what to do
> about it ... Other people here have commented that it seems we're avoiding
> the problem.****
>
> ** **
>
> So, I'll bite:****
>
> ** **
>
> I downloaded the file you linked above, and compiled it, .Net 4 Windows 7
> x86_64 dual core intel i5. It ran in 3.3 sec. I then ran on the exact
> same machine in windows mono 2.10.9 and it ran in 3.66 sec. To eliminate
> sampling error, I ran repeatedly, and alternatingly. Windows 3.4, Mono
> 3.41, Win 3.3, Mono 3.41, Win 3.3, Mono 3.43****
>
> ** **
>
> While the mono performance is a little lower, it's not dramatic.****
>
> ** **
>
> I then set var totals = new List<int>() { 10, 10, 100, 100, 1000 }; to
> make the job run longer, and ran again. Win 32.7, Mono 32.8, Win 32.4,
> Mono 32.9****
>
> ** **
>
> Even less dramatic.****
>
> ** **
>
> I set the totals list back to the original presets. Deployed the .exe to
> a slightly slower windows 7 x86_64 virtual machine with 2 cpu's and 1 g
> ram, and also deployed (and recompiled) to a fedora 17 x86_64 machine, mono
> 2.10.8 installed via yum. The win & lin machines have identical system
> specs, running on the same host hardware. win 4.9, lin 3.2, win 4.9, lin
> 3.2, win 4.9, lin 3.2****
>
> ** **
>
> The most dramatic result we're seeing in any of these tests, is that mono
> for linux is significantly faster than .Net for this particular task, while
> mono for windows is slightly slower than .Net. Again, specifically for
> this test case in this configuration. I would not be comfortable
> generalizing anything from this. I bet you'll see different results with
> different patch levels of Windows or linux, different versions of .Net,
> different versions of mono, different on 32bit vs 64bit hardware, etc.****
>
> ** **
>
> _______________________________________________****
>
> Mono-list maillist - Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list****
>
> _______________________________________________
> Mono-list maillist - Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20130312/f9422e3e/attachment-0001.html>
More information about the Mono-list
mailing list