Depuis 15 ans, je fais de l’auto-hébergement pour mes besoins personnels. Il y a peu, je me suis lancé dans un petit chantier de revue de mon matériel. Franchement… quelle idée !
Je vous partage mon expérience… à nouveau !
Introduction
Dans un article précédent.. presque pas vieux, mais toujours d’actualité, j’expliquais toute l’infra que j’ai mise en place par chez moi pour héberger mes services : Retour d’expérience sur 15 ans d’auto-hébergement
Toujours dans un souci de rationalisation, et d’économie d’énergie, j’essaye de voir en général ce que je peux améliorer.
Est-ce que franchement ça en valait la chandelle ? Je vous laisse juger… et mettre un commentaire sur le journal du hacker où je posterai cet article.
Etat actuel
Si on ne se concentre que sur la partie virtualisation, qui change ici, je possède deux machines :
- Un supermicro d’occasion, avec un un Atom C2750 (8c/8t) et 32Go de RAM ECC.
- Un chassis supermicro + une mini itx avec un J3455 (4c/4t), et 16Go de RAM.
Ces deux machines ont chacune un RAID1 de 240Go avec les OS, et les OS des machines virtuelles. Elles ont ensuite soit un RAID5 de 4x1To SSD, ou un RAID1 de 2x3To HDD.
Ces deux machines ont beaucoup d’années d’uptime derrière elles, et consomment environ 30W chacune.
Nouveaux besoins
Un premier truc, qui est un faux problème, mais revient régulièrement sur mon infra, c’est la différence entre les deux CPU que j’utilise sur mes deux machines.
Pour palier, j’utilise le CPU virtuel générique (qemu64 ou kvm64), qui est en gros un P4 un peu tuné - sur lequel je rajoute l’extension AES (remplacé depuis Proxmox V8 par un nouveau x86-64-v2-AES), mais franchement, niveau performance c’est pas extrême. Sans ce CPU, impossible de migrer une VM à chaud d’un noeud à l’autre sans qu’elle explose sur la nouvelle machine.
Je me suis donc dit “garçon deux machines avec le même CPU, ou au moins, la même génération, ça serait pas un luxe”.
Second besoin, deux machines c’est super chouette. Mais quand y’en a une qui se vautre (et c’est parfois arrivé), adieu le corosync du cluster proxmox.
Dans ce cas si tu ne lances pas une commande type pvecm expected 1
pour forcer le droit de vote à une machine seule, ce que tu veux faire dans l’IHM, c’est foutu. Donc trois machines ça pourrait être sympa.
Enfin, la surcharge parfois des deux machines, et la limite de la RAM que je possède au total (32Go + 16Go), que soit matériellement ou par le coût de la RAM, me donnent envie de voir si je peux trouver d’autres machines avec un peu plus ; l’un ne gère que 16Go, et l’autre, 64, mais en SODIMM ECC DDR3, et la barrette de ce type, c’est déjà presque 50€ la 8Go.. donc.. non.
Et comme d’habitude.. si on peut consommer un peu moins que 30W ça serait pas mal :D
Il en demande beaucoup le bonhomme non ?
Choix du matériel
Si on résume donc.
Dans la vie du petit garçon de 35 balais qui fait sa liste au Père Noël, je voudrais :
- une carte mère mini-itx maximum
- Gérer au moins 32, ou 64Go de RAM
- avoir plusieurs ports sata, parce que le RAID..
- plusieurs ports réseaux ça serait chouette ; si tu gères le 2.5G ou le 10G c’est encore mieux
- un CPU 8c/8t, voire au minimum, 4c/8t, mais pas un TDP important
Ben… c’est un peu la disette.
Souvent, ce qui pèche, c’est le CPU. Tous les petits TDP < 20W, n’ont jamais du 8 threads ou 8 coeurs. Sauf l’Atom que j’ai déjà qui est vieux. Et puis y’a aussi le prix.. est-ce que gagner 10-20W de conso, est valable s’il faut acheter du matériel neuf, à plusieurs centaines d’euros ? Selon moi non.
Je me suis dit aussi, du matériel d’occasion ça peut être bien. Pas trop cher, ça recycle, et peut me permettre d’en prendre plusieurs.
Au final… je me suis lancé sur le choix de micro pc, type Dell ou Lenovo (il y a d’autres articles de ce type d’usage pour du promox maison). Sauf qu’il y a plein de générations, et qu’on est souvent limité par la capacité de la machine, surtout le stockage, ou la génération du CPU.
Je vous épargne toute la réflexion, recherche, comparaison de modèles, mais je pars dans l’idée de tester mon infra avec ceci :
-
Deux Dell Optiplex 3050 Micro : pour les VM critiques
- Avec 32Go de RAM chacun (c’est leur max)
- un i5-6500T (qui se trouve facilement)
- Un SSD et un NVME de 1To chacun en raid mdadm
-
En bonus, si c’est stable, deux Dell Optiplex 3020 Micro : pour les VM non critiques qui ont besoin de coeurs
- Avec 16Go de RAM (ce type de ram n’est pas cher, et j’en ai déjà, c’est leur max)
- un Xeon E3-1265L v3 (à 30€ sur aliexpress, et fonctionne sur ce modèle : 4c/8t c’est parfait). Mais un TDP 10W trop haut, donc à voir
- Un SSD seul (pas d’autre choix)
Je me dis ainsi, j’ai 4 machines, où je peux séparer les VM critiques qui ont besoin de raid sur les 3050, et les VM qui ne le sont pas, mais qui ont besoin de CPU sur les 3020.
A noter que ces deux CPUs, donnent plus de points sur les benchmarks, soit presque le double de ce que j’ai actuellement…
Et le single thread, qui m’intéresse pas mal :
Mise en place… et galères
Après avoir trouvé ce genre de machines sur leboncoin, les cpu sur aliexpress, c’est parti pour les installations.
Première chose, tous les bios sont complètement en retard de plusieurs années. Donc je mets à jour tout ça.
Deuxième chose, jouer à la chaise musicale avec mes machines existantes pour récupérer les SSD dont j’ai besoin.
Troisième chose, installer proxmox, avec toute ma config (j’ai tout dans ansible). On les rajoute au cluster existant, et c’est parti.
Je déplace quelques VM, mais pas trop, et je laisse tourner.
La bonne blague ? Au bout d’une journée, une machine disparait du réseau, forcement au moment où t’es pas sur place.
Le doute s’installe : j’espère que je n’ai pas choisi du matos défaillant, ou pas stable sur Linux..
Je fouine les logs, et je vois :
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Multiple Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: PCIe Bus Error: severity=Corrected, type=Data Link Layer, (Transmitter ID)
kernel: pcieport 0000:00:1c.0: device [8086:a294] error status/mask=00001000/00002000
kernel: pcieport 0000:00:1c.0: [12] Timeout
kernel: pcieport 0000:00:1c.0: AER: Multiple Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: PCIe Bus Error: severity=Corrected, type=Data Link Layer, (Transmitter ID)
kernel: pcieport 0000:00:1c.0: device [8086:a294] error status/mask=00001000/00002000
kernel: pcieport 0000:00:1c.0: [12] Timeout
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Multiple Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: PCIe Bus Error: severity=Corrected, type=Data Link Layer, (Transmitter ID)
kernel: pcieport 0000:00:1c.0: device [8086:a294] error status/mask=00001000/00002000
kernel: pcieport 0000:00:1c.0: [12] Timeout
kernel: pcieport 0000:00:1c.0: AER: Corrected error received: 0000:02:00.0
kernel: pcieport 0000:00:1c.0: AER: Multiple Corrected error received: 0000:00:1c.0
kernel: pcieport 0000:00:1c.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
kernel: pcieport 0000:00:1c.0: device [8086:a294] error status/mask=00000041/00002000
kernel: pcieport 0000:00:1c.0: [ 0] RxErr (First)
kernel: pcieport 0000:00:1c.0: [ 6] BadTLP
Toi aussi tu la sens l’embrouille ?
En gros, le kernel râle car il y a des erreurs sur un périphérique en pci-express. Je constate qu’il s’agit du controleur Ethernet.
Sur cette machine, il s’agit de ce controleur :
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
Génial.. un R8168.. qui utilise le pilote R8169… si vous cherchez ‘r8169 proxmox’ sur google, vous décrouvrez le cadeau. Depuis proxmox 8, et le kernel 6.2, il y a que des embrouilles. Le pilote n’est pas stable, et fait planter les machines aléatoirement après plusieurs jours.
Par chance, ce controleur est un R8168 et un driver existe sur debian.. On tente donc l’expérience :
apt install pve-headers r8168-dkms
On pense à éditer le fichier /etc/modprobe.d/r8168-dkms.conf
, et à décommenter la ligne qui blackliste le module r8169 :
# settings for r8168-dkms
# map the specific PCI IDs instead of blacklisting the whole r8169 module
alias pci:v00001186d00004300sv00001186sd00004B10bc*sc*i* r8168
alias pci:v000010ECd00008168sv*sd*bc*sc*i* r8168
# if the aliases above do not work, uncomment the following line
# to blacklist the whole r8169 module
blacklist r8169
On reboot.. et pour le moment, miracle, la machine est stable.
Consommation des bêbêtes
Optiplex 3050
Actuellement, chaque 3050M héberge 5-6 VM, et consomme 12Go de RAM. La charge est aux alentours de 0.3, sur un quad core c’est donc faible.
A noter, que Proxmox fait tourner les CPU en mode “performance”. Ils tournent donc entre 2,5Ghz et 3Ghz, soit des valeurs dans la plage du “TurboBoost”.
$ grep -i mhz /proc/cpuinfo
cpu MHz : 2824.994
cpu MHz : 2202.435
cpu MHz : 3042.111
cpu MHz : 2965.112
# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance
Je pourrais prendre un peu de temps pour les passer en mode ondemand
qui serait déjà moins aggressif sur la fréquence, et peut-être me faire gagner un peu de température.
A noter que je n’ai pas delid les CPU, mais ça pourrait arriver assez vite.
Les machines tournent actuellement entre 9 et 12W. Ce qui est peu je trouve. Quand je les fais bosser, ça monte facilement à 25W, mais cela reste très ponctuel.
Au final je consomme déjà moins qu’avant l’installation de ces deux machines, tout en n’ayant éteint qu’une seule.
Côté température, on est plutôt bien :
Package id 0: +39.0°C (high = +84.0°C, crit = +100.0°C)
Core 0: +36.0°C (high = +84.0°C, crit = +100.0°C)
Core 1: +39.0°C (high = +84.0°C, crit = +100.0°C)
Core 2: +35.0°C (high = +84.0°C, crit = +100.0°C)
Core 3: +35.0°C (high = +84.0°C, crit = +100.0°C)
Optiplex 3020
Par la suite, j’ai testé le montage des Xeon dans les 3020.
Sur la dernière version de bios, le cpu est bien détecté. Par contre, très vite, tu te dis ça va pas le faire :
- En idle à 800Mhz, le cpu est déjà à plus de 43°C (sachant qu’il a été délid)
- En idle, la consommation ne descend pas en dessous de 18W, presque autant que les deux 3050.
- Dès que le système se charge, les CPU arrivent à 65-70°C, et le boitier du 3020 commence à être sympathiquement chaud :p
- Quand il bosse, ça varie jusqu’à 40W.
Au final.. les CPUS vont repartir sur les sites de vente d’occasion, ce n’est pas viable dans mon cas d’usage, même si la performance doit être plutôt bonne.
Si je dois rajouter une troisième machine, je prendrais un autre 3050.
Conclusion
J’aurais pu gagner surement du temps, et de la perf en achetant directement une mono-machine avec plus de coeurs comme on en trouve actuellement sur le marché, mais je ne souhaitais pas partir sur du matos neuf directement, et je souhaitais avoir plusieurs machines séparées.
Le besoin d’un cpu avec plus de 4 threads est au final abandonné, cat je sais que je pourrais gérer mes cas d’usages autrement (je peux éclater les services sur plusieurs machines).
Certaines applis en tout cas énormement gagné en réactivité en changeant de CPU, ça c’est vraiment la bonne nouvelle du projet.
Globalement je suis ravi d’avoir trouvé des machines qui tournent si bien avec une consommation électrique franchement faible.
Il ne me reste qu’à bosser sur ma dernière machine historique toujours allumée pour une question de volumétrie, mais ça ne saurait tarder.
Ce genre de projet me permet en tout cas de repenser mon infra, car les besoins évoluent avec le temps, et surtout de trier mes données (données vivantes, données mortes, archivage, sauvegarde…) afin de limiter la volumétrie de données toujours en ligne.
Un autre article suivra avec la fin de mon chantier ;) Côté machines historiques, une est éteinte, la seconde ne pas tarder, mais deviendra probablement un NAS hors proxmox.