Sortie de veille du PC et microcode Intel

J’ai enfin résolu mon souci de sortie de veille du PC en appuyant sur une touche du clavier. Plutôt par hasard d’ailleurs, mais peu importe ! 😎

J’ai déjà écrit un article à ce sujet, où je décris le problème, et le fait que cela fonctionnait de manière aléatoire (plutôt rarement en fait) au gré des mises à jour système d’Ubuntu. Puis je décrivais comment créer des règles udev pour tenter de résoudre le problème, sans certitudes pour autant.

Et puis je suis passé à Debian. Et là, miracle, la sortie de veille au clavier fonctionnait parfaitement, et ce depuis plus d’un mois, après plusieurs mises à jour d’effectuées entre temps…

Par ailleurs, je remarque un message d’erreur furtif au démarrage du PC, juste après le menu GRUB, et que je n’avais pas avec Ubuntu. Je retrouve le message dans le journal d’événements :

TSC_DEADLINE disabled due to Errata…

Je fais alors quelques recherches pour faire disparaître ce message. De fil en aiguille, je finis par installer le paquet non-free intel-microcode, ce qui fera bien disparaître ce message. Mais surprise : le problème de sortie de veille au clavier réapparaît aussitôt… 🙁

Pour les plus pressés, si vous avez ce problème de sortie de veille qui ne se déclenche pas sur un appui de touche au clavier, le premier réflexe doit être une mise à jour du Bios de votre PC. Si cela ne résout pas le problème, alors vous pouvez vous pencher du côté du microcode du processeur. Peut-être la version de celui-ci est la source du problème, et il peut valoir de le coup de le désinstaller.

Voyons un peu tout cela en détail. J’ai pour ma part préféré désinstaller ce paquet Intel, afin de retrouver ma sortie de veille en appuyant sur une touche du clavier. Et tant pis pour le message d’erreur furtif ! 😉

TSC_DEADLINE error

J’ai tout d’abord trouvé cette page qui explique que ce message d’erreur est lié au jeu d’instruction du processeur (microcode). Le « TSC deadline » est une implémentation de la gestion des événements qu’il est intéressant d’utiliser, mais pas nécessaire au bon fonctionnement du PC.

Il y est expliqué que la première chose à faire est de mettre son BIOS à jour. Sur mon bon vieux Shuttle SH87R6 (acheté en 2014), mon BIOS est à jour, mais date de 2015.

La dernière version disponible de BIOS date un peu ! Mais on y parle déjà d’update de ucode…

Si cette première solution ne résout pas le problème, la page explique qu’il faut soit démarrer avec un kernel plus ancien (solution peu envisageable à mon avis), soit installer ou mettre à jour le microcode Intel (ou AMD) de votre système.

Intel-microcode

En cherchant cette fois du côté de Debian, je suis tombé sur cette page très détaillée du wiki Debian à propos du microcode. En gros, il s’agit donc du firmware du processeur. On peut certes le mettre à jour via le BIOS, mais le kernel peut aussi le faire au démarrage du PC, puisque ce microcode (ou jeu d’instructions) est chargé en mémoire.

Et nous y voilà : il s’agit d’un paquet non-free, puisque fournit par Intel (ou AMD) et donc opaque pour Debian. Or je n’ai pas activé les sources « non-free » sur ma Debian, contrairement à ce que j’avais fait sur Ubuntu. D’où la différence de comportement entre les deux systèmes. Le message d’erreur TSC_DEADLINE apparaît parce que la version de mon noyau est beaucoup plus récente que le microcode de mon BIOS.

Je suis donc les instructions de la page du wiki Debian : j’active les dépots contrib et non-free :

J’active les dépôts « contrib » et « non-free »

J’actualise :

Puis j’installe le fameux paquet intel-microcode :

sudo apt install intel-microcode

Le paquet s’installe, ainsi qu’un autre : iucode-tool (dépendance). Je retourne immédiatement décocher les sources contrib et non-free, et j’actualise, afin de ne pas avoir d’autre mises à jour non-free.

En effet, je préfère les éviter tant que cela n’est pas nécessaire, et que mon PC fonctionne parfaitement sans pilote propriétaire. Je suis sous Debian « testing » que je découvre, donc je tiens à rester prudent !

Conclusion

Une fois le paquet intel-microcode installé, au redémarrage, le message d’erreur TSC_DEADLINE avait bien disparu. Mais comme je l’expliquais en début d’article, le réveil du PC par un appui sur une touche clavier ne fonctionnait plus.

Entre un message d’erreur furtif sans conséquence, et une fonctionnalité que j’utilise tous les matins, je n’ai pas hésité longtemps : j’ai désinstallé le paquet :

sudo apt remove intel-microcode

Et vérifié qu’après un redémarrage, la sortie de mise en veille était de nouveau fonctionnelle. Ce qui était le cas.

Pour conclure, et bien que je ne maîtrise pas tout loin de là, on peut supposer qu’il y a un problème entre les versions récentes du microcode Intel et ma carte-mère, qui provoque le dysfonctionnement sur la sortie de veille au clavier. Avec la version microcode fournit avec le BIOS, même si celle-ci est ancienne et génère le message TSC_DEADLINE, le réveil du PC au clavier fonctionne.

Et pour les plus curieux, voilà ce que me dit la commande lshw concernant le BIOS et le CPU :

pascal$ sudo lshw 
  *-core
       description: Carte mère
       produit: FH87
       fabriquant: Shuttle Inc.
       identifiant matériel: 0
       version: 1.0
       numéro de série: 4016
       emplacement: To be filled by O.E.M.
     *-firmware
          description: BIOS
          fabriquant: American Megatrends Inc.
          identifiant matériel: 0
          version: 2.05
          date: 01/04/2016
          taille: 64KiB
          capacité: 3MiB
          fonctionnalités: pci upgrade shadowing cdboot bootselect socketedrom edd int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer acpi usb biosbootspecification uefi
     *-cpu
          description: CPU
          produit: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
          fabriquant: Intel Corp.
          identifiant matériel: 3d
          information bus: cpu@0
          version: 6.60.3
          emplacement: SOCKET 0
          taille: 3828MHz
          capacité: 3900MHz
          bits: 64 bits
          horloge: 100MHz
          fonctionnalités: lm fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp x86-64 constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts cpufreq
          configuration: cores=4 enabledcores=4 microcode=29 threads=8

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *