Rapidement fatigué de l'inesthétisme de mon ancien boîtier dans notre nouvel intérieur, et attiré par la magie d'avoir enfin un garage entier pour bricoler, j'ai décidé de transformer un de nos meubles de salon en boite à serveur. Le problème, c'est que le bois ça fait aussi bien sonner les belles guitares que rendre assourdissant les ventilateurs... Alors retour en atelier, installation de suspensions pour les disques, et de ventilateurs 12cm à basse vitesse de rotation. Ne restait donc que ce maudit ventilateur de CPU qui moulinait comme un malade.
Il se trouve que c'est le même outil qui permet à la fois de lire les senseurs internes de la bécane et de contrôler certains éléments comme la vitesse de rotation des ventilateurs. Et cet outil c'est lm_sensors. Pour l'installer, l'enfance de l'art, il est forcement dans votre dépôt. Donc urpmi/apt-get selon vos tendances.
Pour le configurer il faut lancer sensors-detect en tant que root. L'outil va tester toutes les combinaisons bus/puce pour terminer par écrire le paramétrage de ce qu'il aura détecté. Dans le cas de ma Gigabyte P35 - Q6600, il a détecté une puce SuperIO ITE IT8718F et les 4 senseurs de température des 4 coeurs du processeur.
Ceci fait, un nouveau service est alors utilisable qui se lance par /etc/init.d/lm_sensors start. Cela va charger les modules correspondant à ce qui a été trouvé, dans mon cas it87 et i2c_i801. Ensuite, pour lire les valeurs des capteurs, vous devez lancer la commande sensors. Apparaissent alors 5 sections, correspondant à ce qui a été trouvé par sensors-detect :
Sur le fond, lm_sensors est un très bon outil, le problème vient plus de la difficulté à le paramétrer. En effet, si vous obtenez une température de CPU de 150°c, ne jetez pas tout de suite votre jus d'orange pour stopper la combustion, c'est sûrement un problème d'échelle. Par exemple dans mon cas, je doute fort qu'il y ait un point sur la carte mère à -2°c.... Pas évident de faire son tris là dedans.
Le problème vient du fait que les constructeurs ne jouent pas le jeu (oh !), genre ASUS, au hasard, qui ne publie pas les datasheet de ses composants. Du coup les calibrages se font au doigt mouillé. J'ai par exemple un ventillo sur une A7N8X qui est sensé tourner à 88730 rpm... Rassurez-vous, j'ai du ancré le PC au sol
Il faut donc aller trifouiller dans /etc/sensors.conf pour améliorer un peu les choses. Le meilleur moyen que j'ai trouvé est de redémarrer le PC, noter les valeurs données par le BIOS et opérer les ajustements de retour sous Linux. On peut aussi utiliser un thermomètre infrarouge qui permettra de faire cela avec plus de précision.
Pour bien comprendre comment fonctionne le fichiers sensors.conf, il faut déjà saisir d'où viennent les valeurs qu'il manipule.
Comme nous l'avons vu plus haut, la fonction sensors-detect va trouver une série de puces. Chaque puce est relié à une série de capteurs ou de contrôles. Dans le cas de mas Gigabyte, l'outil a trouvé 5 puces, 4 correspondant à la température de chacun des coeurs du CPU (coretemp-isa-XXXX), et un pour le reste des valeurs (it8718-isa-0290). Pour ces deux catégories de puce, nous avons deux pilotes kernel correspondant : coretemp et it87.
Une fois montés en mémoire, ces pilotes vont chacun créer des entrées dans le dossier /sys/class/hwmon. Dans ce dossier nous allons trouver 5 sous dossiers hwmon0 à hwmon4 : 4 pour coretemp et 1 pour it87.
Dans chaque dossier hwmon0-4, nous avons un sous-dossier device. Et dans ce dossier nous avons quelque chose de genre :
Comme vous le voyez, tout y est. D'abord la vitesse des ventilateurs (fanX_input) et la valeur minimum à ne jamais atteindre (fanX_min). Les inX_input représentent des tensions avec une valeur min (inX_min) et max (inX_max). Enfin les températures (tempX_input), et la aussi des valeurs min (tempX_min) et max (tempX_max). Enfin, nous le verrons un peu plus loin, les pwmX nous permettrons de changer la vitesse de rotation des ventilateurs.
Donc si lors de l'exécution de la commande sensors, vous aviez une vitesse affiché pour In1, vous pouvez avoir cette vitesse en tapant :
La seule chose est que la valeur retournée n'a généralement que peu de rapport avec celle de sensors. C'est tout l'interêt de sensors.conf, transformer ces valeurs brute en réalité compréhensibles. Dans le vocabulaire lm_sensors, in1_input, fan3_min, pwm2, etc, sont des fonctionnalités (features). Ce sont ces fonctionnalités que nous allons travailler dans notre fichier de configuration.
Le fichier sensors.conf est composé de directives :Comme vous le voyez, il est relativement simple de modifier ce fichier de configuration, un peu moins d'arriver à obtenir les bonnes valeurs si les formules par défaut ne collent pas...
Prenons le cas de ma puce it8718-isa-0290. Déjà, je ne trouve pas de directive chip qui lui correspond. En revanche, j'ai bien un chip "it87-*" "it-8712-*". Comme je sais que l'it8718 fait peu ou prou la même chose que l'ensemble de la gamme it87, je vais donc simplement rajouter ma puce à la liste : chip "it87-*" "it-8712-*" "it-8718-*". Ensuite je vais faire un peu de ménage sur les valeurs non pertinentes par ignore, renommer proprement les fonctionnalités avec label et bidouiller deux trois formules pour coller avec la réalité. J'ajouterais enfin des directives set pour fixer les valeurs min et max de certaines valeurs critiques (arrête du ventilateur, CPU en fusion, etc..).
Au final, on obtiens un résultat de sensors le plus juste possible. Ensuite il existe de nombreux enrobages graphiques à lm_sensors comme par exemple le gnome-applet-sensors me permettant de remonter tout cela sur mon bureau.
Si vous voulez prendre en charge les alarmes, faites un tour sur man sensord. sensord est le démon lancé par le service lm_sensors qui va auditer toutes ces valeurs et vous prévenir si quelque chose part en vrille. En revanche si cette fonctionnalité ne vous intéresse pas, ou si vous monitorez ces valeurs via nagios, il peut être malin d'empêcher le lancement de ce démon en torpillant le fichier /etc/init.d/lm_sensors.
Maintenant que les valeurs sont au point, il nous reste toujours à réduire la vitesse de nos ventilateurs si bien sur la carte mère le permet. Comme nous l'avons vu plus haut, ce sont les fonctionnalités pwmX qui sont responsables de ce comportement. Basiquement pour activer le contrôle il faut envoyer une valeur 1 au pwmX_enable qui va bien, et ensuite une valeur de 0 (arrêt) à 255 (fullspeed) à pwmX. En somme, si l'on connait le bon pwm, réduire de moitier la vitesse d'un ventillateur se résume à
Après le jeu est donc de trouver le bon pwm associé au ventilateur que l'on cherche à modérer. Vous pouvez faire cela à la main, ou utiliser pwmconfig qui est fait pour cela. Ce dernier pour chaque fanX activé, va tester les pwmX les uns après les autres jusqu'à trouver celui qui fonctionne. Une fois que vous avez le numéro, vous pouvez faire le reste à la main.
Vous pouvez aussi laisser pwmconfig poursuivre, il vous proposera alors de calibrer la valeur de pwm avec la vitesse obtenue sur le fanX correspondant. Ceci fait, il vous permettra de paramétrer un démon appelé fancontrol que vous pourrez utiliser pour ajuster automatiquement la vitesse avec la température du processeur.
La température du disque dur ne fait pas parti du domaine de compétence de lm_sensors mais de celui du système S.M.A.R.T.. Cette norme de contrôle des disques durs introduite par IBM permet de remonter de l'unité une foultitude d'informations permettant de prévenir les avaries. Et l'une de ces informations est la température. Pour la lire vous avez deux solutions, soit l'artillerie lourde avec smartmontools et la commande smartctl -A /dev/sda, ou alors plus simple avec l'utilitaire hddtemp et la commande hddtemp /dev/sda.
Fin du petit tour d'horizon de ce qu'il est possible de faire avec lm_sensors et début de la zone de silence
- répondre
sebastien , le 25 July, 2008 - 13:06Merci pour l'article, il résume bien (et dans la langue de Molière svp
) ce qui est à faire pour réduire les problèmes de nuisance sonore d'une machine (en plus de faire baisser la facture EDF).
)
Un problème quand même : rien de tous ça ne marche avant que l'ACPI fonctionne correctement. Dans mon cas c'est mon BIOS qui ne supporte pas (encore, faut que je le patch, mais pour ca il me faut un freedos...).
Par contre, j'ai fait ce que tu dis ici sur la machine de ma blonde. Et je me suis dis que tant qu'a y être j'ai fini de configurer ACPI S4 (suspend to mem), fait un script ultra simple que j'ai associé au bouton power.
Résultat des courses, elle a une machine qui ne fait plus un bruit et qui boot instantanément et s'éteint aussi instantanément. (elle est pas obligée de savoir que la machine s'éteint pas vraiment
Bref, c'est vraiment le fun tous ca
A+
- répondre
Ulhume, le 25 July, 2008 - 16:20@Sébastien Tu parles de cet article ou de celui sur l'hibernation ? Car pour que lm_sensors fonctionne, même sans ACPI il me semble.
- répondre
sebastien , le 25 July, 2008 - 16:24@Ulhume,
En effet lm_sensors n'a pas de besoin des acpi et fonctionne très bien sur la machine.
Mais pwmconfig lui n'est pas capable de controler le fan si l'acpi n'est pas fonctionnel (enfin sur la machine...). Je suis pas certain que c'est un généralité...
A+
- répondre
Ulhume, le 25 July, 2008 - 16:45@Sebastien c'est intéressant ça, va falloir que je teste. J'ai l'ACPI d'activé sur ma machine, peut-être ne m'en suis-je donc pas rendu compte.
- répondre
Flo , le 6 October, 2008 - 11:14Votre site est incroyable !
Je navigue depuis quelques minutes, et les articles linux sont tous tres bien construits, clairs et soignés !
Féélications !
Florent
- répondre
Ulhume, le 6 October, 2008 - 11:17@Flo et pourtant je n'en suis jamais satisfait
Merci beaucoup, cela fait très plaisir à lire !
Poster un nouveau commentaire