В OpenBSD-current добавили поддержку засыпания в режиме S0ix (aka "s2idle")

Опубликовано 19.08.2024 в OpenBSD

Good news everyone!

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

В OpenBSD поддерживается не только "ждущий режим" (aka "suspend"), но и "спящий режим" (aka "hibernate"), что выгодно отличает эту систему от прочих *BSD (ни в FreeBSD, ни в NetBSD оно просто не реализовано). Но вот если с suspend никаких вопросов не возникало никогда (закрыл крышку ноута - оно уснуло), то в части hibernate... Нет, оно работало, но немножко причудливо - пробуждение из сна (а конкретно - распаковка сохраненного в свопе образа) выполнялась дико медленно, вот прямо от 7 до 10 минут, в зависимости от того, на сколько память была забита на момент засыпания.

Я, собственно, некоторое время был уверен, что оно не работает. А потом как-то отвлекся на что-то, прихожу минут через 10, а ноут благополучно проснулся. Потом нашел в списках рассылки описание этой проблемы, оно не только у меня воспроизводилось - и увы, решения предложено не было, мол, это чрезвычайно сложно дебажить, причины не ясны, поэтому живем пока так. Формально вроде как работает, но фактически - я использовал hibernate только как вариант на случай критического разряда аккумулятора (в /etc/rc.conf.local прописано "apmd_flags=-L -Z 5"), а больше никак hibernate я не использовал. И случалось пару раз, конечно, что погруженный в suspend ноут выжирал аккумуляторы досуха. Кстати, не верьте слухам, что файловая система FFS2 обязательно помирает при перебоях с питанием - у меня fsck при следующей загрузке всегда решал все проблемы.

А тут на днях попалось мне сообщение о том, что в OpenBSD-current для архитектуры amd64 запилили поддержку реализованной на чипах Intel (и свежих AMD) технологии засыпания S0ix, в линукс-мире называемой также "s2idle". А еще, в рамках той же доработки вроде как вычистили какое-то количество старых багов. И решил я проверить...

Так вот, ратуйте, православныя! Конкретно в моем случае (OpenBSD-current, снапшот #267 на ThinkPad X270) пробуждение системы после hibernate теперь работает блестяще - распаковка сохраненного образа даже при сильно забитой памяти работает с радующей душу скоростью, по сути система оживает не намного дольше, чем после suspend'а! Вот теперь - действительно всё в этой части работает сразу, из коробки и идеально.

Теперь буду использовать hibernate чаще, возможно, и вовсе сделаю его умолчальной реакцией на закрытие крышки ноута (на всякий случай, вот рецепт: в /etc/sysctl.conf прописываем machdep.lidaction=2 ).