Как рассчитать нагрузку на Cpu во встроенных устройствах: методы и лучшие практики

Мониторинг нагрузки на ЦП во встроенных устройствах является фундаментальным аспектом разработки встроенных систем, который непосредственно влияет на производительность, надежность и долговечность системы. Понимание нагрузки на процессор во встроенной системе важно, но часто упускается из виду и служит шагом к анализу способности вашего процессора соответствовать системным срокам. Независимо от того, разрабатываете ли вы устройства IoT, системы управления автомобилем, оборудование промышленной автоматизации или медицинские устройства, точное измерение нагрузки на ЦП помогает выявить узкие места производительности, оптимизировать использование ресурсов и обеспечить соответствие вашей системы требованиям реального времени. Это всеобъемлющее руководство исследует методы, методы и лучшие практики для расчета и мониторинга нагрузки на ЦП во встроенных средах.

Понимание нагрузки и использования процессора в встроенных системах

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

Определение загрузки и использования CPU

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

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

CPU Load vs. CPU Utilization: Terminology Clarification (недоступная ссылка — история).

Инженеры из мира UNIX знакомы с термином CPU load, который относится к другой концепции: что такое среднее количество выполняемых плюс ожидающих задач в определенный момент времени, что полезно в сценариях, где система перегружена. Однако встроенные программисты используют термины CPU load и CPU useation interchangeably для обозначения использования CPU. На протяжении всей этой статьи мы будем использовать эти термины interchangeably, фокусируясь на контексте встроенных систем.

Почему контроль нагрузки процессора имеет значение

Точное измерение нагрузки ЦПУ служит нескольким критическим целям при разработке встроенных систем:

Фундаментальные методы расчета нагрузки CPU

Существует несколько методов определения нагрузки ЦПУ во встроенных средах, каждая со своими преимуществами, ограничениями и подходящими вариантами использования.Выбор метода зависит от аппаратных возможностей, требуемой точности, ограничений накладных расходов на измерение и фазы разработки.

Метод контроля нерабочего задания

Метод мониторинга неработающих задач является одним из наиболее распространенных и простых подходов к измерению использования процессора во встроенных системах с RTOS.

Как работает мониторинг нерабочих задач

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

Самый простой способ определения 0% использования - это увеличение счетчика в вашей праздной задаче и наблюдение за тем, сколько праздных подсчетов происходит в течение периода измерения. Если не выполняется никакой работы (помимо прерывания таймера), то это представляет собой максимальное количество праздных подсчетов и 0% использования.

Рассмотрение осуществления

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

Расчет использования CPU с помощью этого метода прост:

Использование процессора (%) = 100 - (Idle Counts / Maximum Idle Counts × 100)

Задание Измерение времени выполнения

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

Математический подход формулы

Общая нагрузка процессора равна суммированию (частота задачи × время выполнения в худшем случае). Эта формула обеспечивает теоретическую максимальную нагрузку процессора на основе сценариев выполнения в худшем случае, что особенно ценно на этапе проектирования.

Реализация измерения времени выполнения

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

Реализация обычно включает в себя:

  1. Захват метки времени в начале каждой задачи с использованием таймера высокого разрешения
  2. Захват другой метки времени в конце задания
  3. Расчет разницы для определения времени выполнения задачи
  4. Накопление этих значений во всех задачах
  5. Разделение общего времени выполнения на окно измерения для получения процента использования процессора

Аппаратное контр-обоснованное измерение

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

Преимущества Hardware Counters

Подход к осуществлению

Реализация аппаратного счетчика варьируется в зависимости от архитектуры процессора. Общие подходы включают:

Метод Loop Counter Method

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

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

Автоматизированные методы расчета

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

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

RTOS-Specific CPU Load Monitoring (Мониторинг нагрузки)

Операционные системы реального времени часто предоставляют встроенные механизмы и API для мониторинга нагрузки процессора, что облегчает и стандартизирует реализацию проектов.

FreeRTOS CPU Load Monitoring

FreeRTOS, одна из самых популярных встраиваемых платформ RTOS, предлагает несколько механизмов для отслеживания использования процессора.

Конфигурация статистики времени выполнения

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

Чтобы включить статистику времени выполнения в FreeRTOS, вам нужно:

  1. Настройка configGENERATE RUN TIME STATS на 1 в FreeRTOSConfig.h
  2. Определить portCONFIGURE TIMER FOR RUN TIME STATS() для настройки таймера высокого разрешения
  3. Определить portGET RUN TIME COUNTER VALUE(), чтобы вернуть текущее значение таймера
  4. vTaskGetRunTimeStats(] для получения форматированной статистики

Функция Idle Hook

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

