Как интерпретировать результаты монопрофилирования? - PullRequest
3 голосов
/ 28 апреля 2010

Я создал консольное приложение в C # и запустил его в Windows / .NET в 5 раз быстрее, чем в Linux / Mono или Windows / Mono. Приложение кодирует некоторые двоичные файлы в текстовый формат (JSON).

Я профилировал приложение на linux / mono, используя:

mono --profile=default:stat myconsoleapp.exe

Вот первая часть результата:

prof counts: total/unmanaged: 32274/25062
  23542 72.95 % mono
    459  1.42 % System.Decimal:Divide (System.Decimal,System.Decimal)
    457  1.42 % System.Decimal:Round (System.Decimal,int,System.MidpointRounding)
    411  1.27 % /lib/libz.so.1
    262  0.81 % /lib/tls/i686/cmov/libc.so.6(memmove
    253  0.78 % System.Decimal:IsZero ()
    247  0.77 % System.NumberFormatter:Init (string,double,int)
    213  0.66 % System.NumberFormatter:AppendDigits (int,int)

72,95% моно? Используют ли моно внутренние компоненты 3 четверти общего времени выполнения?

РЕДАКТИРОВАТЬ: Вот результат "mono --version"

Mono JIT compiler version 2.4.2.3 (Debian 2.4.2.3+dfsg-2)
Copyright (C) 2002-2008 Novell, Inc and Contributors. www.mono-project.com
        TLS:           __thread
        GC:            Included Boehm (with typed GC)
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  x86
        Disabled:      none

1 Ответ

1 голос
/ 29 апреля 2010

Правильно. Похоже, что у вашего монофонического двоичного кода символы удалены, поэтому вы не получаете более точную информацию.

Я предполагаю, что большая часть этих служебных данных находится в десятичном коде и (возможно) в GC.

Для первого случая: какую моно версию вы используете? IIRC, мы недавно исправили некоторые проблемы с производительностью в этой области. Хорошей идеей будет попробовать моно из svn trunk.

Если накладные расходы исходят от GC, новый GC, который мы реализуем, должен помочь с этим.

Мы можем подтвердить любую проблему, если вы разместили исходный код или двоичный файл вашей тестовой программы.

...