我在 Ubuntu 17.10 上,有英特尔和 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 桌面登录,这些日志条目似乎不会出现。从纯桌面角度来看,性能似乎也快了很多(虽然这可能是我的想象),但游戏性能却差不多。
答案1
虽然这是一个老问题,但我还是在Ubuntu 18.04和nvidia 驱动程序 390也就是说,nvidia-persistence 守护进程在启动期间(有时,并非总是)频繁地刷新屏幕。因此,我的解决方案是通过使用单独的 systemd 服务。
如前所述,这似乎是启动 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
现在修改/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
要启用该服务,请执行
sudo systemctl enable nvidia-persistenced-manual.service
如果旧服务仍处于启用状态,则运行
sudo systemctl disable nvidia-persistenced.service
这样,守护进程将在系统启动时启动。您可以随意修改此行,ExecStart=/usr/bin/nvidia-persistenced
例如包括--verbose
或 --user [...]
。
请记住,在我的默认方式中,守护进程正在运行root 权限。如果您不想这样,请确保使用该参数运行守护进程--user
。
总而言之,这不是一个完美的解决方案,但它能够修复我的系统上的错误。
答案2
这些条目是由 Nvidia 包中不必要的配置文件引起的:
- 从 shell 运行命令 nvidia-smi,您必须在左上角的某处看到“Persistence-M On”。
- 您可以测试您的 Nvidia 驱动程序在没有“Persistence-M”的情况下是否可以正常工作。
- 转到 /lib/systemd/system/ 。在这里您将找到一个名为 nvidia-persistenced.service 的文件。重命名或移动。
- 转到 /lib/udev/rules.d/
- 以 root 身份打开配置文件 71-nvidia.rules
- 注释掉#开机与关机以及加载与卸载下的动作。
- 重启并检查。
感谢 void75、forums.linuxmint.com