Отслеживание использования памяти во встроенном исполняемом файле MPI в реальном времени

#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)