Develar
Новичок
CachegrindVisualizer 0.3 — 2.5D визуализация схемы работы и профилирование программы
CachegrindVisualizer — это кроссплатформенная программа для визуализации файлов в формате Callgrind, в частности, его подмножества используемого Cachegrind. Профайлер Xdebug является совместимым с Cachegrind. Программа написана с использованием AIR — под Linux AIR будет в 2008 году, а Mac OS X поддерживает уже сейчас, но мака у меня нет, так что на данный момент гарантируется работа только под Vista или Windows XP SP2 (поддержка ОС). Версия 0.3 разработана и протестирована в Vista Ultimate Edition с включенным UAC под пользователем с правами администратора. Протестировано с xdebug 2.0.0 и выше (xdebug содержит критическую ошибку — summary (общее время выполнения программы без деструкторов) для сложных программ может быть меньше реального (ответственность за цифры в дочернем ребре 187 % не на мне). Я спрошу у автора xdebug в силу чего так происходит).
Это бета, в силу проблем с памятью при реализованном асинхронном парсинге, пока что он синхронен, но все будет сделано нормально в следующей версии вместе с progress bar.
http://cachegrindvisualizer.googlecode.com/files/CachegrindVisualizer-0.3b1.air
http://code.google.com/p/cachegrindvisualizer/
Версия 0.3 поддерживает AIR Beta 2, в этой версии среды улучшено производительность и управление памятью. Сам CachegrindVisualizer тоже стал кушать в разы меньше RAM благодаря использованию SQLite.
0. Теперь, с версии 0.3, CachegrindVisualizer отличается от WinCacheGrind не только тем, что умеет строить граф, но и поддержкой файлов неограниченного размера (2^53 байт). В версии 0.3 вы можете анализировать и держать открытыми несколько файлов, каждый из которых может весить как минимум 4 ГБ. При этом результаты анализа сохраняются и вы можете как повторно их открыть без необходимости ждать, так и переслать куда-нибудь (переименование файла возможно, программа все равно догадается). Единственный нюанс в поддержке больших файлов в том, что если вы раскроете все дерево вызовов, то, разумеется, оно все и будет загружено в память (в дерево подгружаются не все данные, но наиболее большие - имя функции и имя файла) — но это маловероятно — на большом дереве у вас быстрее устанет рука, чем закончится RAM
. Функция очистки памяти при сворачивании окна/вкладки не реализована, и вряд ли будет, так как на компьютере программиста это только снизит быстродействие (под компьютером программиста я понимаю минимум 2 ГБ RAM).
Отключение режима live mode в следующем выпуске. (Так как при работе с 4 ГБ файлом live mode (то есть режим реального времени) фактически вешает машину, теперь его можно отключить, и самостоятельно после настройки нажать на кнопку, чтобы граф был построен. Данная настройка сохраняется между запусками программы — если кому это не нравится и хочется чтобы она сбрасывалась в значение по умолчанию — включено — пишите, но мне кажется, что это правильное поведение).
Учтите, что поддержка файлов размером до 2^53 байт не протестирована на файлах более 70 МБ, и есть 1 решение в реализации, которые может помешать открытию таких файлов — выбор типа uint (2^32) для идентификации ребра.
1. Добавлена автоматическая регистрация типа файла cachegrind out, то есть, после установки CachegrindVisualizer открытие файла с расширением .cg приведет к открытию его в CachegrindVisualizer (если CachegrindVisualizer уже открыт, то к уже имеющимся вкладкам будет добавлена новая). Спасибо Дерику Ретхансу за расширение параметра конфигурации xdebug.profiler_output_name — для работы этой функции вы должны установить xdebug.profiler_output_name в %t.cg (xdebug.profiler_output_name = %t.cg), спецификатор %t можете заменить на любой другой.
2. Запуск из консоли — абсолютные имена файлов через пробел ("C:\Program Files\CachegrindVisualizer\CachegrindVisualizer.exe" "C:\tmp\1196673587.cg" "C:\tmp\1196673584.cg").
3. Fixed: Для хранения времени (собственного и общего, в мс) был выбран тип uint. Это означало, что время выполнения всегда было равно 0, если оно на самом деле было равно 0,8 или 0,6 мс. Вроде маленькая погрешность, но при суммировании
Теперь это Number (Real в SQLite) (в формате Cachegrind используется единица времени равная 10^-4 мс, в целях производительности мы сразу конвертируем в мс, чтобы не делать это каждый раз при выводе).
4. Fixed: Так как xdebug не подсчитывает полное время исполнения деструктора, то мы это делаем сами — в прежних версиях это была только сумма полного времени детей, теперь эта ошибка исправлена — к сумме полного времени детей прибавляется исключительное время деструктора (впрочем, понятно, что это время обычно очень мало и разницы вы не заметите, но мало ли).
От KCacheGrind CachegrindVisualizer отличается тем, что граф не просто проверяет ваш монитор на поддержку цветов радуги, а информирует о времени выполнения узла (модель HSV). Также граф локализуется — форматирование в соответствии с локалью.
На текущий момент CachegrindVisualizer ориентирован исключительно на построение графа, вспомогательные/альтернативные таблицы данных и графики (карты, диаграммы, гистограммы и т. п.) не реализованы, — и не будут без соответствующих запросов, так как меня вполне удовлетворяет граф (но парсер учитывает всю информацию, так что никакой работы помимо реализации желаемого графика не потребуется).
Что нужно еще доделать:
1) возможность отключения live mode.
2) информирование о текущей загруженной конфигурации.
3) загрузка или сохранение конфигурации должно приводить к выбору этой конфигурации при следующем запуске программы.
4) progress bar
Исходный код в публичном репозитарии, но только CachegrindVisualizer, а не каркаса, который он использует — пока что лениво (будет выложено к новому году с другим opensource проектом) его выкладывать, если кто-то захочет сам скомпилировать — пришлю код каркаса и инструкции по настройке (я не использую жесткую привязку к путям, но переопределен mxml-manifest c flex-config и перегружен Singleton менеджера ресурсов). Если будете использовать Flex Builder — сразу же отключите параметр "Collapse Inherited Members" — ирония в том, что действие этого параметра помимо своего прямого назначения имеет действие и на просмотр массива с количеством элементов в районе нескольких сотен тысяч. Если вы оставите как есть — Collapse — то будет как раз не Collapse — и вы вспомните иной перевод этого слова.
Как пользоваться и более полная информация о программе в первом сообщении в теме посвященной версии 0.1.
Что делать с полученным от программы файлом на языке dot? Его можно просмотреть и удобно с ним работать в ZGRViewer, 2.5D визуализаторе.
1 Установить Graphviz и ZGRViewer.
2 Настроить ZGRViewer.
2.1 Открыли ZGRViewer (в windows это run.bat, в linux run.sh — файл на языке dot кроссплатформен).
2.2 File -> Preferences -> Directories пишем пути к программам, обычно это C:\Program Files\Graphviz\bin\dot.exe (вместо dot для остальных соответственно neato, circo и т. д.), нажимаем Save (да, за юзабилити надо бить, но времени помочь автору ZGRViewer нет) и закрываем окно.
2.3 Правой клавишей мыши щелкаем по файлу: появляется контекстное меню — Открыть с помощью -> Выбрать программу -> выбираем ZGRViewer и ставим галку "Использовать выбранную программу для всех файлов такого типа" -> ОК. Если открылось нормально, переходим к следующем шагу, если нет — разбираемся с путями. Тем кто в windows — поблагодарите архитекторов за ненадобность искать девушку, откройте run.bat и установите переменную ZGRV в абсолютный путь к папке ZGRViewer. Все пути в настройках ZGRViewer должны быть абсолютными, вместе с буквой диска.
Все. Теперь щелкаем по dot файлу и будет сразу открываться ZGRViewer.
Кстати, судя по этой теме, не все в курсе, что профилирование можно использовать и для понимания того, как же программа работает.
-~{}~ 13.12.07 21:55:
Сегодня вышел AIR Beta 3, так что это был повод выпустить версию CachegrindVisualizer 0.3 beta 2. Так как особых замечаний не поступило, ничего нового не реализовано.
* анализ стал асинхронным, приложение не замирает во время чтения больших файлов.
* в разы увеличена скорость анализа за счет кеширования страниц БД, цена этого — потребление памяти — максимум 300 МБ (так как данная программа для программистов, не думаю что у кого-то будут проблемы, но если что — пишите, для меня важна скорость и, обладая 3 ГБ памяти, лениво ставить маленький размер кеша).
* fixed: устранена утечка памяти после анализа файла.
* fixed: восстановлена работа фильтра (в первой бете был отключен), делающего граф более чистым — нет дублирующих значений (случай, когда метка острия стрелки равна метке ребра). Метка острия вообще не реализована в KCacheGrind, я и сам забыл зачем оно надо — соотношение собственного/полного когда вызов нескольких детей, а мы хотим знать по каждому ребенку, - где-то в release notes написано
- скоро наверно напишу документацию объясняющую граф.
Товарищи использующие Mac — как минимум до весны 2008 анализ в CachegrindVisualizer будет медленнее, чем в Windows — это связано с SQLite.
Для больших файлов (от 50 МБ) вторая бета анализирует в 5 раз медленнее чем первая, поэтому эта версия пока не выпущена как стабильная. (Впрочем, заметно это будет только на больших файлах).
-~{}~ 13.12.07 22:05:
http://cachegrindvisualizer.googlecode.com/files/CachegrindVisualizer0.3b2.air
Среду нужно обновить до AIR Beta 3 - http://labs.adobe.com/downloads/air.html
Кстати, не забудьте в настройках ZGRViewer включить antialiasing.
-~{}~ 14.12.07 19:49:
Наверное, утилита никому не нужна, да и я сам ей пока что не пользуюсь, раз никто не послал меня на http://www.xdebug.org/archives/xdebug-dev/1185.html
Зато теперь CachegrindVisualizer единственная утилита под windows и mac визуализирующая профилирование xdebug.
-~{}~ 15.12.07 21:02:
final 0.3 - все что планировалось (кроме progress bar) + возможность указать заголовок для графа (собственно текст и где - снизу или сверху). live mode решен умным таймером - когда вы начнете вводить в numeric stepper желаемый minNodeCost то не сразу будет строиться - в начале ведь может быть 0
, а подождет 4 секунды (при написании заголовка 2 секунды) и решит - надо строить или пользователь еще не ввел полностью что хотел.
CachegrindVisualizer — это кроссплатформенная программа для визуализации файлов в формате Callgrind, в частности, его подмножества используемого Cachegrind. Профайлер Xdebug является совместимым с Cachegrind. Программа написана с использованием AIR — под Linux AIR будет в 2008 году, а Mac OS X поддерживает уже сейчас, но мака у меня нет, так что на данный момент гарантируется работа только под Vista или Windows XP SP2 (поддержка ОС). Версия 0.3 разработана и протестирована в Vista Ultimate Edition с включенным UAC под пользователем с правами администратора. Протестировано с xdebug 2.0.0 и выше (xdebug содержит критическую ошибку — summary (общее время выполнения программы без деструкторов) для сложных программ может быть меньше реального (ответственность за цифры в дочернем ребре 187 % не на мне). Я спрошу у автора xdebug в силу чего так происходит).
Это бета, в силу проблем с памятью при реализованном асинхронном парсинге, пока что он синхронен, но все будет сделано нормально в следующей версии вместе с progress bar.
http://cachegrindvisualizer.googlecode.com/files/CachegrindVisualizer-0.3b1.air
http://code.google.com/p/cachegrindvisualizer/
Версия 0.3 поддерживает AIR Beta 2, в этой версии среды улучшено производительность и управление памятью. Сам CachegrindVisualizer тоже стал кушать в разы меньше RAM благодаря использованию SQLite.
0. Теперь, с версии 0.3, CachegrindVisualizer отличается от WinCacheGrind не только тем, что умеет строить граф, но и поддержкой файлов неограниченного размера (2^53 байт). В версии 0.3 вы можете анализировать и держать открытыми несколько файлов, каждый из которых может весить как минимум 4 ГБ. При этом результаты анализа сохраняются и вы можете как повторно их открыть без необходимости ждать, так и переслать куда-нибудь (переименование файла возможно, программа все равно догадается). Единственный нюанс в поддержке больших файлов в том, что если вы раскроете все дерево вызовов, то, разумеется, оно все и будет загружено в память (в дерево подгружаются не все данные, но наиболее большие - имя функции и имя файла) — но это маловероятно — на большом дереве у вас быстрее устанет рука, чем закончится RAM

