Перейти к содержанию
    

Вычисление загрузки ЦПУ на stm32h7

1 час назад, Arlleex сказал:

P.S. Предложу свой вариант (на деле не проверял пока)

Ну вот, другое дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/30/2021 at 2:49 AM, Arlleex said:

Например, вот так.

Вообще, процессор загружен всегда, если не спит.

Не совсем верно. В RTOS время сжигают в idle thread у которого самый низкий приоритет. Команду спать никто не вызывает.

On 4/30/2021 at 7:44 AM, jcxz said:

Неудобный какой-то метод... Обычный способ со счётчиком в низкоприоритетной idle-задаче имхо - лучше. И DWT.CYCCNT не требует....

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

Для системы без RTOS можно считать сколько раз прокрутился главный цикл в единицу времени. Чем чаще крутится тем процессор свободнее.

 

Для Линукса в директории /proc/ "все ходы записаны". Просто прочитать для всех процессов и суммировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Tarbal сказал:

В RTOS время сжигают в idle thread у которого самый низкий приоритет. Команду спать никто не вызывает.

Команду "спать" как раз и вставляют в этот idle thread, чтобы попусту не превращать электричество в тепло. Внезапно.

3 часа назад, Tarbal сказал:

Точнее неправильный метод.

Давайте конкретнее: что в нем неправильно?

3 часа назад, Tarbal сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 часов назад, Tarbal сказал:

Не совсем верно...

Еще как верно:wink: Потому как не было указано вовсе никаких ОС. Но даже если так: процессор выполняет команды, даже находясь в idle-цикле, а значит работает. Еще раз: процессор не загружен, если спит (либо не остановлен по какой-то другой причине - halt, power-off). Абсолютная загрузка CPU - это, все-таки, несколько другое по отношению к распределению процессорного времени по задачам в RTOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, Сергей Борщ said:

Команду "спать" как раз и вставляют в этот idle thread, чтобы попусту не превращать электричество в тепло. Внезапно.

И сразу процессы, работавшие без участия прерываний становятся проблематичными.

17 hours ago, Сергей Борщ said:

Давайте конкретнее: что в нем неправильно?

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

17 hours ago, Сергей Борщ said:

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

Не всегда приемлемо. Работа и логика программы изменятся. А Грета со своим Соросом идут на.уй.

5 hours ago, Arlleex said:

Еще как верно:wink: Потому как не было указано вовсе никаких ОС. Но даже если так: процессор выполняет команды, даже находясь в idle-цикле, а значит работает. Еще раз: процессор не загружен, если спит (либо не остановлен по какой-то другой причине - halt, power-off). Абсолютная загрузка CPU - это, все-таки, несколько другое по отношению к распределению процессорного времени по задачам в RTOS.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, Tarbal сказал:

И сразу процессы, работавшие без участия прерываний становятся проблематичными.

Каким образом они без прерываний отбирают управление у idle thread?

7 часов назад, Tarbal сказал:

Например базовая станция LTE или сетевой свич. Там нету сна

Значит загрузка 100% и измерять нечего.

7 часов назад, Tarbal сказал:

Не всегда приемлемо. Работа и логика программы изменятся.

нет, не изменится. Какая разница - ядро крутится в пустом цикле или спит? В обоих случаях оно не делает ничего полезного.

7 часов назад, Tarbal сказал:

А Грета со своим Соросом идут на.уй.

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

 

7 часов назад, Tarbal сказал:

Я говорю о том как измерить насколько использован ресурс процессора и сколько еще можно нагружать. Вы о том как экономить электричество.

Сэкономленное электричество прямо пропорционально неистраченному ресурсу процессора. Обычное косвенное измерение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, Сергей Борщ said:

Каким образом они без прерываний отбирают управление у idle thread?

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

 

11 hours ago, Сергей Борщ said:

Значит загрузка 100% и измерять нечего.

Вот уж неправда.

