Size: a a a

2020 August 15

SE

Stanislav Ershov in pro.cxx
Antony Polukhin
Из забавного: Embarcadeo (бывший компилятор Borland) зашевелился и теперь шлёт патчи в Boost (последняя официально оттестированная на Boost версия Borland была ~40 релизов назад)
так они ж на основе шланга щас делают вроде
источник

AP

Antony Polukhin in pro.cxx
Stanislav Ershov
так они ж на основе шланга щас делают вроде
Ну у них и патчи - уберите этот workaround, он больше не нужен
источник

AN

Alexander N in pro.cxx
Stanislav Ershov
так они ж на основе шланга щас делают вроде
Лол что. На основе шланга? То есть по сути там их только всякие штуки rad итд
источник

SE

Stanislav Ershov in pro.cxx
Alexander N
Лол что. На основе шланга? То есть по сути там их только всякие штуки rad итд
источник

AN

Alexander N in pro.cxx
Дропнцли свой компилер
источник

AD

Apache DOG™ in pro.cxx
Alexander Zaitsev
есть некий сервис на С++, который состоит из множества частей. Хотелось бы понимать в разные моменты времени, какие части приложения сколько выжрали оперативной памяти. То есть организовать достаточно детализированный профайлинг памяти для приложения.

Сейчас регулярно снимается стастика с аллокатора (jemalloc), но понятное дело, что это говорит только о ситуации для всего приложения.

Есть идеи, как подобное организовать?

Первое, что мне приходит в голову - разным частям приложения раздать разные аллокаторы и зафорсить по крайней мере для начала административно их использование в различных подсистемах приложения. Ну или свой аллокатор с какими-то метками для каждой части приложения, которые при аллоках\деаллоках будет заниматься подсчётом нужной статистики.

Почему не используются готовые утилиты профайлинга - они не дают нужной точности.

Если важно - С++14
Вай нот наколхозить макрос который на каждую аллокацию рисует переменная по ключу $x  увеличся? В жапке такое легко делается агентами
источник

AZ

Alexander Zaitsev in pro.cxx
Apache DOG™
Вай нот наколхозить макрос который на каждую аллокацию рисует переменная по ключу $x  увеличся? В жапке такое легко делается агентами
и как мне этот макрос прокинуть внутрь std::vector?
источник

m

magras in pro.cxx
Alexander Zaitsev
и как мне этот макрос прокинуть внутрь std::vector?
А все-таки, чего именно нужно добиться? Достаточно ли получить стэктрейсы всех аллокаций? Или нужно именно расставить тэги для каждой подсистемы?
источник

AD

Apache DOG™ in pro.cxx
Alexander Zaitsev
и как мне этот макрос прокинуть внутрь std::vector?
Да никак, поверх.
источник

DF

Dollar Føølish in pro.cxx
Стектрейс аллокации покажет и размер кстати
источник

DF

Dollar Føølish in pro.cxx
Потом агрегировать можно етот лог
источник

DF

Dollar Føølish in pro.cxx
Правда удобно ли будет определить  по нему подсистему с нужной гранулярностью
источник

AP

Antony Polukhin in pro.cxx
Alexander Zaitsev
есть некий сервис на С++, который состоит из множества частей. Хотелось бы понимать в разные моменты времени, какие части приложения сколько выжрали оперативной памяти. То есть организовать достаточно детализированный профайлинг памяти для приложения.

Сейчас регулярно снимается стастика с аллокатора (jemalloc), но понятное дело, что это говорит только о ситуации для всего приложения.

Есть идеи, как подобное организовать?

Первое, что мне приходит в голову - разным частям приложения раздать разные аллокаторы и зафорсить по крайней мере для начала административно их использование в различных подсистемах приложения. Ну или свой аллокатор с какими-то метками для каждой части приложения, которые при аллоках\деаллоках будет заниматься подсчётом нужной статистики.

Почему не используются готовые утилиты профайлинга - они не дают нужной точности.

Если важно - С++14
Там у jemalloc есть особый режим профилировки, он выдаёт достаточно подробную инфу о том, кто сколько сейчас держит памяти, кажется с трейсами. Включается какими-то рантайм флагами
источник

AP

Antony Polukhin in pro.cxx
Смогу вечером посмотреть поподробнее, как это делается
источник

AZ

Alexander Zaitsev in pro.cxx
Antony Polukhin
Смогу вечером посмотреть поподробнее, как это делается
было бы неплохо - спасибо
источник

AZ

Alexander Zaitsev in pro.cxx
Apache DOG™
Да никак, поверх.
просто это вариант со своими аллокаторами, который уже обсуждали выше
источник

AZ

Alexander Zaitsev in pro.cxx
magras
А все-таки, чего именно нужно добиться? Достаточно ли получить стэктрейсы всех аллокаций? Или нужно именно расставить тэги для каждой подсистемы?
если по ним возможно нормально восстановить время, место аллокаций и разбить на подсистемы, то наверное ок
источник

AZ

Alexander Zaitsev in pro.cxx
другой вопрос, надо будет подумать, как шаманить и приводить в нормальный вид эти самые трейсы
источник

AP

Antony Polukhin in pro.cxx
Alexander Zaitsev
просто это вариант со своими аллокаторами, который уже обсуждали выше
Во, смотри utrace в http://jemalloc.net/jemalloc.3.html

И дальше смотри utrace , например https://gist.github.com/git-blame/6de0085bb9fbc4b7bc31f5c4d83f12a3
источник

m

magras in pro.cxx
Alexander Zaitsev
если по ним возможно нормально восстановить время, место аллокаций и разбить на подсистемы, то наверное ок
Вообще можно переопределить глобальный operator new (и delete) и в нем писать лог и форвардить вызов в jemalloc. Естественно там можно и трейс снять, и размер. С тэгами подсистем сложнее, но если точек входа в подсистему немного, можно в них проставлять в thread local переменную свой тэг и в operator new его использовать при логировании.
источник