LINUX.ORG.RU

Медленная загрузка образа в оперативную память после hibernation

 


0

1

Настроил hibernation в kubuntu 18.04 x64. Прописал путь к swapfile, offset и все ОК, если занято не много оперативной памяти.

Проблемы начинаются, когда открыто много программ и оперативной памяти занято много. Например несколько браузеров, thunderbird и прочее. У меня 8 Гб, swapfile уже для эксперимента ставил 24 Гб. Не помогло.

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

Если открыт 1 браузер и плеер. То оперативной памяти занято не много и после пробуждения система работает быстро.

Такое ощущение, что из swapfile в оперативную память загружаются не те области что в ней были. Или образ загружен не полностью изначально при старте системы и остаток подгружается по мере надобности. Но в логах написано: 10%, 20%, ..., 90%, т.е. должен загрузиться целиком.

Где искать решение?



Последнее исправление: vumupux (всего исправлений: 1)

Свап на разделе немного быстрее работает. Если несколько дисков то лучше не на том диске где система с хомяком.

anonymous
()

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

ChekPuk ★★★
()
Ответ на: комментарий от ChekPuk

Зависит от железа у меня нормально работает на одном и не работает на другом, причем бывает что отваливается на определенном ядре.

Так что не миф, но и нормальной ситуацию не назовешь.

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

anonymous
()
Ответ на: комментарий от ChekPuk

Что наводит меня на мысли - гибернация на линуксе - это миф.

Разве что на ноутах.

У меня на ПК и нетбуке всё ок с гибернейтом, пользуюсь уже 8 лет.

Gentoo x86_64 (Plasma 5, 4.17.10)

ASUS P8Z77

i7 3770

8 GB DDR3

1050Ti

Gentoo x86 (KDE 4, 3.x)

Samsung N150

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Спасибо за наводки! Хотя ни одна из них не оказалась прямой, они навели меня на мысль и кажется я нашел решения.

Суть проблемы была в том, что не смотря на увеличенный размер swapfile алгоритм сжатия образа системы при уходе в hibernate все равно сжимал его и делал меньшим чем размер RAM, поэтому недостающие куски не помещались в этот образ и подгружались по мере надобности. Еще на всякий случай отключил сжатие образа системы совсем (не уверен, что эти два параметра связаны: сжатие и размер образа в смысле).

1. Отключаем сжатие образа системы при hibernate параметром: hibernate=nocompress

Итоговые параметры ядра в файле /etc/default/grub такие (не забудьте после изменения этого файла сделать sudo update-grub):

GRUB_CMDLINE_LINUX_DEFAULT="hibernate=nocompress resume=UUID=2f7d1692-5348-456d-9317-47147c4ef639 resume_offset=34816"
2f7d1692-5348-456d-9317-47147c4ef639 это UUID раздела на котором swapfile, resume_offset=34816 смещение swapfile относительно начала диска, посмотреть offset можно командой sudo filefrag -v /swapfile (смотреть первое число в столбце `physical_offset`, это число и есть смещение)

2. Увеличиваем максимальный размер образа системы до размера RAM в параметре ядра /sys/power/image_size

Как: создаем файл командой: sudo touch /etc/tmpfiles.d/hibernationsize.conf (имя файла может быть любым), вставляем в этот созданный файл (где 9000000000 это 8+ Гб, поставить нужно такое как размер вашей оперативной памяти или может чуть больше на всякий случай :) ):

#    Path                  Mode UID  GID  Age Argument
w    /sys/power/image_size     -    -    -    -   9000000000
После этого или перед этим можно глянуть сколько у вас вообще там стоит:
cat /sys/power/image_size

3. Кому интересно сам размер swapfile увеличивается вот так (сделать его нужно в 2 раза большим чем у вас оперативной памяти):

# смотрим информацию о памяти
free -m                             # информация о оперативной памяти

# увеличиваем до 16 Gb (выполнить команды, вместо 16 подставить свое)
sudo swapoff /swapfile              # отключаем swap
sudo fallocate -l 16G /swapfile     # увеличиваем размер swap
sudo chown root:root /swapfile      # устанавливаем владельцем root
sudo chmod 600 /swapfile            # устанавливаем права доступа
sudo mkswap /swapfile               # форматируем файл в swap тип
sudo swapon /swapfile               # включаем swap

# проверяем что получилось
sudo swapon --show                  # смотрим что создалось
free -m                             # информация о оперативной памяти
cat /proc/swaps                     # информация о состоянии swap

Итог: пока все ОК и после пробуждения система работает нормально.

P. S. Размер в 9000000000 потому что лень возиться ради эксперимента с подбором размера swapfile :) Ставьте количество байт равное размеру байт вашей RAM (оперативной памяти).

vumupux
() автор топика

P. P. S. Я использовал hibernation из ядра, насколько я знаю начиная с некоторой версии Tuxonice интегрирован в ядро. Об этом же говорят параметры hibernation для Tuxonice из документации (НАСТОЯТЕЛЬНО рекомендую из хотя бы просмотреть): http://manpages.ubuntu.com/manpages/bionic/man5/hibernate.conf.5.html

Если кто хочет использовать вместо встроенной hibernation утилиту uswsusp с ее фичами удобного показа процентов сохранения образа и более корректной остановки некоторых устройств из коробки, то настройки для нее могут не подойти, возможно для нее придется искать настройки максимального размера образа отдельно. Смотрите о том как настроить swapfile для нее тут: https://wiki.debian.org/Hibernation/Hibernate_Without_Swap_Partition

(а еще в инструкции uswsusp описано как правильно прописать swapfile в /etc/fstab для мантирования)

Само собой в итоге пробуждение и засыпание стали дольше, потому что сохраняется и восстанавливается полный образ системы, вместо урезанного. НО! Тут у меня возникает вопрос. Зачем вообще по умолчанию было так урезать образ системы в размерах? Думаю даже для SSD это доставило бы неудобства в виде лагов при первой загрузке. Если для разработчиков ядра это имеет смысл, то вот для производителей десктопных дистров нет и почему они по умолчанию это все не настроили неясно.

vumupux
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.