Отключение режима live mode в следующем выпуске. (Так как при работе с 4 ГБ файлом live mode (то есть режим реального времени) фактически вешает машину, теперь его можно отключить, и самостоятельно после настройки нажать на кнопку, чтобы граф был построен. Данная настройка сохраняется между запусками программы — если кому это не нравится и хочется чтобы она сбрасывалась в значение по умолчанию — включено — пишите, но мне кажется, что это правильное поведение).
Учтите, что поддержка файлов размером до 2^53 байт не протестирована на файлах более 70 МБ, и есть 1 решение в реализации, которые может помешать открытию таких файлов — выбор типа uint (2^32) для идентификации ребра.
1. Добавлена автоматическая регистрация типа файла cachegrind out, то есть, после установки CachegrindVisualizer открытие файла с расширением .cg приведет к открытию его в CachegrindVisualizer (если CachegrindVisualizer уже открыт, то к уже имеющимся вкладкам будет добавлена новая). Спасибо Дерику Ретхансу за расширение параметра конфигурации xdebug.profiler_output_name — для работы этой функции вы должны установить xdebug.profiler_output_name в %t.cg (xdebug.profiler_output_name = %t.cg), спецификатор %t можете заменить на любой другой.
2. Запуск из консоли — абсолютные имена файлов через пробел ("C:\Program Files\CachegrindVisualizer\CachegrindVisualizer.exe" "C:\tmp\1196673587.cg" "C:\tmp\1196673584.cg").
3. Fixed: Для хранения времени (собственного и общего, в мс) был выбран тип uint. Это означало, что время выполнения всегда было равно 0, если оно на самом деле было равно 0,8 или 0,6 мс. Вроде маленькая погрешность, но при суммировании

