#c #linux #memory-management #embedded #mpi
#c #linux #управление памятью #встроенный #mpi
Вопрос:
В последнее время я немного покопался и пытаюсь понять, какой наилучший подход заключается в отслеживании использования памяти в программном обеспечении реального времени, которое всегда запущено в Linux (в данном случае на нескольких узлах, использующих MPI). Поскольку для кода нет конечного условия, я хочу иметь возможность отслеживать использование памяти в режиме реального времени, чтобы видеть, какой образ MPI используется больше всего, какие функции используются больше всего, сколько использует каждый узел и сколько использует весь исполняемый файл во всей системе.
Существуют ли уже инструменты для такой вещи? Похоже, что большинство вещей, которые я нахожу, являются профилировщиками, которые выдают результаты после факта. Надеюсь, ответ сможет отслеживать использование памяти моим программным обеспечением и библиотеками сторонних разработчиков, которые использует мое программное обеспечение, к исходному коду которых у меня нет доступа.
Комментарии:
1. Linux .. спасибо, что спросили, забыл упомянуть об этом
Ответ №1:
Обычно ОС может динамически предоставлять данные во время выполнения для каждого исполняемого файла / потока (см., например, команду Linux ps
).
Если вы хотите отслеживать вызывающих пользователей, то вы можете переопределить операторы new
и delete
, чтобы собирать данные о распределении / выпуске во время выполнения и отслеживать, какая функция их вызвала, и где-то регистрировать.
Ответ №2:
Как предложил littleadv: я бы переопределил new / delete (возможно, malloc / free) и отслеживал выделения и их размер. Хороший способ отслеживать такие распределения — просто передавать их в файл или через сетевой поток, чтобы другая программа могла анализировать журналы. Довольно просто написать скрипт на python / lua для анализа журналов (если вы правильно их форматируете), который может предоставить вам информацию в хорошем виде.
Переопределение выделения памяти сторонним программным обеспечением может быть грубым в зависимости от того, как вы их связываете. Переопределение памяти через DLL часто сопряжено с большими трудностями, поэтому посмотрите, можете ли вы связать их статически, чтобы заставить их использовать ваши выделения.
Комментарии:
1. Ах, мне было интересно, возможно ли это при статическом связывании
Ответ №3:
Взгляните на vstat
. (справочные страницы для vstat)