我使用的是 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
雖然這是一個老問題,但我自己仍然遇到過庫班圖 18.04和英偉達驅動程式390。也就是說,nvidia-persistence 守護程式會在啟動期間向螢幕發送垃圾訊息(有時,並非總是如此)。因此,我的解決方案透過使用獨立的系統服務。
如前所述,這似乎是啟動 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 [...]
。
請記住,在我的預設方式中,守護程式正在運行根權限。如果您不希望這樣做,請確保使用參數運行守護程序--user
。
總而言之,這不是一個完美的解決方案,但它能夠修復我係統上的錯誤。
答案2
這些條目是由 Nvidia 軟體包中不必要的設定檔引起的:
- 從 shell 執行命令 nvidia-smi,您必須在左上角的某個位置看到「Persistence-M On」。
- 您可以在沒有「Persistence-M」的情況下測試您的 Nvidia 驅動程式是否正常運作。
- 轉到 /lib/systemd/system/ 。在這裡您將找到一個名為 nvidia-persistenced.service 的檔案。重新命名或移動。
- 轉到/lib/udev/rules.d/
- 以 root 身分開啟設定檔 71-nvidia.rules
- 註解掉 # 上下電、載入和卸載下的動作。
- 重新啟動並檢查。
感謝 void75、forums.linuxmint.com