11 hours ago, Сергей Борщ said:

нет, не изменится. Какая разница - ядро крутится в пустом цикле или спит? В обоих случаях оно не делает ничего полезного.

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

Для систем на голом железе измениться может очень многое.

11 hours ago, Сергей Борщ said:

Сэкономленное электричество прямо пропорционально неистраченному ресурсу процессора. Обычное косвенное измерение.

Это подмена понятий.
Вопрос был задан: "Как измерить насколько использован ресурс процессора?", а не о том, с чем у этого ресурса есть прямая связь.

Это примерно как на вопрос "сколько времени?" ответить, что время напрямую связано с фазой вращения Земли вокруг оси и только знание фазы вращения Земли может дать ответ.

Да, так можно измерять, но есть и другие способы. Спать не обязательно, а иногда и недопустимо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 minutes ago, Tarbal said:

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

Видимо, речь все же идет о wfi/wfe, так что не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, aaarrr said:

Видимо, речь все же идет о wfi/wfe, так что не будет.

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

https://www.gsmarena.com/lg_gd900_crystal-2788.php

Там два процессора Arm-7 и Arm-9 и еще DSP кажется.

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

Я решил эту проблему.

Я не так много сделал в этом проекте, но моя работа была напрямую связана с определением загрузки процессора.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 часов назад, Tarbal сказал:

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

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

image.png.81e6957873ad84de0cf334889e05f8c0.png

image.png.5e635e476abf518cf41c45819aa8d6b2.png

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

image.thumb.png.1768804d021eb5d69691de04b4e46dc6.png

 

15 часов назад, Tarbal сказал:

Вот уж неправда.

Как так? Если ядро не спит - оно исполняет команды, то есть загружено. Если оно никогда не спит - оно загружено на 100%, разве нет? :blum3:

15 часов назад, Tarbal сказал:

Это примерно как на вопрос "сколько времени?" ответить, что время напрямую связано с фазой вращения Земли

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 hours ago, Сергей Борщ said:

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

image.png.81e6957873ad84de0cf334889e05f8c0.png

image.png.5e635e476abf518cf41c45819aa8d6b2.png

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

image.thumb.png.1768804d021eb5d69691de04b4e46dc6.png

Неплохо. Спасибо за информацию.

15 hours ago, Сергей Борщ said:

Как так? Если ядро не спит - оно исполняет команды, то есть загружено. Если оно никогда не спит - оно загружено на 100%, разве нет? :blum3:

Вопрос задан так, что надо решить "задачу с вычислением загрузки ЦПУ на stm32. " При этом не уточняется что исполняется на RTOS или просто на голом железе.
Если не спать в  idle task, то при загрузке на 100% можеть быть приличный ресурс процессора, который не использован. Мне непонятно к чему упражнятся в софистике.
Не делайте вид, что не понимаете этого.

15 hours ago, Сергей Борщ said:

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

Безусловно так и с этим я не спорю. Мне мешает, что вы подменяете понятия.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Tarbal сказал:

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

Про "единственно правильный" я не писал, не перевирайте. Я писал, что он вполне работоспособный и имеет право на жизнь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

07.05.2021 в 08:43, Сергей Борщ сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, Сергей Борщ said:

Про "единственно правильный" я не писал, не перевирайте. Я писал, что он вполне работоспособный и имеет право на жизнь.

Тогдя я не понимаю о чем мы с вами спорим. Наконец прояснили позиции и они в принципе совпадают.

5 hours ago, mantech said:

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

Именно так и управляют портебляемой мощностью в сложных устройствах. Там и напряжение питания меняют. Правда там процессоры питаются от напряжения около одного вольта.
Этим специальный чип занимается (как исполнительное устройство управления напряжением):
https://en.wikipedia.org/wiki/Power_management_integrated_circuit

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, Tarbal сказал:

Именно так и управляют портебляемой мощностью в сложных устройствах.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...