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-persistencedNov 22 18:46:36 [...] nvidia-persistenced: Shutdown (1115)Nov 22 18:46:36 [...] gdm3: GdmDisplay: display lasted 1.202396 secondsNov 22 18:46:36 [...] systemd[1]: Stopped NVIDIA Persistence Daemon.奇怪的是,这些条目(以及一些相关的我可能会在这里省略)连续多次出现,有时在同一时间戳内。
这对我来说听起来很可疑 - 为什么守护进程以这种方式不断启动和停止,并且不会对性能产生严重影响?
我问是因为我仍然不知道为什么我的机器在 17.10 与 17.04 相比表现如此糟糕(尤其是在游戏方面) - 请参阅相关问题。
显然,桌面和依赖项是这里的主要嫌疑人,而不是驱动程序版本(因为我记得看到与以前的版本完全相同)。
问题
编辑
有趣的是,如果我使用旧的 Unity 桌面登录,这些日志条目似乎不会出现。从纯桌面的角度来看,性能似乎也快了很多(虽然这可能是我的想象),但游戏性能却完全相同。
虽然这是个老问题,但我自己还是在Kubuntu 18.04和nvidia 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参数运行守护程序。
总而言之,这不是一个完美的解决方案,但它能够修复我系统上的错误。
| 归档时间: |
|
| 查看次数: |
13317 次 |
| 最近记录: |