<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hello everybody,<br>
    <br>
    I think I found "one" of the root causes of the problem (while it
    seems to be true that async code performs worse on mono it doesn't
    seem to be as catastrophic as I thought initially). <br>
    <br>
    It seems that the profiler analysis results have to be watched very
    carefully for code with lots of asyncs.<br>
    <br>
    I figured out that
    "Process.GetCurrentProcess().MainModule.ModuleName" performs not
    very well on mono as<br>
    some tests with the fsharp interactive show:<br>
    .NET 4.5.1:<br>
    > for i in 1 .. 10 do ignore <|
    Process.GetCurrentProcess().MainModule.ModuleName;;<br>
    Real: 00:00:00.000, CPU: 00:00:00.000, GC Gen0: 0, Gen1: 0, Gen2: 0<br>
    val it : unit = ()<br>
    > for i in 1 .. 100 do ignore <|
    Process.GetCurrentProcess().MainModule.ModuleName;;<br>
    Real: 00:00:00.005, CPU: 00:00:00.000, GC Gen0: 0, Gen1: 0, Gen2: 0<br>
    val it : unit = ()<br>
    > for i in 1 .. 1000 do ignore <|
    Process.GetCurrentProcess().MainModule.ModuleName;;<br>
    Real: 00:00:00.056, CPU: 00:00:00.062, GC Gen0: 5, Gen1: 1, Gen2: 0<br>
    val it : unit = ()<br>
    > for i in 1 .. 100000 do ignore <|
    Process.GetCurrentProcess().MainModule.ModuleName;;<br>
    Real: 00:00:04.059, CPU: 00:00:04.093, GC Gen0: 577, Gen1: 0, Gen2:
    0<br>
    val it : unit = ()<br>
    <br>
    MONO (pretty much latest master):<br>
    > for i in 1 .. 10 do ignore <|
    Process.GetCurrentProcess().MainModule.ModuleName;;<br>
    Real: 00:00:01.348, CPU: 00:00:01.280, GC gen0: 0, gen1: 0<br>
    val it : unit = ()<br>
    > for i in 1 .. 100 do ignore <|
    Process.GetCurrentProcess().MainModule.ModuleName;;<br>
    Real: 00:00:12.905, CPU: 00:00:12.420, GC gen0: 1, gen1: 0<br>
    val it : unit = ()<br>
    > for i in 1 .. 1000 do ignore <|
    Process.GetCurrentProcess().MainModule.ModuleName;;<br>
    Real: 00:02:13.444, CPU: 00:02:08.200, GC gen0: 6, gen1: 0<br>
    val it : unit = ()<br>
    <br>
    Is this a known issue?<br>
    <br>
     Matthias<br>
    <br>
    <div class="moz-cite-prefix">Am 06.03.2014 14:14, schrieb Matthias
      Dittrich:<br>
    </div>
    <blockquote cite="mid:531874B8.1050206@yaaf.de" type="cite">
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      Hello,<br>
      <br>
      Basically I noticed some performance problems on mono. I have a
      unit test suite which requires some minutes to run on .net but
      several hours on mono.<br>
      <br>
      Because this code is heavily using F# asyncs I tried to find
      existing bug reports of the problem.<br>
      I found the following entries:<br>
      <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://lists.ximian.com/pipermail/mono-devel-list/2005-April/011477.html">http://lists.ximian.com/pipermail/mono-devel-list/2005-April/011477.html</a><br>
      <a moz-do-not-send="true" class="moz-txt-link-freetext"
        href="http://lists.ximian.com/pipermail/mono-bugs/2010-May/100566.html">http://lists.ximian.com/pipermail/mono-bugs/2010-May/100566.html</a><br>
      <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://lists.ximian.com/pipermail/mono-devel-list/2010-January/033814.html">http://lists.ximian.com/pipermail/mono-devel-list/2010-January/033814.html</a><br>
      But they all don't seem to be directly related, because of this I
      decided to use the mono profiler and check the results.<br>
      <br>
      I had problems with the self compiled mono profiler
      (libmono-profiler-log.so.0.0.0) I had to copy the file from the
      binary distribution (It seems like the build is broken somehow on
      mono master?).<br>
      For reference: I got the mighty: "<span style="color: rgb(0, 0,
        0); font-family: Courier; font-size: 13px; font-style: normal;
        font-variant: normal; font-weight: normal; letter-spacing:
        normal; line-height: normal; orphans: auto; text-align: start;
        text-indent: 0px; text-transform: none; white-space: normal;
        widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
        background-color: rgb(255, 255, 255); display: inline
        !important; float: none;">The 'log' profiler wasn't found in the
        main executable nor could it be loaded from
        'mono-profiler-log'."</span><br>
      <br>
      Afer running the profiler the top results are:<br>
      Method call summary<br>
      Total(ms) Self(ms)      Calls Method name<br>
      67733962   539203     229540
      Microsoft.FSharp.Control.AsyncBuilderImpl/callA@815:Invoke
      (Microsoft.FSharp.Control.AsyncParams`1<b>)<br>
      49135479   197016     163464
      Microsoft.FSharp.Control.AsyncBuilderImpl/resultA@781:Invoke
      (Microsoft.FSharp.Control.AsyncParams`1<a>)<br>
      48703438    33181     162414
      Microsoft.FSharp.Control.AsyncBuilderImpl/args@799-1:Invoke (a)<br>
      42976340 42976339       5318 (wrapper managed-to-native)
      System.Threading.WaitHandle:WaitOne_internal
      (System.Threading.WaitHandle,intptr,int,bool)<br>
      42600383   368321     164611
      Microsoft.FSharp.Control.AsyncBuilderImpl/bindA@793:Invoke
      (Microsoft.FSharp.Control.AsyncParams`1<b>)<br>
      37193074     1632      99251 (wrapper runtime-invoke)
      <Module>:runtime_invoke_void__this___object
      (object,intptr,intptr,intptr)<br>
      29263844        8      12264 (wrapper runtime-invoke)
      object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)<br>
      27579799      103       4772 System.Threading.WaitHandle:WaitOne
      (int,bool)<br>
      25615463      185         12 System.Threading.Thread:StartInternal
      ()<br>
      19749208       19      10942
      System.Threading.Tasks.TpScheduler:TaskExecuterCallback (object)<br>
      19749189       19      10942 System.Threading.Tasks.Task:Execute
      ()<br>
      19749169       33      10942
      System.Threading.Tasks.Task:ThreadStart ()<br>
      19748752       47      10942 System.Threading.ExecutionContext:Run
(System.Threading.ExecutionContext,System.Threading.ContextCallback,object)<br>
      19748253       90      10942 System.Security.SecurityContext:Run
(System.Security.SecurityContext,System.Threading.ContextCallback,object)<br>
      19748012       62      10942
      System.Threading.ExecutionContext/<Run>c__AnonStorey0:<>m__0
      (object)<br>
      19746136       55      10942
      System.Threading.Tasks.Task/<ThreadStart>c__AnonStorey0:<>m__0



      (object)<br>
      19744958       34      10942
      System.Threading.Tasks.Task:InnerInvoke ()<br>
      18306055       81          5
      System.Threading.Timer/Scheduler:SchedulerThread ()<br>
      18305830        3       1896 System.Threading.WaitHandle:WaitOne
      (int)<br>
      16264445        1        836
      System.Threading.Tasks.TaskActionInvoker/FuncInvoke`1<bool>:Invoke
      (System.Threading.Tasks.Task,object,System.Threading.Tasks.Tas\<br>
      k)<br>
      <br>
      And I don't really know what that means or where the problem is
      sitting. Can anybody help in reading the results? I have also
      attached the complete output of <tt>mprof-report.</tt> When the
      problem is identified I would be happy in helping to solve it.<br>
      <br>
      Thank you,<br>
       Matthias<br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Mono-devel-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a>
<a class="moz-txt-link-freetext" href="http://lists.ximian.com/mailman/listinfo/mono-devel-list">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>