4. Fixed: Так как xdebug не подсчитывает полное время исполнения деструктора, то мы это делаем сами — в прежних версиях это была только сумма полного времени детей, теперь эта ошибка исправлена — к сумме полного времени детей прибавляется исключительное время деструктора (впрочем, понятно, что это время обычно очень мало и разницы вы не заметите, но мало ли).
От KCacheGrind CachegrindVisualizer отличается тем, что граф не просто проверяет ваш монитор на поддержку цветов радуги, а информирует о времени выполнения узла (модель HSV). Также граф локализуется — форматирование в соответствии с локалью.
На текущий момент CachegrindVisualizer ориентирован исключительно на построение графа, вспомогательные/альтернативные таблицы данных и графики (карты, диаграммы, гистограммы и т. п.) не реализованы, — и не будут без соответствующих запросов, так как меня вполне удовлетворяет граф (но парсер учитывает всю информацию, так что никакой работы помимо реализации желаемого графика не потребуется).
Что нужно еще доделать:
1) возможность отключения live mode.
2) информирование о текущей загруженной конфигурации.
3) загрузка или сохранение конфигурации должно приводить к выбору этой конфигурации при следующем запуске программы.
4) progress bar
Исходный код в публичном репозитарии, но только CachegrindVisualizer, а не каркаса, который он использует — пока что лениво (будет выложено к новому году с другим opensource проектом) его выкладывать, если кто-то захочет сам скомпилировать — пришлю код каркаса и инструкции по настройке (я не использую жесткую привязку к путям, но переопределен mxml-manifest c flex-config и перегружен Singleton менеджера ресурсов). Если будете использовать Flex Builder — сразу же отключите параметр "Collapse Inherited Members" — ирония в том, что действие этого параметра помимо своего прямого назначения имеет действие и на просмотр массива с количеством элементов в районе нескольких сотен тысяч. Если вы оставите как есть — Collapse — то будет как раз не Collapse — и вы вспомните иной перевод этого слова.
Как пользоваться и более полная информация о программе в первом сообщении в теме посвященной версии 0.1.
Что делать с полученным от программы файлом на языке dot? Его можно просмотреть и удобно с ним работать в ZGRViewer, 2.5D визуализаторе.
1 Установить Graphviz и ZGRViewer.
2 Настроить ZGRViewer.
2.1 Открыли ZGRViewer (в windows это run.bat, в linux run.sh — файл на языке dot кроссплатформен).
2.2 File -> Preferences -> Directories пишем пути к программам, обычно это C:\Program Files\Graphviz\bin\dot.exe (вместо dot для остальных соответственно neato, circo и т. д.), нажимаем Save (да, за юзабилити надо бить, но времени помочь автору ZGRViewer нет) и закрываем окно.
2.3 Правой клавишей мыши щелкаем по файлу: появляется контекстное меню — Открыть с помощью -> Выбрать программу -> выбираем ZGRViewer и ставим галку "Использовать выбранную программу для всех файлов такого типа" -> ОК. Если открылось нормально, переходим к следующем шагу, если нет — разбираемся с путями. Тем кто в windows — поблагодарите архитекторов за ненадобность искать девушку, откройте run.bat и установите переменную ZGRV в абсолютный путь к папке ZGRViewer. Все пути в настройках ZGRViewer должны быть абсолютными, вместе с буквой диска.
Все. Теперь щелкаем по dot файлу и будет сразу открываться ZGRViewer.
Кстати, судя по этой теме, не все в курсе, что профилирование можно использовать и для понимания того, как же программа работает.
-~{}~ 13.12.07 21:55:
Сегодня вышел AIR Beta 3, так что это был повод выпустить версию CachegrindVisualizer 0.3 beta 2. Так как особых замечаний не поступило, ничего нового не реализовано.
* анализ стал асинхронным, приложение не замирает во время чтения больших файлов.
* в разы увеличена скорость анализа за счет кеширования страниц БД, цена этого — потребление памяти — максимум 300 МБ (так как данная программа для программистов, не думаю что у кого-то будут проблемы, но если что — пишите, для меня важна скорость и, обладая 3 ГБ памяти, лениво ставить маленький размер кеша).
* fixed: устранена утечка памяти после анализа файла.
* fixed: восстановлена работа фильтра (в первой бете был отключен), делающего граф более чистым — нет дублирующих значений (случай, когда метка острия стрелки равна метке ребра). Метка острия вообще не реализована в KCacheGrind, я и сам забыл зачем оно надо — соотношение собственного/полного когда вызов нескольких детей, а мы хотим знать по каждому ребенку, - где-то в release notes написано

