NVIDIA 持久性守护进程在系统日志中不断启动和停止

Men*_*ena 6 performance nvidia drivers systemd 17.10

我在 Ubuntu 17.10 上有一个 intel 和 Nvidia GTX 1060 卡(通常选择后者),驱动程序版本为387.22

我注意到我的以下条目/var/log/syslog

  • Nov 22 18:46:36 [machine name omitted] systemd[1]: Starting NVIDIA Persistence Daemon...
  • [一些不相关的条目]
  • Nov 22 18:46:36 [...] systemd[1]: Started NVIDIA Persistence Daemon.
  • [一些不相关的条目]
  • Nov 22 18:46:36 [...] systemd[1]: Stopping NVIDIA Persistence Daemon...
  • Nov 22 18:46:36 [...] nvidia-persistenced: PID file unlocked.
  • Nov 22 18:46:36 [...] nvidia-persistenced: PID file closed.
  • Nov 22 18:46:36 [...] nvidia-persistenced: The daemon no longer has permission to remove its runtime data directory /var/run/nvidia-persistenced
  • Nov 22 18:46:36 [...] nvidia-persistenced: Shutdown (1115)
  • Nov 22 18:46:36 [...] gdm3: GdmDisplay: display lasted 1.202396 seconds
  • Nov 22 18:46:36 [...] systemd[1]: Stopped NVIDIA Persistence Daemon.

奇怪的是,这些条目(以及一些相关的我可能会在这里省略)连续多次出现,有时在同一时间戳内。

这对我来说听起来很可疑 - 为什么守护进程以这种方式不断启动和停止,并且不会对性能产生严重影响?

我问是因为我仍然不知道为什么我的机器在 17.10 与 17.04 相比表现如此糟糕(尤其是在游戏方面) - 请参阅相关问题

显然,桌面和依赖项是这里的主要嫌疑人,而不是驱动程序版本(因为我记得看到与以前的版本完全相同)。

问题

  • 以上是否反映了正常行为,如果不是,如何调查/修复它?
  • 这是否与运行要求苛刻的应用程序(例如游戏)时的性能问题有关?

编辑

有趣的是,如果我使用旧的 Unity 桌面登录,这些日志条目似乎不会出现。从纯桌面的角度来看,性能似乎也快了很多(虽然这可能是我的想象),但游戏性能却完全相同。

And*_*dré 6

虽然这是个老问题,但我自己还是在Kubuntu 18.04nvidia driver 390上遇到过。即,nvidia-persistence 守护进程在引导期间(有时,并非总是)向屏幕发送垃圾邮件。因此,我的解决方案通过使用单独的 systemd service绕过了系统启动时标准的 nvidia 守护程序启动。

如前所述,这似乎是启动 nvidia-persistence 守护进程的错误配置。更准确地说,udev 规则似乎是我的问题。因此,我修改/lib/udev/rules.d/71-nvidia.rules并注释掉了断电和通电下的动作。就像其他答案中提到的那样,您也可以注释掉加载和卸载的行。

现在守护进程不会在开机时启动。因此,我们必须手动安排守护进程的启动。我们可以通过复制来实现/lib/systemd/system/nvidia-persistenced.service,例如

sudo cp /lib/systemd/system/nvidia-persistenced.service /lib/systemd/system/nvidia-persistenced-manual.service
Run Code Online (Sandbox Code Playgroud)

现在修改/lib/systemd/system/nvidia-persistenced-manual.service为如下所示:

[Unit]
Description=NVIDIA Persistence Daemon
Wants=syslog.target
Requires=local-fs.target

[Service]
Type=forking
User=root
Group=root
ExecStart=/usr/bin/nvidia-persistenced
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

要启用该服务,请执行

sudo systemctl enable nvidia-persistenced-manual.service
Run Code Online (Sandbox Code Playgroud)

如果旧服务仍然启用,请运行

sudo systemctl disable nvidia-persistenced.service
Run Code Online (Sandbox Code Playgroud)

这样,守护程序将在系统启动时启动。随意修改该行ExecStart=/usr/bin/nvidia-persistenced,例如 include--verbose--user [...]

请记住,在我的默认方式下,守护进程以root 权限运行。如果您不想这样做,请确保使用--user参数运行守护程序。

总而言之,这不是一个完美的解决方案,但它能够修复我系统上的错误。

  • 这解决了我在 Ubuntu 18.04 上的问题 (2认同)