Zephyr RTOS CPU Статистика

Zephyr RTOS предоставляет статистику времени выполнения потоков через свои службы ядра. Система отслеживает время выполнения для каждого потока и предоставляет API для запроса этой информации. Ключевые функции включают:

Другие платформы RTOS

Большинство коммерческих и открытых платформ RTOS предлагают аналогичные возможности:

Методы внешних измерений

В дополнение к программным методам измерения, внешние инструменты и методы могут обеспечить ценную информацию об использовании процессора без изменения встроенного программного обеспечения.

Метод Toggle от GPIO

Метод переключения GPIO включает в себя установку штифта GPIO высоко, когда процессор активен, и низко, когда он простаивает, а затем измерение рабочего цикла внешне.

Многометровая техника

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

Шаги осуществления:

  1. Конфигурировать GPIO-пин в качестве вывода
  2. Установите штифт высоко в входе холостого задания
  3. Установите штифт низко в выходе холостого задания
  4. Подключить мультиметр в режиме постоянного напряжения к штифту
  5. Считывание напряжения (в процентах от VCC) представляет использование ЦП

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

Осциллограф / Логика Анализатор Техника

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

Преимущества перед многометровой техникой:

Инструменты для поиска и отслеживания

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

SEGGER SystemView (недоступная ссылка)

SEGGER SystemView обеспечивает запись и визуализацию событий RTOS в режиме реального времени, включая загрузку процессора. Он использует возможности процессора отслеживания (такие как встроенный трек ARM Macrocell) для захвата данных выполнения с минимальным вторжением. Функции включают в себя:

Персепио Трацеальцер

Tracealyzer предлагает комплексное отслеживание и анализ RTOS, включая подробные показатели загрузки процессора. Он поддерживает несколько платформ RTOS и дает представление о:

Лаутербах ТРАСЕ32

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

Расширенные методы анализа нагрузки CPU

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

Измерение нагрузки в перерывах

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

Подходы к осуществлению включают:

Многоядерный мониторинг нагрузки CPU

Загрузка процессора рассчитывается на ядро (CPU0, CPU1), а родительская область показывает среднее значение всех ядер. Загрузка для всего процессора - это среднее значение всех отдельных загрузок ядра. Многоядерные системы требуют использования отслеживания для каждого ядра независимо, а также обеспечивают совокупные метрики на уровне системы.

Рассмотрение вопроса о многоядерном мониторинге:

Анализ гистограммы

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

Преимущества гистограммного анализа:

Статистический анализ и тренды

Долгосрочный мониторинг нагрузки ЦП с помощью статистического анализа дает представление о поведении системы в течение длительных периодов времени:

Лучшие практики для точного измерения нагрузки CPU

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

Выбор подходящих интервалов выборки

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

Минимизация затрат на измерение

Акт измерения нагрузки ЦП потребляет ресурсы ЦП, потенциально влияя на саму измеряемую метрику. Стратегии минимизации накладных расходов включают:

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

Устранение последствий прерывания

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

Лучшие практики обработки прерываний при измерении нагрузки ЦПУ:

Калибровка и базовое установление

Точные измерения нагрузки ЦП требуют правильной калибровки:

  1. Установить базовую линию использования: Измерить систему в известном состоянии холостого хода для определения 0% использования
  2. Проверить полную загрузку: Создать известное 100%-ное условие нагрузки для проверки точности измерения
  3. Счет для кода измерения: Понять и документировать накладные расходы, введенные измерительными приборами
  4. Регулярная рекалибровка: Рекалибровка после значительных изменений кода или изменений уровня оптимизации компилятора

Перекрестная проверка с несколькими методами

Использование нескольких методов измерения обеспечивает уверенность в результатах и помогает идентифицировать измерительные артефакты:

Документация и отчетность

Комплексная документация гарантирует, что измерения нагрузки процессора остаются полезными на протяжении всего жизненного цикла продукта:

Примеры практического осуществления

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

Простая Idle Counter реализация

Базовая реализация простаивающего счетчика для голых металлических или простых систем RTOS:

  1. Определение глобальных переменных для подсчета и расчета использования холостого хода
  2. Реализовать периодическое прерывание таймера (например, 1-секундный интервал)
  3. В холостой петле непрерывно нарастите холостой счетчик
  4. В прерывании таймера, захват текущего счета холостого хода, вычислить использование и сброс счетчика
  5. Хранить или передавать значение использования для мониторинга

Основные соображения:

Задача Исполнение Отслеживание времени

