Объясните что такое "opportunistic sleep" и как это работает?

При сборке ядра Linux напоролся на ключ "Opportunistic sleep", который ещё сопровождался описанием, что не следует его включать просто так. Стало интересно, а что такое этот ваш "Opportunistic sleep". Описание, честно, несколько невнятное (перевел строки отсюда: https://wiki.postmarketos.org/wiki/Opportunistic_Sleep )

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

...

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

Попробую хоть как-то разобраться.

В отличие от обычной настройки стационарных устройств, которые отключаются явно (когда в устройстве вызывается функция "Сон" или suspend-to-RAM соответственно), opportunistic sleep делает ровно наоборот: пробуждается явно. При этом необходимо явно удерживать устройство активным при включенном экране через соответствующий wakelock. При этом система, по аналогии с режимом suspend-to-RAM, ожидает сигнала (нажатие на кнопку, например), при его получении продолжает работу, и если нет wakelock-ов, засыпает самостоятельно через некоторое время.

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

Меня просто ещё путает такой момент, что это есть в Android и парочке мобильных линуксов. Ну, wakelock я ещё понимаю, что это такое: как минимум знаю (и понимаю, зачем и как работает) опцию "Acquire wakelock" в Termux. Однако Android (x86 сборки в расчёт не беру) и близко не рассчитан на режимы гибернации или сна, какие есть в классических ОС. Там подобного поведения впринципе нету, что просто сбивает с толку. Да и в целом, в Android приложения работают на Java машине, в которой полно своих наворотов с энергосбережением и работой приложении в фоне. А вот как это будет работать на десктопе, с нативными приложениями, я слабо себе представляю...


Ответы (1 шт):

Автор решения: RandomDice 779

Подразобрался с вопросом чуть глубже. Полез в Android телефон, чтобы проверить, как это работает. Ну, так и оказалось. Когда файл /sys/power/wake_lock был пуст, а /sys/power/autosleep был задан в "mem", то происходил аналог suspend-to-RAM. Устройство зависало, реагировало лишь на кнопку включения. В общем, все как я и предполагал. Но буду рад любым дополнениям и уточнениям.

→ Ссылка