Стабильная частота процессора на imx6s

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

Согласно техническому справочному руководству для imx6s режим пониженного энергопотребления, процессор будет передан после WFI, конфигурируется LPM битами регистра CLPCR (стр. 855). Я установил биты LPM в 0x0, что упоминается как режим RUN. Насколько я понимаю, этого должно быть достаточно, чтобы не переводить процессор в какой-либо спящий режим (WAIT или STOP на imx).

Есть ли что-то еще за этим? Я что-то упустил здесь?

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


Приложение (как и что я измеряю):

Эксперимент выглядит следующим образом: 1. С WFI

p1 = ArmPmuGetCpuCycles()
Sleep(100 miliseconds)   <- here it goes to WFI
p2 = ArmPmuGetCpuCycles()
p2 - p1 = 600 microseconds

2. Без воды для инъекций

p1 = ArmPmuGetCpuCycles()
Sleep(100 miliseconds)   <- WFI is removed
p2 = ArmPmuGetCpuCycles()
p2 - p1 = 100 miliseconds

person Alex Hoppus    schedule 21.02.2018    source источник
comment
Непонятно, чего вы хотите добиться. Есть маломощные часы, которые активны во всех режимах на фиксированной частоте. Вы хотели, чтобы более высокая временная развертка измеряла более мелкую зернистость, но при переходе в спящий режим? Кроме того, некоторые вещи зависят от конструкции оборудования (что когда будет иметь питание и какие кристаллы/OSC доступны). Кроме того, тег linux-kernel немного вводит в заблуждение?   -  person artless noise    schedule 22.02.2018
comment
@artlessnoise Вы хотели, чтобы более высокая временная база измеряла более мелкое зерно, но при переходе в спящий режим - да. Я хочу, чтобы часы ЦП были включены во время перехода WFI, потому что я использую счетчик PMU для измерения времени. И я не знаю, есть ли Sleep() где-то посередине или нет. Я использую счетчик PMU, потому что это самый быстрый источник тактового сигнала в системе. Насчет тега linux-kernel — пожалуйста, игнорируйте его.   -  person Alex Hoppus    schedule 22.02.2018
comment
Это противоречит интуиции и не совсем то, чего хотел бы любой нормальный человек, поэтому я ожидаю, что разработчики чипов, вероятно, не позволят предотвратить ошибку. Почему вы должны использовать WFI и оставить часы процессора включенными. Это противоречит цели WFI? Если это для отладки и у вас есть физический доступ, вы можете использовать переключатель GPIO и область действия. Дельта должна быть очень точной.   -  person artless noise    schedule 26.02.2018
comment
Это не противоречит цели WFI, потому что WFI касается не только заката тактовой частоты процессора. Вы можете захотеть сохранить тактовые частоты процессора, чтобы избежать любых задержек. Я ожидаю, что разработчики чипов, вероятно, не позволят предотвратить ошибку - как я уже говорил - что означают биты LPM = режим RUN в регистре CLPCR? (см. тело вопроса).   -  person Alex Hoppus    schedule 27.02.2018
comment
WFI для экономии энергии. Сохранение тактовой частоты ЦП не приведет к экономии энергии, особенно когда ЦП находится в статическом состоянии. Я предполагаю, что доступ к DDR не осуществляется, но поддержание активных часов процессора, вероятно, не намного больше энергии, чем спин-петля в кеше. Режимы определены в другом месте документа; RUN — это «спящий» режим с максимальной мощностью. См. стр. 817. Вы можете использовать CCGR, чтобы включить EPIT и использовать его в качестве источника времени. Ядро ARM жестко закодировано, поэтому логика не может быть легко настроена Freescale/NXP. Если возможно, посмотрите документы ARM, а не NXP.   -  person artless noise    schedule 28.02.2018
comment
Не могли бы вы объяснить, что ядро ​​ARM жестко закодировано, поэтому логика не настраивается (легко) с помощью Freescale/NXP? Вы имеете в виду, что WFI выполняет отключение тактов процессора внутри самого ядра ARM? Таким образом, даже часы NXP и модули управления сохраняют часы, часы отключаются внутри ядра ЦП из-за инструкции WFI?   -  person Alex Hoppus    schedule 28.02.2018
comment
Я имею в виду, что это может быть закрыто логикой процессора. Осциллятор может по-прежнему работать внешне. Кристаллы потребляют очень мало энергии. Проблема в транзисторах, которые они переключают. Таким образом, PMU может отключиться (по логике ARM), когда будет замечен WFI. В конце концов, «измерение производительности» процессора IDLE не имеет смысла. Временная база EPIT очень высока, не так ли? Подпрограммы EPIT в режиме опроса имеют небольшой размер кода и довольно просты в реализации. Вам нужно посмотреть документы TRM и ARM ARM. Обычно (другие 2 SOC, которые я использовал) есть туманные ссылки на некоторые сигналы ARM в документах NXP.   -  person artless noise    schedule 01.03.2018
comment
@artlessnoise Я думаю, вы правы, похоже, руководство для cortex-a9 подтверждает это. Вы можете опубликовать это как ответ, если хотите. Насчет EPIT - это я знаю, но этот подход сейчас имеет некоторые сложности, я не хочу вдаваться в подробности (+ временная база ниже, чем для счетчика pmu). Спасибо за помощь.   -  person Alex Hoppus    schedule 01.03.2018


Ответы (1)


Спящие режимы ЦП и настройка частоты DVFS обычно являются ортогональными методами энергосбережения.

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

Одним из основных входных данных для политик DVFS, которые управляют динамическими частотами ЦП, является использование, поэтому, если ваше программное обеспечение проводит много времени в цикле простоя ОС (который будет вызывать WFI внутри), то логика более высокого уровня решит, что вы находитесь под нагрузкой. используя ЦП и начать сбрасывать частоты для экономии энергии.

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

person solidpixel    schedule 21.02.2018
comment
Привет, спасибо за ответ. Предположим, я использую пользовательскую среду, отличную от Linux. У меня нет dvfs в моей RTOS. - person Alex Hoppus; 22.02.2018
comment
Вы можете рассматривать это как полное выключение часов. Я думаю, я вижу некоторый прогресс в тиках из-за прерывания таймера, которое периодически пробуждает процессор от WFI к режиму работы. - person Alex Hoppus; 22.02.2018
comment
Да - только что увидел ваше обновление по вопросу. PMU прекратит увеличиваться, если ЦП будет синхронизирован. во время ВФИ. Ответ обновлен. - person solidpixel; 22.02.2018
comment
Я не хочу использовать таймер, потому что доступные частоты для них недостаточно высоки (из-за древовидной структуры часов). Тактовая частота процессора самая высокая. В любом случае мой вопрос не о том, на что вы ответили. Я спрашиваю, почему часы ЦП закрыты, хотя, согласно битам, которые я установил в CLPCR, этого не должно быть. В любом случае, большое спасибо за ваши усилия. - person Alex Hoppus; 22.02.2018