Для систем, требующих данных об использовании по задачам:

  1. Настройка таймера высокого разрешения (микросекунда или лучшее разрешение)
  2. Создайте структуру данных для хранения времени выполнения задачи
  3. При входе в задачу, захват текущего времени метки
  4. При выходе из задачи вычислите прошедшее время и скапливайтесь к общей задаче
  5. Периодически рассчитывать процент использования для каждой задачи.

Этот подход дает подробную информацию о том, какие задачи потребляют больше всего ресурсов ЦП, что позволяет целенаправленно оптимизировать усилия.

Пример статистики времени выполнения FreeRTOS

Внедрение мониторинга нагрузки ЦП в FreeRTOS включает в себя:

  1. Настройка таймера с более высоким разрешением, чем у системы тиканье
  2. Включение статистики времени выполнения в FreeRTOSConfig.h
  3. Внедрение необходимых макросов конфигурации таймера
  4. Создание задачи мониторинга, которая периодически вызывает vTaskGetRunTimeStats()
  5. Парсинг и отображение или регистрация статистики

Статистика выполнения обеспечивает как абсолютное время выполнения, так и процентное использование для каждой задачи, что позволяет легко идентифицировать операции с интенсивным процессором.

GPIO Toggle для внешних измерений

Внедрение метода GPIO Toggle:

  1. Конфигурировать GPIO-пин в качестве вывода
  2. Установите высокий штифт в начале праздной задачи
  3. Установите штифт низко при выходе из праздной задачи
  4. Подключите осциллограф или мультиметр для измерения рабочего цикла
  5. Расчет использования ЦП как (100 - процент рабочего цикла)

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

Обычные подводные камни и как их избежать

Измерение нагрузки процессора может быть обманчиво сложным, и несколько распространенных ошибок могут привести к неточному или вводящему в заблуждение результату.

Проблемы оптимизации компилятора

Оптимизация компилятора может помешать коду измерения:

Решения включают использование летучих квалификаторов, барьеров компилятора и проверку генерируемого кода сборки.

Разрешение таймера и переполнение

Недостаточное разрешение таймера или неправильная обработка переполнения приводят к ошибкам измерения:

Измерение эффектов вторжения

Сам код измерения влияет на поведение системы:

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

Неверные базовые предположения

Если исходные значения неверны, то это приводит к систематическим ошибкам:

Всегда устанавливайте исходные линии с помощью фактических измерений, а не теоретических предположений.

Неадекватное тестовое покрытие

Измерение нагрузки на ЦП в ограниченных условиях обеспечивает неполную картину:

Оптимизация загрузки процессора во встроенных системах

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

Стратегии оптимизации программного обеспечения

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

Подходы к оптимизации программного обеспечения включают:

Архитектурные подходы

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

Аппаратные решения

Когда оптимизация программного обеспечения достигает своих пределов, могут потребоваться аппаратные решения:

Рассмотрение вопросов управления электроэнергией

Оптимизация нагрузки процессора часто пересекается с управлением питанием:

Отраслевые стандарты и требования безопасности

Многие отрасли имеют особые требования и стандарты, касающиеся нагрузки на процессор во встроенных системах, особенно для приложений, требующих безопасности.

Автомобильные стандарты

Критические приложения в значительной степени регулируются отраслевыми стандартами, такими как автомобильный ISO 26262, которые диктуют максимальный уровень нагрузки на процессор для удовлетворения внезапных всплесков обработки. Например, в Automotive предполагаемая нагрузка на процессор должна составлять от 65 до 70%.

Требования ISO 26262 включают:

Аэрокосмические стандарты

DO-178C и соответствующие стандарты для аэрокосмических применений требуют:

Стандарты медицинского оборудования

IEC 62304 для программного обеспечения медицинского оборудования требует:

Промышленная автоматизация

МЭК 61508 для обеспечения функциональной безопасности в промышленных системах:

Инструменты и ресурсы для анализа нагрузки CPU

Различные коммерческие и открытые инструменты поддерживают измерение и анализ нагрузки процессора во встроенных системах.

Коммерческие инструменты

Инструменты с открытым исходным кодом

Аппаратные инструменты

Онлайн-ресурсы и сообщества

Будущие тенденции в мониторинге нагрузки ЦПУ

По мере развития встроенных систем также развиваются методы и требования мониторинга нагрузки процессора.

Интеграция машинного обучения

Алгоритмы машинного обучения применяются для анализа нагрузки ЦП:

Мониторинг облачных вычислений

Встраиваемые устройства с поддержкой IoT все чаще поддерживают облачный мониторинг:

Улучшенная поддержка аппаратного обеспечения

Современные процессоры включают в себя более сложный мониторинг производительности:

Усилия по стандартизации

Усилия отрасли по стандартизации мониторинга эффективности:

Заключение

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

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

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