Товарищи использующие Mac — как минимум до весны 2008 анализ в CachegrindVisualizer будет медленнее, чем в Windows — это связано с SQLite.
Для больших файлов (от 50 МБ) вторая бета анализирует в 5 раз медленнее чем первая, поэтому эта версия пока не выпущена как стабильная. (Впрочем, заметно это будет только на больших файлах).
-~{}~ 13.12.07 22:05:
http://cachegrindvisualizer.googlecode.com/files/CachegrindVisualizer0.3b2.air
Среду нужно обновить до AIR Beta 3 - http://labs.adobe.com/downloads/air.html
Кстати, не забудьте в настройках ZGRViewer включить antialiasing.
-~{}~ 14.12.07 19:49:
Наверное, утилита никому не нужна, да и я сам ей пока что не пользуюсь, раз никто не послал меня на http://www.xdebug.org/archives/xdebug-dev/1185.html

Зато теперь CachegrindVisualizer единственная утилита под windows и mac визуализирующая профилирование xdebug.
-~{}~ 15.12.07 21:02:
final 0.3 - все что планировалось (кроме progress bar) + возможность указать заголовок для графа (собственно текст и где - снизу или сверху). live mode решен умным таймером - когда вы начнете вводить в numeric stepper желаемый minNodeCost то не сразу будет строиться - в начале ведь может быть 0
