[Mono-dev] Fundamental performance problems with Mono

pablosantosluac at terra.es pablosantosluac at terra.es
Thu Jan 7 11:11:30 EST 2010


Could you also share some test code so we can gain a better
understanding of the issue/s?



On 07/01/2010 16:37, zvikag wrote:
> Hello all,
> The bottom line of this message is that I don't see how can one write a
> high-performance socket server in Mono...
> Here is the story:
> I am writing a proxy server using .NET Socket API. This proxy does almost
> entirely I/O work - copying buffers from one socket to another. Now, Mono
> doesn't implement the newer 
> http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx
> XXXAsync Socket API  that was introduced in .NET 2.0 SP1 (or more
> accurately, implements it 
> http://www.mail-archive.com/mono-list@lists.ximian.com/msg28621.html
> perfunctorily ). So I was left to use the APM Socket API which produces tons
> of garbage objects under heavy load.
> When testing the server on Linux under load we saw very frequent CPU bursts
> that crippled the throughput of the server. After profiling with the mono
> built-in profiler I confirmed that the reason for the high CPU usage was the
> GC collections that got more and more frequent and took more and more time.
> I then read a little bit and realized that the Mono GC is non-generational
> which might explain the long GC cycles (if it was generational it could have
> collected the garbage objects that were created during async socket
> operations in generation 0 and probably stop there, but it has to traverse
> the entire managed heap).
> So the combination of the non-generational GC and the unimplemented XXXAsync
> Socket API result in very poor performance of the Mono server. The maximum
> throughput of the server with Mono on Linux is about half of that on Windows
> using .NET.
> I attached the GC stats and profiling results of a 15 minute run.
> http://old.nabble.com/file/p27026906/profile_alloc.log profile_alloc.log 
> http://old.nabble.com/file/p27026906/gc_stats.log gc_stats.log 
> Can you help me out here?

More information about the Mono-devel-list mailing list