Un des buts de toutes mes mésaventures (finalement heureusement résolues) avec mon DreamPlug (entrées précédentes ici, là, là et là) était de pouvoir éteindre mon PC la nuit ou, plus exactement, le mettre en hibernation, pour qu'il ne fasse plus de bruit.
Hibernation, ce qui peut désigner deux choses, le suspend-to-RAM où la machine n'est pas vraiment éteinte mais seulement arrêtée et maintient sa mémoire vivante, ou le suspend-to-disk où la machine est techniquement éteinte et a recopié sa mémoire sur disque de manière à pouvoir redémarrer dans le même état. Ces deux modes d'hibernation sont censés être supportés par Linux mais, comme d'habitude, le support peut être aléatoire selon le type de matériel, d'autant plus qu'on parle ici d'un PC fixe et que l'hibernation est surtout testée sur des portables. Mon poussinet, par exemple, n'arrive pas à faire marcher le suspend-to-RAM sur sa machine, probablement à cause d'un problème dans la gestion de la carte graphique (le suspend-to-disk, en revanche, marche bien).
Initialement, j'ai trouvé que j'avais de la chance : le suspend-to-RAM semblait marcher parfaitement (le plus gros problème observé étant que l'horloge système se décale d'environ une seconde lors de l'opération, ce qui fait négligé mais est facile à corriger en reprenant l'heure correcte sur le réseau) ; le suspend-to-disk, lui, perd le contrôle du disque externe, ce qui est pénible mais pas catastrophique (il suffit de couper ce disque avant hibernation et le remettre après : comme ce disque ne me sert qu'à stocker des choses comme des musiques ou des films, pas à faire tourner des programmes, ce n'est pas trop gravement gênant), et il y a aussi un petit couac mineur avec le clavier (il faut refaire le mapping, c'est un bug bizarre, mais ça ne fait qu'une commande à taper).
Indépendamment de ça, je trouvais que le ventilateur de
mon PC était devenu plus bruyant que d'habitude au
redémarrage de l'hibernation : soit que ce soit le contraste avec le
silence précédent qui cause cette illusion, soit que le ventilateur
vieillisse et que le fait de l'allumer et de l'éteindre le rende plus
bruyant. C'est là que j'ai commencé à regarder de plus près les
réglages du BIOS parce que, après tout, mon
ventilateur est censé être un modèle super silencieux et on ne pouvait
pas dire qu'il le fût. Or il existe, dans ces réglages, deux modes de
contrôle des ventilateurs : un mode PWM
,
c'est-à-dire Pulse Width Modulation
, où le
ventilateur est contrôlé par un signal spécial, et un
mode DC
où le ventilateur est bêtement contrôlé
par la tension appliquée ; apparemment mon ventilateur ne supporte pas
le contrôle PWM, et changer vers le mode DC
a eu un effet énorme : au lieu de tourner constamment à 2400tr/min, il
s'est mis à descendre à 1800tr/min lorsque la machine ne fait rien, ce
qui peut ne pas sembler une différence énorme, mais ce qui représente
pourtant une diminution considérable du bruit. Presque au point que
l'hibernation n'ait plus d'intérêt.
Presque. Mais c'est là que le bât blesse : lorsque je configure les ventilateurs en mode silencieux (et avec le bon type de contrôle), c'est effectivement très confortable pour les oreilles, mais si jamais je mets l'ordinateur en suspend-to-RAM, au redémarrage, les ventilateurs reprennent leur profil de base (bruyant). Autrement dit, je ne peux pas avoir à la fois le réglage relativement silencieux des ventilateurs et le silence total du suspend-to-RAM de temps en temps. Bon, je peux encore faire un suspend-to-disk si je veux le silence complet sans perdre le silence relatif au réveil, mais outre les problèmes mineurs avec le disque externe et avec le clavier que j'ai signalés ci-dessus, le suspend-to-disk est lent (parce que j'ai 8Go de RAM) : quand je fais de l'insomnie et que je veux regarder un truc ou deux sur Internet avant de me recoucher, je n'ai pas envie d'attendre plusieurs minutes que la machine daigne se réveiller.
Je ne sais même pas si je dois attribuer ça à un bug (de
l'ACPI)
de ma carte mère (une Asus P5W64 WS Pro) ou de Linux. La carte mère
et le BIOS doivent bien avoir des bugs puisqu'un
suspend-to-RAM non seulement met les ventilateurs
en mode bruyant, mais meme ce mode persiste après un reboot, il faut
une extinction complète pour revenir en mode silencieux. Sinon, ce
qui est sûr, c'est que Linux devrait être capable de régler
lui-même la vitesse des ventilos, mais qu'il n'y arrive pas : il
devrait même y avoir deux approches possibles, l'une passant par
l'ACPI (module noyau asus-atk0110
) et
l'autre en parlant directement au matériel (module
noyau w83627ehf
), et qu'aucune des deux ne marche, dans
les deux cas c'est apparemment la faute d'Asus : d'un côté je crois
comprendre qu'il manque des interfaces dans l'ACPI, de
l'autre je crois comprendre qu'ils n'ont pas publié les specs d'une
puce utilisée sur cette carte mère. (J'avoue que l'idée de garder
secrètes les spécifications détaillées de quelque chose d'aussi
high-tech qu'une puce qui contrôle des putains de ventilos, ça
m'échappe un peu : pensez à me rappeler de ranter contre les
compagnies qui ont la culture du secret, comme ça, pour des trucs
totalement débiles. Mais peut-être que j'ai mal compris.) Ou
peut-être que Linux ne sait gérer que les ventilateurs utilisant le
contrôle PWM, mais je ne vois pas pourquoi
le BIOS arriverait à faire mieux, alors.
On est censé pouvoir désassembler le code de l'ACPI
avec des outils comme acpidump
, acpixtract
et iasl
, mais c'est assez chinois et je ne sais pas si je
veux passer des heures à essayer d'y comprendre quelque chose,
d'autant plus que le problème n'est peut-être même pas là.
J'ai parfois un peu tendance à penser que c'est encore plus frustrant quand l'informatique marche à 99% que quand elle marche à 0%, parce qu'à 99% on a l'impression qu'on pourrait y être, on a la vision du monde parfait qui nous nargue et qui reste cependant inaccessible, alors qu'à 0% au moins les choses sont claires. Le chemin de l'enfer est pavé de petites crottes de ragondin.