Профилирование системы VxWorks - PullRequest
0 голосов
/ 18 июля 2009

У нас есть довольно большое приложение, работающее на VxWorks 5.5.1, которое разрабатывалось и модифицировалось около 10 лет. У нас есть несколько простых отечественных инструментов, чтобы показать, что мы не используем слишком много памяти или слишком много процессора, но мы не очень хорошо понимаем, какой запас у нас на самом деле иметь. Это начинает усложнять оценку будущих улучшений.

У кого-нибудь есть предложения по профилированию такой системы? Нам никогда не удавалось заставить работать инструменты Wind River.

Для бонусных баллов: другая сложность заключается в том, что наша система в разное время ведет себя очень по-разному; во время запуска он делает много вещей, затем он сидит относительно без дела, за исключением кратких всплесков активности. Если есть профилировщик с каким-то программным способом для записи информации о состоянии, я думаю, это тоже будет очень полезно.

FWIW, это скомпилировано с GCC и полностью написано на C.

Ответы [ 3 ]

3 голосов
/ 19 июля 2009

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

Я могу только догадываться, откуда возникла «общеизвестная» идея, что для выявления проблем с производительностью необходимо измерять производительность различных компонентов. Это нисходящий подход, аналогичный тому, как правительства пытаются контролировать бюджетные расходы путем разделения. ИМХО, это не очень хорошо работает. Измерение в порядке, чтобы увидеть, изменило ли то, что вы сделали, но плохо, чтобы сказать вам, что исправить.

То, что хорошо - это сказать вам, что исправить, это подход снизу вверх, в котором вы изучаете репрезентативную выборку микроскопических единиц того, что тратится, и выясняете полное объяснение почему каждый тратится. Это работает по простой статистической причине. Если есть причина, по которой может быть сохранен некоторый процент (например, 40%) выборок, в среднем 40% выборок покажут это, и для этого не требуется огромное количество выборок. Это требует, чтобы вы тщательно изучили каждый образец, а не просто собирали их в большие пучки.

В качестве исторического примера, это то, что Гарри Трумэн сделал во время начала участия США во Второй мировой войне. В оборонной промышленности были потрясающие отходы. Он просто сел в свою машину, поехал на фабрики и взял интервью у стоящих вокруг людей. Затем он вернулся в Сенат США, объяснил, в чем именно заключались проблемы, и исправил их.

Может быть, это больше ответ, чем вы хотели. В частности, - это метод, который я использую , а - это пример его поразительного .

ДОБАВЛЕНО: Я думаю, что идея определения путем измерения просто естественна. Примерно в 82-м я работал над встроенной системой, и мне нужно было немного настроить производительность. Инженер по аппаратному обеспечению предложил установить на плате таймер, который я мог прочитать (предоставляя его из своего количества). Я предположил, что для выявления проблем с производительностью требуется время. Я поблагодарил его и отказался, потому что к тому времени я знал и доверял технике случайного останова (с помощью встроенного эмулятора).

1 голос
/ 20 июля 2009

Если у вас есть дополнительные часы, вы можете использовать утилиту SPY (настраиваемую через файл config.h), которая дает вам приблизительное представление о том, какие задачи используют ЦП.

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

В противном случае предложение btpierre об использовании taskHookAdd успешно использовалось в прошлом.

0 голосов
/ 19 июля 2009

Я работал над системами, которым повезло, используя локальные утилиты мониторинга, основанные на taskSwitchHookAdd и связанных с ними функциях (удаление хуков и т. Д.).

"Просто" используйте это, чтобы отследить количество тактов, которое выполняет данное задание. Я понимаю, что это довольно грубая информация для профилирования, но она может быть полезна в зависимости от ваших потребностей.

Чтобы узнать, сколько ЦП% использует каждая задача, рассчитайте процент тиков, назначенных для каждой задачи.

Чтобы увидеть, какой у вас запас запаса, добавьте задачу «idle» с самым низким приоритетом, которая просто выполняет «while (1) {}», и посмотрите, сколько процессорных процентов ему назначено. Грубо говоря, это ваш запас.

...