Ubuntu 20.04 LTS 挂起后无法恢复

bab*_*ths 9 nvidia suspend 20.04

在Ubuntu 20.04 LTS(安装了UEFI模式,NVIDIA GF GTX 1050)上,我无法在暂停后恢复计算机,因此我必须直接将其关闭并重新启动。这是我的/etc/default/grub

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="nouveau.modeset=0"
Run Code Online (Sandbox Code Playgroud)

当我尝试恢复设备时屏幕显示:

ERROR: GPU0: Display engine push buffer channel allocation failed: 0x65 (Call timed out [NV_ERR_TIMEOUT])
ERROR: GPU0: Failed to allocate display engine core DMA push buffer
ERROR: GPU0: Display engine push buffer channel allocation failed: 0x65 (Call timed out [NV_ERR_TIMEOUT])
ERROR: GPU0: Failed to allocate display engine core DMA push buffer
Run Code Online (Sandbox Code Playgroud)

小智 8

我的联想军团也有同样的问题。我设法使它与:

sudo apt purge nvidia-*
sudo apt install nvidia-driver-450-server
Run Code Online (Sandbox Code Playgroud)

该软件包 nvidia-driver-450nvidia-driver-460改为安装。


Win*_*nix 7

这是一个已知的错误

解决方案是恢复到 nVidia 版本 450。

您还应该在错误报告上注册并注明“这对我有影响”,并订阅有关错误更新的电子邮件。

要安装早期版本的 nVidia 驱动程序,请参阅以下内容:


小智 5

了解问题的一些背景知识以及一些建议(工作)解决方案的冗余。

NVIDIA Linux 驱动程序通过两种不同的机制支持挂起和休眠电源管理操作:

  1. 内核驱动程序回调:默认机制 - 无需显式配置即可启用和使用。内核驱动程序接收来自 Linux 内核的回调,以挂起、休眠和恢复注册了 Linux PCI 驱动程序的每个 GPU。

  2. /proc/driver/nvidia/suspend:此机制在使用时依赖于系统管理工具(例如 ),而不是来自 Linux 内核的回调,systemd通过接口向 NVIDIA 内核驱动程序发出挂起、休眠和恢复命令/proc/driver/nvidia/suspend。它仍然被认为是实验性的,并且需要显式配置才能使用。

干净简单的解决方案是简单地禁用 2 (如果启用)并让默认机制1完成工作

当然,高级用户可以选择通过显式且准确的配置来修复[2] - 它更强大,因为该机制旨在消除内核驱动程序回调机制的限制1。它支持具有高级 CUDA 功能(例如 UVM)的电源管理,并且能够保存和恢复所有视频内存分配

以下是最简单的解决方案的步骤(su -假定有访问权限):

  1. 检查[2]是否启用:

    systemctl status nvidia-suspend nvidia-hibernate nvidia-resume
    
    Run Code Online (Sandbox Code Playgroud)

    在此输入图像描述

  2. 或者,执行以下操作:

    journalctl -b | grep suspend
    
    Run Code Online (Sandbox Code Playgroud)

    如果使用 [2],您将在日志中看到它的显式操作,如下所示:

    COMMAND=/bin/systemctl status nvidia-suspend nvidia-hibernate nvidia-resume
    
    Run Code Online (Sandbox Code Playgroud)
  3. 好的,现在您知道 [2] 正在使用中,让我们禁用它:

    systemctl disable nvidia-suspend nvidia-hibernate nvidia-resume
    
    Run Code Online (Sandbox Code Playgroud)

    您应该看到一条消息:

    Removed /etc/systemd/system/systemd-[suspend|hibernate|resume].service.requires/nvidia-[suspend|hibernate|resume].service
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在,您可以重复步骤 1 或 2 并验证服务是否确实已禁用

    rm /lib/systemd/system-sleep/nvidia
    
    Run Code Online (Sandbox Code Playgroud)

我见过一些有效但不准确的解决方案,例如 [ 1,2,3 ],其中建议使用手册你不应该这样做。sudo rm /etc/systemd/system/systemd-suspend.service.requires/nvidia-suspend.service

其他一些有用的诊断命令:

$ cat /proc/driver/nvidia/version 
$ nvcc --version
Run Code Online (Sandbox Code Playgroud)

还有Ctrl+ Alt+F7后面跟着 Ctrl+ Alt+ F1

  • 禁用nvidia服务后,我们如何检查默认机制是否到位并工作? (2认同)