=== Гибернация (приостановка с сохранением состояния на диск) Ссылки: + link:https://github.com/OlCe2/freebsd-src/tree/oc-hibernate[Код начального прототипа для сохранения образа системы] URL: https://github.com/OlCe2/freebsd-src/tree/oc-hibernate + link:https://hackmd.io/50ygFG3qSmqMOKytJMuOGw?both=[Дизайн-документ о загрузочной части процесса восстановления] URL: https://hackmd.io/50ygFG3qSmqMOKytJMuOGw?both= Контакт: Olivier Certner + Контакт: Konstantin Belousov Ведётся работа по обеспечению поддержки гибернации (приостановки с сохранением состояния на диск) во FreeBSD без помощи BIOS/прошивки для сохранения текущего состояния машины для `amd64`-машин, загружаемых через UEFI. Первым этапом было создание прототипа, который сохраняет образ системы, пока откладывая вопросы согласованности, чтобы можно было начать параллельную работу над EFI-приложением, предназначенным для восстановления и загрузки сохранённого образа (Константин Белоусов работает над этой частью). Этот этап был завершён в марте. Прежде чем этот экспериментальный код может быть зафиксирован, необходимо провести значительный рефакторинг, в частности нижележащей инфраструктуры дампов. Следующий основной этап — обеспечение согласованности сохранённого образа системы, чтобы система была работоспособна после восстановления. Если кратко, самое большое ограничение здесь заключается в том, что мы должны гарантировать отсутствие незавершённого ввода-вывода по нескольким причинам, что состоит в том, чтобы сначала гарантировать, что больше не могут создаваться запросы ввода-вывода, а затем опустошить существующие запросы. В частности, текущие DMA-доступы могут изменять память в то время, как она сохраняется, что приводит к устаревшему кэшированию в сохранённом образе. Кроме того, если восстановление не удаётся (например, из-за какой-либо проблемы согласованности оборудования), ввод-вывод, который не достиг устойчивого хранилища, будет потерян, в то время как прикладной код или код файловой системы ожидали бы его фиксации (потеря согласованности). Мы начали идентифицировать подсистемы, требующие внимания, и анализировать, какие изменения в них необходимы (например, шина, GEOM, драйверы дисков). Следующий этап — определить, как окончательно сохранить образ системы, не нарушая согласованности, поскольку сама эта операция изменяет память ядра. Первая высокоуровневая возможность — сделать снимок (snapshot) памяти после обеспечения стабильности, а затем возобновить нормальную работу, чтобы сохранить страницы в том состоянии, в котором они были на момент создания снимка. Существует несколько возможных уточнений, таких как упреждающее или ленивое копирование, с разными стратегиями реализации, а следовательно, характеристиками и требованиями. Преимущества создания снимка включают возможность использования обычного кода ядра для сохранения образа со всей поддержкой доступных преобразований. Недостатки — более высокое потребление памяти, хотя это сильно зависит от выбранной стратегии реализации и, по-видимому, в значительной степени смягчается, а также возможные некоторые сложности на очень низких уровнях ядра. Альтернатива, которая изучается, — не делать снимок, а вместо этого гарантировать, что отправка образа на диск изменяет только то состояние, которое будет эффективно сброшено при восстановлении. Эта альтернатива требует реализации выборочной приостановки (selective suspend), но в остальном мы ожидаем, что большая часть существующего кода дампа при панике (dump-on-panic) будет пригодна для повторного использования. В настоящее время мы изучаем различные варианты, чтобы лучше понять их осуществимость и связанные с ними компромиссы. Спонсор: Фонд FreeBSD // // The FreeBSD Russian Documentation Project // // Original EN revision (18.04.2026): 3eec3239b03e88a505c6129dcdd47211c3bb5050 //