Comme on peut le deviner d'après le sujet, j'ai un ordinateur portable Optimus. Tant que j'étais sous 19.04, j'ai pu passer au dGPU Nvidia et vice-versa, en utilisant Prime (via l'option prime-select {intel|nvidia}
). Les choses ont cependant changé après la mise à jour vers la version 19.10 : le jour suivant la mise à jour, le système s'est figé, le noyau se plaignant du blocage de certaines tâches, telles qu'une commande rmmod
un. J'ai réussi à récupérer mon système en lançant prime-select nvidia
dans un environnement de connexion à la racine (chroot).
Je n'entrerai pas trop dans les détails secondaires tels que la suppression des pilotes iGPU/dGPU de l'initramfs (qu'ont-ils à faire dans l'initramfs de toute façon ?), mais maintenant il démarre au moins, avec ou sans le dGPU prime-activé.
Et c'est là que le bât blesse : si mon système démarre avec le profil intel activé, le passage au profil nvidia ne fonctionne pas, puisque le dGPU n'est pas détecté dans le matériel. Et en effet, elle est absente d'une liste lspci. Je dois redémarrer pour que le dGPU soit à nouveau détecté. Donc, quand j'éteins mon système, il faut toujours que je pense à activer le profil nvidia avant, sinon il faudra que je redémarre pour pouvoir l'utiliser la fois suivante.
C'est mon principal problème. Un autre, moins ennuyeux, est que je dois toujours redémarrer le service gdm lorsque je passe de nvidia à intel. Je peux vivre avec ça, mais c'est un problème que je n'avais pas dans la version 19.04.
Les conseils sur ce problème sont les bienvenus ! Soit empêcher le dGPU de disparaître de la liste du matériel, soit une méthode pour qu'il soit à nouveau détecté par le système, sans redémarrer.
Pour info, mon iGPU est un Intel HD Graphics 4600, et mon dGPU est un Nvidia GTX 880M.
EDIT : @Syfer Polski, merci pour votre réponse instructive !
J'ai remarqué qu'il y avait un profil à la demande, mais je l'ai écarté comme étant probablement une tentative inutile, car j'avais lu il n'y a pas si longtemps qu'une implémentation d'Optimus vraiment fonctionnelle n'arriverait pas de sitôt... J'aurais dû lire ce readme !
J'ai donc immédiatement essayé ce profil à la demande. Au début, cela n'a pas fonctionné car j'avais le pilote 430 qui ne le prend pas en charge. Il aurait dû y avoir une vérification du pilote refusant d'activer le profil pour les personnes qui n'utilisent pas une version compatible, et je soupçonne que c'est la raison pour laquelle mon système a planté, parce que ce profil à la demande a été automatiquement activé pendant la mise à niveau (je ne fais que supposer, je n'ai pas vérifié à l'époque).
Quoi qu'il en soit, j'ai installé le pilote 435 et le profil à la demande fonctionne. Cependant, je ne trouve pas cela assez satisfaisant, puisque mon GPU n'est pas éteint lorsqu'il n'est pas utilisé, et qu'essayer de l'éteindre moi-même ne fonctionne pas. J'ai essayé de l'éteindre via un appel ACPI direct, et en effet il s'est éteint mais :
NVRM: GPU at PCI:0000:01:00: GPU-9b8a3387-4913-0c33-619e-da118e532a5f
NVRM: Xid (PCI:0000:01:00): 79, pid=29013, GPU has fallen off the bus.
NVRM: GPU 0000:01:00.0: GPU has fallen off the bus.
NVRM: A GPU crash dump has been created. If possible, please run
NVRM: nvidia-bug-report.sh as root to collect this data before
NVRM: the NVIDIA kernel module is unloaded.
Donc, malheureusement pour moi, tant que les pilotes propriétaires seront incapables d'éteindre mon dGPU lorsqu'il n'est pas utilisé, je pense que je resterai avec le système classique des profils intel/nvidia.
Ce qui me ramène à ma question initiale quand je démarre avec le mode intel activé : comment récupérer mon dGPU sans redémarrer ?
Un rescan ( echo 1 >/sys/bus/pci/rescan
) le montre dans les journaux :
pci 0000:01:00.0: [10de:1198] type 00 class 0x030000
pci 0000:01:00.0: reg 0x10: [mem 0xf6000000-0xf6ffffff]
pci 0000:01:00.0: reg 0x14: [mem 0xe0000000-0xefffffff 64bit pref]
pci 0000:01:00.0: reg 0x1c: [mem 0xf0000000-0xf1ffffff 64bit pref]
pci 0000:01:00.0: reg 0x24: [io 0xe000-0xe07f]
pci 0000:01:00.0: reg 0x30: [mem 0xf7000000-0xf707ffff pref]
pci 0000:01:00.0: 32.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s x16 link at 0000:00:01.0 (capable of 126.016 Gb/s with 8 GT/s x16 link)
pci 0000:01:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
Mais l'ISPC reste silencieuse. Je peux allumer/éteindre le périphérique à volonté par des appels ACPI, le noyau l'affiche lors du rescan, mais il n'est pas détecté par les pilotes qui, par conséquent, ne se chargent pas. Il doit y avoir quelque chose à faire, mais quoi ?