Как сделать энергосбережение в системе на базе ARM Embedded Linux? - PullRequest
15 голосов
/ 22 июня 2010

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

Очень важно получить приличное время работы от батареи.

Я думаю, что ядро ​​Linux реализовало некоторую поддержку для этого, но я не могу найти никакой документации по этому вопросу.

  • Любые отзывы о том, как спроектировать мою программу и систему, приветствуются.

  • Любые сведения о том, как ядро ​​Linux пытается решить эту проблему, также приветствуются.

Другие вопросы:

  • Сколько нужно сделать программе в пространстве пользователя?

  • А нужно ли модифицировать ядро?

  • О каких системных вызовах ядра или API следует знать?


Обновление :

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

Но, может быть, у кого-то еще есть больше информации на эту тему?


Обновление

Похоже, идея Адама Шимке пойти посмотреть на проект MeeGo может быть лучшим советом на данный момент.

Возможно, это лучший проект на базе встраиваемого Linux с питанием от батареи на данный момент.

И Nokia обычно неплохо справляется с подобными вещами.


Обновление :

Нужно быть осторожным с Android, так как в его нижней части находится «модифицированное» ядро ​​Linux, а некоторые вещи, которые сделали ребята из Google, не используют базовые / нормальные ядра Linux. Я думаю, что некоторые из их идей по управлению питанием могут быть проблематичными для повторного использования в других проектах.

Ответы [ 4 ]

10 голосов
/ 30 июня 2010

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

Доступно гораздо больше информациина Android, однако.Они запускают довольно сильно модифицированное ядро ​​2.6.Вы можете многое увидеть в различных стратегиях, реализованных в http://elinux.org/Android_Power_Management (а также в драмах ядра).Некоторые другие ссылки:

https://groups.google.com/group/android-kernel/browse_thread/thread/ee356c298276ad00/472613d15af746ea?lnk=raot&pli=1

http://www.ok -labs.com / блог / запись / переключение контекста в контексте /

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

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

Надеюсь, это поможет.

5 голосов
/ 30 июня 2010

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

Ваши драйверы должны иметь возможность отключать связанные с ними устройства и восстанавливать их, не требуя перезагрузки или нестабильной работы системы. Если ваши устройства подключены к шине PCI / PCIe, выясните, какие состояния питания они поддерживают (D0 - D3) и что должен делать ваш драйвер для перехода между этими режимами с низким энергопотреблением. Если вы выбираете аппаратные устройства для использования, ищите устройства, которые соответствуют спецификации управления питанием PCI или имеют аналогичные функции (например, режим ожидания и сигнал прерывания «пробуждение»).

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

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

Не бойтесь немного снизить тактовую частоту компонентов вашей системы. Помимо экономии энергии, это может помочь им запустить кулер (который требует меньше энергии для охлаждения). Я видел некоторые конструкции, в которых используется процессор с большей производительностью, чем это необходимо, с приличным запасом, который затем разгоняется на целых 40% (что приводит к снижению производительности до исходного уровня, но с меньшими затратами на электроэнергию). , Кроме того, не бойтесь тратить силы на сохранение энергии. То есть не бойтесь использовать аппаратные устройства контроля времени процессора для возможности их отключения / гибернации (даже если это заставит ваш процессор использовать немного больше энергии). В большинстве случаев этот компромисс приводит к чистой экономии энергии.

1 голос
/ 14 сентября 2018

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

Например, если что-то особенное должно быть сделано при определенной комнатной температуре, нет необходимости проверять температуру каждые 100 мс, так как температура в комнате изменяется медленно. Более разумный интервал опроса может быть 60 с.

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

0 голосов
/ 10 декабря 2013

Это на самом деле не ваша тема, но она может пригодиться для регистрации вашего прогресса: я искал тестирование / измерение моей встроенной системы Linux. Крис Дежарден из этого форума рекомендовал мне это:

Я успешно использовал загрузочную диаграмму в прошлом:

http://elinux.org/Bootchart

Вот список других вещей, которые также могут помочь:

http://elinux.org/Boot_Time

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