2009-07-18 4 views
0

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

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

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

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

ответ

3

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

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

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

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

Возможно, это скорее ответ, чем вы хотели. В частности, this is the method I use и this is a blow-by-blow example of it.

ADDED: Я предполагаю, что идея измерения по измерению просто естественна. Вокруг '82 я работал над встроенной системой, и мне нужно было выполнить некоторую настройку производительности. Инженер-технолог предложил поставить таймер на доске, который я мог прочитать (предоставляя из его количества). IOW он предположил, что поиск проблем с производительностью требует времени. Я поблагодарил его и отказался, потому что к тому времени я знал и доверял методу случайной остановки (с помощью встроенного эмулятора).

0

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

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

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

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

1

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

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

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

Смежные вопросы