News - Logiciels Libres

Kernel 4.17 + Intel + Optimus = Xorg page allocation failure

Par , le dans Logiciels Libres - 3 Commentaires
Kernel 4.17 + Intel + Optimus = Xorg page allocation failure
Bonjour à tous,

Allé un petit article de blogue assez atypique, mais je pense que d'autre seront dans le même cas.
Ce n'est pas un problème qui semble être lié à ma distribution (Calculate Linux) mais plutôt à ma configuration.

Prenez une dose de kernel 4.17 ou plus, ajoutez un chipset graphique Intel, ajoutez une carte Graphique NVidia, saupoudrez de technologie Optimus et vous obtenez un magnifique gâteau Xorg, au goût de page allocation failure !

Quand votre machine est surchargée, il peut arriver que ... l'interface graphique gèle à un moment donné, quand vous lancez une application.

Si vous regardez les logs, vous constaterez que dans le magnifique /var/log/messages (ou via journalctl si vous êtes avec le diabolique systemd), vous constaterez qu'avant le gel, vous avez ceci :

Code :
kernel: Xorg: page allocation failure: order:4, mode:0x6040c0(GFP_KERNEL|__GFP_COMP), nodemask=(null)
kernel: Xorg cpuset=/ mems_allowed=0
kernel: CPU: 7 PID: 19765 Comm: Xorg Tainted: P           O      4.18.5-calculate #


Je vous mets mon log complet sur pastebin : http://pastebin.calculate-linux.org/en/show/69274

Ce qui est intéressant c'est ce qui est de la ligne 1 à 133.

Les lignes 132 et 133 indiquent le début d'un reboot d'urgence via les "touches magiques" : https://www.linuxtricks.fr/wiki/sysrq-ou-les-touches-magiques
Après c'est le reboot de ma machine, avec les éventuels messages d'erreur au démarrage.

Après quelques recherches et une aide précieuse de Serge (que je remercie) il semblerait qu'un paramètre passé à GRUB semble résoudre le problème : intel_idle.max_cstate

Je vous avoue ne pas avoir cherché le rôle de cette ligne mais ça semble jouer en effet sur les composants Intel.

Il est possible de faire varier cette valeur de 0 à 9 apparemment, et j'ai donc essayé par reboot successifs d'incrémenter cette valeur.

J'ai choisi d'ajouter à ma ligne de GRUB l'option i915.enable_rc6=0 qui semble aussi régler les problèmes chez certains utilisateurs anglophones ayant une config et des problèmes similaires aux miens.

Les valeurs 0, 1, 2 et 3 n'étaient pas les bonnes. Mais hier, après avoir testé la valeur 4 à intel_idle.max_cstate, je n'ai plus rencontré de gels, même avec une machine surchargée, et qui a swappé (les crash se provoquaient avant même de pouvoir swapper).

On est encore clairement face à une technologie non supportée, et pour laquelle je bidouille depuis l'achat de mon PC c'est à dire Mai 2012.
Aujourd'hui, Calculate Linux est installée, sur un SSD, et l'installation date de Mai 2013, date d'achat de mon SSD. J'ai mis à jour continuellement cette distribution (rolling) et elle passe l'épreuve des balles depuis 5 ans, avec les mystères d'Optimus et compagnie.

Bref aujourd'hui, je me retrouve avec une ligne de boot énorme, avec quelques ajouts de Calculate Linux, quelques ajouts manuels et ouf, j'ai enfin une machine qui marche.

Voici ma ligne de boot :
Code TEXT :
BOOT_IMAGE=/boot/vmlinuz-4.18.5-calculate root=UUID=bd06fdcc-dfe3-4052-ab36-e042173da17f ro zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=30 video=1920x1080 real_resume=UUID=e66325a1-e36f-4690-b16b-894c83693985 elevator=noop calculate=video:intel splash=off console=tty1 quiet "acpi_osi=!Windows 2012" i915.enable_rc6=0 intel_idle.max_cstate=4


Bref, mon PC à 6 ans, ce n'est pas à cause de cette technologie Optimus de merde que je vais l'abandonner surtout qu'il est performant pour le jeu et que je ne vais pas jeter un PC qui fonctionne matériellement parlant ;)