The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Представлен React, инструментарий для измерения времени выполнения блоков кода в проектах на C/C++

15.05.2014 11:14

Разработчики файловой системы PohmelFS и распределённого хранилища Elliptics представили инструментарий React (Real-time Call Tree), предназначенный для отслеживания времени выполнения различных частей кода в проектах на языках C и C++. React предоставляет специальную библиотеку, позволяющую добавлять специальные метки в код и генерировать дерево выполнения блоков, выводимое в формате JSON и учитывающее время работы программы в каждом из блоков.

Для анализа накопленных данных поставляется скрипт для визуализации информации в форме графиков. Применение React уже позволило значительно поднять эффективность организации работы с кэшем в проектах Elliptics и Eblob. При разработке библиотеки основное внимание уделено минимизации накладных расходов в процессе измерения и простоте использования. Код поставляется под лицензией LGPLv2.1.



  1. Главная ссылка к новости (http://www.ioremap.net/node/97...)
  2. OpenNews: Новый вариант распределённой файловой системы POHMELFS готов для включения в ядро Linux
  3. OpenNews: Представлен полностью переработанный вариант распределённой файловой системы POHMELFS
  4. OpenNews: Анонсирован выход распределенного хранилища Elliptics 1.0.0
  5. OpenNews: Вышел релиз сетевой файловой системы POHMELFS
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/39780-benckmark
Ключевые слова: benckmark, test, debug
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (44) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, A.Stahl (ok), 11:29, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А разве valgrind этого не умеет?
    Именно время никогда особо не интересовало, но скорее всего он должен это уметь.
     
     
  • 2.4, Nuzhny (?), 11:41, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А разве valgrind этого не умеет?
    > Именно время никогда особо не интересовало, но скорее всего он должен это
    > уметь.

    callgrind умеет, но немного не то.

     
  • 2.6, ф (?), 11:53, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Если чуть внимательнее новость читать, то генерация идёт на основе _меток_ добавленных. В валгринде я меток не помню.
     
     
  • 3.15, A.Stahl (ok), 12:32, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну да, т.е. валгринд ещё удобней:)
     
  • 3.16, rob pike (?), 12:56, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Там есть опция --show у callgrind_annotate
     

  • 1.2, rob pike (?), 11:29, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Могучая вещь - комплекс неполноценности.
    Как послали парня с его kevent-ом в LKML, так он с тех пор горы сворачивает.
    Профайлер вот изобрел. Ну всё ж не программу для управления коллекциями фотографий, и то хорошо.
     
     
  • 2.3, Nuzhny (?), 11:40, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Могучая вещь, конечно, но профайлер никто не изобретал. Читать внимательно: " You can think of it as a real-time callgrind with no overhead and user-defined call branches."
     
     
  • 3.5, rob pike (?), 11:50, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Ах, ну да, простите, Callgrind же у нас менеджер коллеций фотографий.
     
  • 3.8, ф (?), 11:55, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Могучая вещь, конечно, но профайлер никто не изобретал. Читать внимательно: " You
    > can think of it as a real-time callgrind with no overhead
    > and user-defined call branches."

    Просто комментаторы как обычно говорят о том, чем не пользовались.

     
     
  • 4.11, rob pike (?), 12:15, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Это точно. Они ничего кроме кислых щей и лаптей и не видали.
    Ну может еще один глобальный счетчик вложенности, преаллоцированный буфер, указатель текущей в нем позиции, snprintf в местах меток да перловый скрипт из 15 строк.
    А тут такие технологии двадцать второго века, дефайны вместо snprintf-а, масштаб инноваций-то сложно так вот сразу осознать.
     
     
  • 5.17, _yurkis_ (ok), 13:05, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И тем не менее... Вполне бывает нужно. Приведите пример АНАЛОГИЧНОГО инструмента, который лучше и я, вполне возможно, буду его пользовать. А пока посмотрю это или и дальше буду своим аналогичным костылем пользоваться.
     
     
  • 6.18, rob pike (?), 13:18, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Если серьезно, то основной плюс React-а (и самодельных костыликов) в том что (почти все) традиционные профайлеры рассматривают программу как набор функций - название Callgrind нам об этом ненавязчиво напоминает.
    В современных же реалиях значение имеют скорее отдельные statements.

    А совсем в идеале надо печатать трассу где рядом с каждым statement-ом будет стрелочка туда куда ожидал branch prediction в процессоре (хотя, кажется, этого даже интел не умеет рассказывать), с большим красным восклицательным знаком если следующая инструкция не оправдала его надежд, ну или хотя бы там где кэши L1-3 пришлось сбрасывать.

     
     
  • 7.34, Аноним (-), 17:47, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Use VTune, Luke.
     
     
  • 8.41, rob pike (?), 18:29, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не всегда нужно ездить за хлебом на самолете Да и VTune далеко не без недостатк... текст свёрнут, показать
     
  • 7.45, rob pike (?), 19:37, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Cachegrind выглядит относительно неплохо, но http://valgrind.org/docs/manual/cg-manual.html (пункты 5.8.2 и 5.8.3)
     
  • 6.32, Uri (??), 17:22, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    http://www.agner.org/optimize/#testp

    Элементарно встраивается в любой код. Позволяет снимать не только время выполнения куска кода, но и такие (если, конечно, проц поддерживает) счетчики, как количество сделанных бренчей, количество неправильно предсказанных их же, количество выполненных микроопераций и т.д. и т.п.

    Сбрасывай все в файл и визуализируй сколько хочешь, чем хочешь и как хочешь.

    p.s. Я хуею, дорогая редакция, неужели у опеннета нету новостей, что приходится какой-то детский самокатик в новости выкатывать??

     
     
  • 7.42, rob pike (?), 18:31, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Что-то мне подсказывает что со счетчиками perf справляется куда лучше.

     
  • 7.47, acid (?), 21:26, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > http://www.agner.org/optimize/#testp
    > Элементарно встраивается в любой код. Позволяет снимать не только время выполнения куска
    > кода, но и такие (если, конечно, проц поддерживает) счетчики, как количество
    > сделанных бренчей, количество неправильно предсказанных их же, количество выполненных
    > микроопераций и т.д. и т.п.
    > Сбрасывай все в файл и визуализируй сколько хочешь, чем хочешь и как
    > хочешь.
    > p.s. Я хуею, дорогая редакция, неужели у опеннета нету новостей, что приходится
    > какой-то детский самокатик в новости выкатывать??

    Отличная утилита! Я не сомневаюсь, что она великолепно справляется с задачей, которая перед ней ставится, а именно:
    "Can measure clock cycles and performance monitor counters such as cache misses, branch mispredictions, resource stalls etc. in a small piece of code in C, C++ or assembly"

    React предназначен для постоения Trace'а в большой системе, в которой мы считаем не количество операций увеличивания счётчика, etc, а количество сетевых запросов, запросов работы с диском, тяжелых вычислительных функций.

     
     
  • 8.52, Ури (?), 09:50, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ок Был невнимателен ... текст свёрнут, показать
     
  • 2.14, Аноним (-), 12:31, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Могучая вещь - комплекс неполноценности.

    Действительно, даже имя известного человека в качестве ника заставляет использовать...

     
     
  • 3.19, rob pike (?), 13:20, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Посоветуйте имя какого-нибудь неизвестного.
     
     
  • 4.25, Аноним (-), 16:13, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    вот подходящий ник для тебя: "пустоголовое трепло"
     
     
  • 5.30, arisu (ok), 16:51, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > вот подходящий ник для тебя: "пустоголовое трепло"

    у школьников подгорают анусы. упоительное зрелище.

     
     
  • 6.37, rob pike (?), 18:26, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На том стоим.
     
     
  • 7.51, Аноним (-), 00:01, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На анусах? ;)
     

  • 1.7, rob pike (?), 11:54, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Запилите к этой штуке https://github.com/brendangregg/FlameGraph кто-нибудь, кстати.
     
     
  • 2.13, rob pike (?), 12:29, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И посылатель в statsd в отдельном треде, с регулируемым интервалом посылания накопленного.
     
     
  • 3.27, acid (?), 16:16, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > И посылатель в statsd в отдельном треде, с регулируемым интервалом посылания накопленного.

    Это можно сделать уже сейчас.
    Для этого необходимо создать свой aggregator, который будет посылать call_tree в statsd/"ваш любимый коллектор" при вызове мегода aggregate, и передать этот aggregator при создании контекста react-a в функцию react_activate.
    После этого можно вызывать react_submit_progress для сабмита текущего состояние call_tree.

     
     
  • 4.35, rob pike (?), 18:20, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Что-то я не помню чтоб там в коде была реализация UDP-протокола statsd.
     
     
  • 5.48, acid (?), 21:35, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Что-то я не помню чтоб там в коде была реализация UDP-протокола statsd.

    React это утилита для сбора статистики выполнения программы. Способы, которыми она сбрасывает статистику на диск, находятся вне её компетенции и могут быть любыми.
    Если вы хотите использовать в качестве коллектора statsd, вам необходимо получить
    во время исполнения программы call_tree, которое сгенерирует react, а затем воспользоваться
    одним из многих клиентов для statsd, например https://github.com/talebook/statsd-client-cpp
    что-бы отправить собранную react'ом статистику туда.

     

  • 1.9, Аноним (-), 11:55, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Pohmel? Да это название почище Pidora будет.
     
     
  • 2.10, rob pike (?), 12:00, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Это традиционные россиянские приколы.
    GIN и VODKA - индексы в PostgreSQL, например.
     
  • 2.50, Аноним (-), 23:59, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Превед танкистам! :)
    Оно уж давно аносировано https://www.opennet.ru/opennews/art.shtml?num=15561
     

  • 1.12, trdm (ok), 12:26, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    А я все жду когда в QtCreator вставят профайлер наподобие того, что есть в кодеблоке )
     
  • 1.20, Аноним (-), 13:46, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Было бы header-only - еще можно было бы о чем-то говорить.
     
     
  • 2.24, acid (?), 16:08, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Привет! Изначально React действительно был header-only, но потом появилась необходимость поюзать его в C. Недавно я придумал, как сделать его header-only в С++, что-бы это осталось совместимым с С-шной версиеи. В ближайшее время запилю. Если интересно - спрашивайте.
     
     
  • 3.36, rob pike (?), 18:25, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем? Необходимость С-интерфейса очевидна и понятна с первой секунды для таких тулзов.
    Какую функциональность добавляет С++ интерфейс?
     
     
  • 4.43, Аноним (-), 18:46, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Как раз с точностью до наоборот.
     
     
  • 5.44, rob pike (?), 18:57, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Какую функциональность добавляет С++ интерфейс?
     
  • 5.49, acid (?), 21:39, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Как раз с точностью до наоборот.

    Нормальный синтаксис, отсутствие необходимости таскать void*, возможность простого расширения, постоения своих аггрегаторов для любых систем сбора trace'ов.

    На C нельзя реализовать очень удобную для мониторинга концепцию guard'а

    Не надо реализовывать 5 одинаковых с точки зрения реализации функций
    add_stat_int
    add_stat_bool
    add_stat_string
    ...

    Главный аргумент: удобней пользоваться

     

  • 1.26, хрюкотающий зелюк (?), 16:14, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Я работал с разными профилировщиками... но именно такой инструмент мне был нужен!
     
     
  • 2.28, Аркадий (??), 16:18, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да-да! Я тоже не знаю, как раньше жил без реакта!
     

  • 1.33, Аноним (-), 17:39, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Похмель русскоговорящие разрабатывали?
     
     
  • 2.40, Аноним (-), 18:27, 15/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Похмель русскоговорящие разрабатывали?

    А что, есть сомнения?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру