Когда родители трудятся, а дети наслаждаются жизнью - их внуки будут просить милостыню

Linux: Компьютер не выходит из ждущего (suspend) режима

Начнём без предисловия, сразу "с места в карьер". Есть вот такой "пациент":


inxi -CDSM

----------
System:
  Host: hp Kernel: 6.2.7-060207-generic x86_64 bits: 64
    Desktop: Cinnamon 5.6.7 Distro: Linux Mint 21.1 Vera
Machine:
  Type: Laptop System: HP product: HP Laptop 15s-eq2xxx v: N/A
    serial: <superuser required>
  Mobo: HP model: 887A v: 59.21 serial: <superuser required> UEFI: AMI
    v: F.27 date: 10/20/2022
CPU:
  Info: quad core model: AMD Ryzen 3 5300U with Radeon Graphics bits: 64
    type: MT MCP cache: L2: 2 MiB
  Speed (MHz): avg: 1431 min/max: 1400/3900 cores: 1: 1398 2: 1400 3: 1400
    4: 1400 5: 1452 6: 1400 7: 1602 8: 1397
Drives:
  Local Storage: total: 238.47 GiB used: 56.55 GiB (23.7%)
  ID-1: /dev/nvme0n1 vendor: Toshiba model: KBG40ZNV256G KIOXIA
    size: 238.47 GiB

Вполне себе свежий ПК, с последней версией BIOS и со свежайшим ядром Linux. Установлена чистая система, без каких-либо кастомных настроек ядра Linux.

Так вот, имеем на такой конфигурации ПК следующую проблему: при переходе в ждущий (suspend) режим компьютера, когда все возможные компоненты устройства отключаются и ПК ждёт пока вы не нажмёте какую-либо клавишу, чтобы проснуться, на самом деле он больше не просыпается. Вернее, происходит следующее: появляется экранная заставка с вводом пароля и компьютер ни на что не реагирует. Бывает, что с трудом можно добраться до TTY на экране которого проскакаивают ошибки о сбойной работе дисковой подсистемы.

Можно ли исправить такое сбойное поведение? Можно, запустив ядро нашей ОС с опцией отключающей использование IOMMU.

Шаг 1: открываем в любом редакторе файл настроек конфигурации GRUB


sudo mcedit /etc/default/grub

(В примере используется редактор mcedit)

Шаг 2: находим/исправляем в настройках параметр GRUB_CMDLINE_LINUX_DEFAULT

Добавлем в него опцию


amd_iommu=off

В качестве примера:


Было:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Стало:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=off"

Сохраняем изменения и выходим из редактора.

Шаг 3: применяем настройки GRUB


sudo update-grub

После того, как всё будет done, перезагружаем ПК и проверяем работоспособность ждущего (suspend) режима.

Удостовериться, что IOMMU выключен в текущей сессии работы, можно выполнив:


dmesg | grep IOMMU

-------
AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.

Правильно ли я поступаю работая с выключенным IOMMU? Думаю, что нет, т.к. стараюсь руководствоваться принципом не трогать того, чего не понимаю, и так как IOMMU по умолчанию включен, его принудительное выключение как минимум некорректно. Однако, именно это действие приводит к тому, что устраняет проблему ждущего режима и за многие сотни часов работы на ПК с выключенным IOMMU я не испытывал никаких проблем с системой.

Если всё-таки кому то интересно более глубоко копнуть тему IOMMU, вот есть ссылка на туториал IOMMU: Virtualizing IO through IO Memory Management Unit

Ответить
Обязательные поля помечены *