C’est un peu comme les inventions… Quand c’est dans l’air il faut que ça sorte. Après l’excellent article de l’Officiel PC Raspberry Pi sur l’overclocking du Raspberry Pi 3 j’avais choisi de faire imprimer en 3D un boîtier recevant un ventilateur pour tester cette possibilité. Dans le même temps Raspbian-France actualise un article sur le même sujet. Bin là c’est un peu pareil, l’heure de l’overclocking est venue. En français vous appellerez ça le surcadencement ou … surfréquençage
En raison des risques encourus je déconseille ces tentatives aux débutants (après, chacun fait ce qu’il veut ) pour les réserver plutôt aux utilisateurs avancés ou confirmés.
Tous les composants de même référence sont identiques
FAUX ! Prenez par exemple ce lot de transistors. Ils se ressemblent tous, ils sortent de la même chaîne de fabrication, ils portent la même référence. Ils sont donc tous pareils !
Eh non ! Chacun est un individu différent des autres. Parce que lors de la fabrication la température a varié de quelques dixièmes de degrés, parce que le silicium aussi pur et régulier soit-il a de minuscules défauts, parce que les fils soudés sur les sorties provoquent de légères variations, parce que l’inclusion dans un boîtier amène des perturbations légèrement différentes etc. Chaque composant est différent de son voisin.
Le test final des composants
Comment le fabricant fait-il pour caractériser ses composants ? Il les teste en sortie de chaîne de fabrication. D’une part pour éliminer les composants défectueux, d’autre part pour les trier en fonction d’un certain nombre de critères.
Par exemple pour un transistor BC547 on va trouver ces modèles :
- BC547 : Gain 110 à 800
- BC547A : Gain 110 à 220
- BC547B : Gain 220 à 450
- BC547C : Gain 420 à 800
Vous imaginez bien que le BC547C est vendu plus cher que le BC547
Ce qui est intéressant c’est de voir que le même composant peut avoir un gain qui va de 110 à 800 !
Et pour les microprocesseurs ?
C’est pareil ! A la sortie de chaîne de fabrication, chaque composant est soumis à une batterie de tests. On élimine les composants défectueux, on vérifie le bon fonctionnement de chaque microprocesseur et… on mesure sa fréquence maximale de fonctionnement. Ceux qui sont en dessous de la fréquence cible sont éliminés (ou vendus comme déclassés, on les retrouvera éventuellement sur des sites de vente en ligne…).
Par exemple le même microprocesseur BCM2835 fonctionnait à 700 MHz sur les premières générations de Raspberry Pi et à 900 MHz sur le Raspberry Pi Zero. Mais on pouvait déjà augmenter sa fréquence au delà de 700 MHz, jusqu’à 1GHz.
On peut estimer que si un CPU est garanti pour fonctionner à 700 MHz, le fabricant a pris une marge et que 80% des BCM2835 montent à 800 voire 900 MHz. Ça veut dire aussi que quelques pourcents des CPU montent à 1 GHz, et un pouième monte à 1,1 GHz ou un peu plus…
Avec l’amélioration de la qualité en production, ce même BCM2835 est maintenant garanti pour fonctionner à 900 MHz.
Même pour le BCM2837 du Raspberry Pi 3 ?
Il est soumis aux mêmes tests en fin de production et il est garanti pour fonctionner à 1,2 GHz. Maintenant vous savez que ce n’est que la fréquence garantie par le fabricant et qu’en fait votre BCM2837 va monter plus haut en fréquence, et peut-être même beaucoup plus haut
Overclocker un Raspberry Pi 3
Soyons prudents
Pas question de mettre en danger la vie d’un Raspberry Pi 3. J’ai « investi » dans un jeu de radiateurs. Il y a un radiateur à ailettes pour le CPU, un autre pour le circuit USB/Ethernet et une plaque de cuivre pour assurer le refroidissement de la mémoire.
Montage des radiateurs
Le Raspberry Pi 3 a été équipé de ces radiateurs, munis d’un adhésif présentant un bon coefficient de transmission de la chaleur. Après mure réflexion j’ai décidé de les coller dans ce sens mais à mon avis comme le ventilateur est juste au-dessus ça doit avoir peu d’importance.
Pour la mémoire, la plaque est plus adaptée. Dans un boîtier, il y a peu de place sous le Raspberry Pi et cette solution peu encombrante permet d’utiliser un boîtier classique.
Ventilation forcée
Pour les tests de l’impression collaborative Freelabster, j’avais choisi un boîtier qui pouvait être équipé d’un ventilateur de 30 mm.
J’ai monté le ventilateur pour qu’il souffle l’air ambiant sur le radiateur du CPU. L’autre possibilité était d’aspirer mais pas sûr que les ouïes d’aération soient prévues pour ça.
Pas besoin d’écrou, le diamètre des trous est plus petit que le diamètre de la vis… La fixation se fait en vissant directement dans le plastique du couvercle imprimé.
On connecte la prise sur les broches 4 et 6 du GPIO (fil rouge +5v sur la broche 4, fil noir GND sur la broche 6).
Pensez à passer le fil par le trou du boîtier sinon il faudra démonter. (On ne rigole pas ça m’est arrivé )
Allez on met sous tension ! Le ventilo tourne bien (sur la photo on voit le radiateur à ailettes à travers les pales…).
Bon, après quelques minutes il a commencé à faire un bruit pas sympathique du tout, un mélange de bruit de frottement et de souffle d’air. Bin pour faire un mediacenter qu’on va mettre dans le salon, c’est pas top
Allez on oublie le bruit et on va faire chauffer le Raspberry Pi… ou pas
Que dit la configuration ?
Officiellement, le Raspberry Pi 3 n’est pas overclockable si l’on en croit la fenêtre de configuration affichée dans PIXEL.
Mais quand on regarde dans /boot/config.txt on trouve cette ligne :
#uncomment to overclock the arm. 700 MHz is the default.
On voit qu’avec 700 MHz affichés, c’est un héritage des précédentes versions. Mais c’est bien là que ça se passe
Qu’est-ce qu’on peut modifier ?
Le gouverneur
governor (gouverneur ou régulateur) indique au système comment gérer la vitesse du processeur.
Les noyaux Linux récents intègrent un pilote cpufreq avec le régulateur « ondemand » activé par défaut. Il n’a aucun effet tant que vous n’avez pas overclocké le Raspberry Pi. Mais si vous le faites, la fréquence du CPU variera en fonction de la charge du processeur. Vous pouvez ajuster les valeurs minimales avec les options de configuration * _min ou désactiver la variation de fréquence d’horloge avec force_turbo = 1.
Le régulateur peut prendre plusieurs valeurs (d’après PhoneAndroid.com) Ces régulateurs sont prévus pour gérer la consommation d’un smartphone, destination première du BCM2837. Pour les lister sous Raspbian :
pi@raspberrypi:~ $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors conservative ondemand userspace powersave performance
Les différents régulateurs
- Conservative : Il est plus économe en énergie que OnDemand car il monte lentement à la fréquence maximale lors d’une sollicitation puis redescend rapidement à la fin de celle-ci. Si vous lancez une appli gourmande en ressources (un jeu par exemple) le démarrage sera ralenti par ce régulateur, le temps que la fréquence maximum soit atteinte.
- OnDemand : C’est celui qui est défini par défaut sur le Raspberry Pi. Lorsque la demande en ressources des applications dépasse un certain seuil, il définit automatiquement la fréquence à son maximum. Puis il baisse la fréquence par paliers en fonction de la diminution de la charge, et remonte la fréquence au maximum si la demande remonte. C’est un compromis intéressant entre autonomie et puissance malgré une tendance à trop augmenter la consommation du CPU (sur les courtes et moyennes sollicitations). Il peut donc diminuer l’autonomie plus que d’autres régulateurs dans ce cas. (à voir donc pour des applications alimentées par batterie !)
- Userspace : Ce régulateur ne réagit pas aux demandes système. C’est l’utilisateur qui définit la fréquence d’utilisation. Il est considéré comme obsolète.
- Powersave : Fait constamment tourner le CPU à la fréquence minimale définie. Écologique mais… le Raspberry Pi va ramer en permanence
- Performance : Pousse la fréquence du processeur au maximum en permanence. Il est très gourmand en énergie et en cas d’utilisation prolongée à une fréquence trop élevée, il peut causer des dommages matériels au processeur.
Les deux valeurs qui nous intéressent sont ondemand et performance.
Forcer la valeur du régulateur
Pour forcer le régulateur à performance j’ai utilisé :
echo "performance" |sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
A chaque reboot malheureusement le gouverneur revenait à la valeur par défaut ondemand…J’en ai donc fait un fichier exécutable que j’ai lancé depuis rc.local (/home/pi/gouv.sh &) à chaque démarrage. Ensuite le gouverneur gardait la bonne valeur lors d’un reboot. Pour vérifier ajoutez l’icône de moniteur de fréquence dans la barre des tâches et passez la souris dessus (image ci-dessus).
La vitesse du CPU
Déjà la fréquence ! Plus elle est élevée, plus le CPU pédale ! Mais attention c’est un peu comme votre voiture sur l’autoroute.
L’énergie de la voiture augmente comme le carré de la vitesse… En passant de 90 à 110 Km/h l’énergie augmente de 2000. De 110 à 130 Km/h l’énergie augmente de 2400. De 130 à 150 KM/h l’énergie augmente de 2800. et ainsi de suite. (Pour les sodomiseurs de diptères, on n’a rien à faire des unités, c’est l’accroissement d’énergie qui nous intéresse)
Du côté de la consommation c’est lié, accélérer de 10 Km/h quand vous roulez à 50 Km/h ne consomme pas autant que l’accélération de 10 Km/h quand vous roulez à 130 Km/h d’autant que la résistance de l’air est elle aussi proportionnelle au carré de la vitesse
Si tout ça vous intéresse faites un tour sur ce site qui propose les courbes pour la Toyota Yaris, tracées avec GNU Plot.
La tension
Donc plus vous roulez vite, plus l’augmentation de vitesse a une incidence sur l’énergie de la voiture et plus vous consommez de carburant. Pour le CPU plus la fréquence augmente, plus il dissipe d’énergie (il chauffe !) et plus il faut augmenter la tension d’alimentation !!
Bon revenons à nos moutons.
Quel est donc le rapport avec l’overclocking ? Pour pouvoir augmenter la vitesse du CPU, il faut jouer également sur la tension du cœur. Pour le BCM2835 le paramètre over_voltage peut varier de -16 à +8. Et l’énergie dissipée est proportionnelle… au carré de la tension !
Par défaut over_voltage vaut 0 et cela correspond à une tension de 1,2 volt appliquée au cœur. -16 correspond à 0,8 volt et chaque incrément augmente la tension de 0,025 volt.
Attention à la garantie
Sur l’axe des abscisses figure la valeur de l’over_voltage. L’axe des ordonnées, positionné à la valeur 8, indique la valeur de la tension en fonction de la valeur d’over_voltage. Lorsque over_voltage vaut 0, la tension du cœur est à 1,2 volt. Les deux dernières valeurs d’over_voltage 7 et 8 positionnent de façon irréversible le bit d’un registre qui annule la garantie du BCM2837 !
On voit que la courbe représentant l’énergie dissipée en fonction de la fréquence « grimpe » plus vite que celle de la tension.
Quelques essais
Sans ventilateur
Boîtier ouvert (donc sans ventilation forcée par le ventilateur), avec une charge CPU autour de 50% la température grimpe à 51 degrés.
Avec le boîtier ouvert en lisant une vidéo, la température grimpe à 60 degrés.
Une fois le boîtier fermé mais toujours sans ventilateur, sans charge CPU, la température est à 50 degrés, la même température que si le boîtier était ouvert, mais le CPU chargé à 54%.
Avec ventilateur
Dans les mêmes conditions que ci-dessus : Boîtier fermé, pas ou peu d’activité CPU, une fois le ventilateur mis en route la température descend de 15 degrés ! Quand même…
Et là… avec une charge CPU importante, ventilateur tournant, la température reste à 45 degrés.
On peut donc dire que la ventilation forcée a une forte influence sur la température du CPU.
Tests de vitesse
Les décimales de pi
Comment tester la vitesse de calcul du CPU ? j’ai choisi un test classique, le calcul des décimales de pi. Ça tombe bien, non ? C’est un exemple qui est donné dans le man de la commande bc :
pi=$(echo "scale=10; 4*a(1)" | bc -l)
Qui deviendra dans notre cas
time echo « scale=5000; 4*a(1) » | bc -l
- time : mesurer le temps d’exécution
- scale=5000 : Nombre de décimales de pi à calculer
- 4*a(1) : formules mathématique pour calculer pi. Utilise la fonction Arc Tangente a().
- bc -l : la formule est envoyée à la commande bc, pour que celle-ci effectue le calcul. L’option -l permet de charger la librairie mathématique standard, nécessaire pour utiliser la fonction Arc Tangente a().
Installation de bc
La calculatrice en ligne de commande bc n’est pas installée par défaut dans Raspbian. Il faut donc l’installer. Au passage on peut voir que l’activité du CPU lors de l’installation reste autour de 45% et la température à 40 degrés. Le boîtier était fermé, ventilateur en fonctionnement.
Calcul de 5000 décimales de pi sans overclock
Lançons le premier test de vitesse qui servira de référence. J’ai testé le calcul de 50, 500, 5000 et 50000 décimales.
pi@raspberrypi:~ $ time echo "scale=50 ; a(1)*4" | bc -l 3.14159265358979323846264338327950288419716939937508 real 0m0.006s user 0m0.000s sys 0m0.000s
6 mS pour calculer 50 décimales… ce n’est pas très significatif et les comparaisons ne seront pas faciles
et pour 50000 décimales il faut plus de 8 heures ! Euhhh… ça fait peut-être beaucoup ! Pas simple dans ce cas de multiplier les tests
J’ai donc opté pour 5000 décimales de pi.
time echo "scale=5000; 4*a(1)" | bc -l
Bon, là c’est utilisable : 1 minute 20 secondes sans overclock ce n’est pas trop long pour un test et avec l’affichage des millisecondes on a suffisamment d’informations pour faire des comparaisons.
Calcul de 5000 décimales de pi avec overclock
Avec la fréquence poussée à 1,4 GHz le temps de calcul tombe à 1 minute et 9 secondes (j’arrondis). La température est bien contrôlée puisqu’elle se maintient à 41 degrés.
Ici un test à la fréquence de 1,450 GHz, on est tombé à 1,7 seconde et la température est toujours vers 40 degrés.
Alors on fait comment ?
Bin… j’aurai tendance à dire chacun sa m…éthode. C’est pour ça que j’ai indiqué que l’article est destiné aux utilisateur avancés. Ici pas de recette du genre : Voilà les valeurs qu’il faut mettre pour overclocker votre Raspberry Pi 3. Ce serait une connerie ignorer que chaque microprocesseur est vraiment unique et que si overclock il y a, il faudra absolument l’adapter à chaque cas ! Ce qui fonctionne chez moi ne fonctionnera peut-être pas chez vous et je vais encore avoir des commentaires du genre : « J’ai bien suivi le tuto mais ça ne marche pas ! Vous avez une idée ? » ou encore « C’est quoi ce tuto pourri qui marche pas ? »
Il va falloir vous armer de patience, et d’un tableur, noter les valeurs que vous mettez dans /boot/config.txt et… tester ! Si vous ne prenez pas de notes après une dizaine de tests vous ne vous souviendrez plus des premiers résultats
Les valeurs que vous pouvez modifier sont ci-dessus : la fréquence du GPU, celle du CPU et celle de la mémoire plus la tension du cœur. Certaines combinaisons fonctionnent, d’autres non
Parcourez les articles dans les sources pour en savoir plus.
Et c’est pas tout !
On pourrait croire que le fait d’avoir mis des valeurs dans config.txt, redémarré Raspbian et calculé 5000 décimales de pi est suffisant. Eh bin non ! Il faut aussi faire un test en chargeant « vraiment » le CPU, tester la lecture et l’écriture en mémoire et accéder à la carte microSD en lecture et en écriture. A quoi ça servirait d’avoir un Raspberry Pi qui tourne à 1,5 GHz s’il plante dès qu’on appuie sur une touche du clavier ?
Faut pas stresser…
Bin si, justement on va le stresser le CPU avec un programme qui s’appelle… stress-ng ! Commencez par installer ce programme, ensuite vous pourrez l’utiliser.
Lorsque vous lancerez le programme stress-ng, vous verrez l’indicateur de charge CPU bondir à 100% et la température monter inexorablement pour se stabiliser (autour de 60 degrés dans mon cas). Et puis après un moment tout se fige (ou pas) et vous savez que la fréquence CPU est trop élevée.
Diminuez un peu la fréquence et… recommencez !
Surtout, n’oublies rien !
A quoi ça sert d’avoir un CPU qui pédale comme s’il avait un vélo électrique, mais qui oublie pourquoi il pédale ? En clair Si vous augmentez la vitesse de la mémoire, il faut aussi vérifier qu’elle continue de fonctionner normalement.
Pour ça on va utiliser memtester (installez -le).
Avec la commande free, regardez la mémoire disponible et lancez memtester en lui passant cette valeur (en Mo) en paramètre. memtester commence des tests. Considérez déjà que s’il a fait une boucle c’est bon signe. Attention, si memtester plante ou signale une erreur, celle-ci peut aussi être due à un problème de CPU (fréquence ou over_voltage)… Vous voyez c’est pas si simple
Une carte n’est pas le territoire
Ce clin d’œil à Alfred Korzybski nous amène à la carte micro SD. Là encore, il ne sert à rien de booster les performances de votre Raspberry Pi s’il se produit des erreurs de lecture ou d’écriture sur la carte SD. Ça va forcément se finir en catastrophe.
sdtest.sh est disponible sur elinux.org. En voici une copie :
#!/bin/bash #Simple stress test for system. If it survives this, it's probably stable. #Free software, GPL2+ echo "Testing overclock stability..." #Max out all CPU cores. Heats it up, loads the power-supply. for ((i=0; i<$(nproc --all); i++)); do nice yes >/dev/null & done #Read the entire SD card 10x. Tests RAM and I/O for i in `seq 1 10`; do echo reading: $i; sudo dd if=/dev/mmcblk0 of=/dev/null bs=4M; done #Writes 512 MB test file, 10x. for i in `seq 1 10`; do echo writing: $i; dd if=/dev/zero of=deleteme.dat bs=1M count=512; sync; done #Clean up killall yes rm deleteme.dat #Print summary. Anything nasty will appear in dmesg. echo -n "CPU freq: " ; cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq echo -n "CPU temp: " ; cat /sys/class/thermal/thermal_zone0/temp dmesg | tail echo "Not crashed yet, probably stable."
Laissez tourner sdtest.sh. S’il va à son terme tout va bien il a fait dix cycles de lecture et d’écriture sur la carte SD
Là encore en cas de plantage ou d’erreur il conviendra de jouer sur les paramètres du CPU.
Ci dessus un test avec une fréquence de 1,350 GHz. La température à la fin du test atteint 63 °C. J’ai réduit le nombre de boucles à 2 lectures et 2 écritures pour accélérer le processus. Quand les paramètres d’overcloking permettent de boucler 2 fois, repassez à 10 boucles et… allez boire un café
Y-a quoi à gagner ?
Le tableau ci-dessus résume les tests et le gain en temps sur le calcul de pi (ce n’est qu’une indication, il faudrait tester d’autres applications).
Dans mon cas les conditions de fonctionnement stable avec tous les tests sont réunies à une fréquence CPU de 1350 MHz.
Les réglages sont alors ceux-ci. Ce qui ne présage rien pour vos propres réglages.
Le gain en vitesse est de 13% pour une performance (calcul de pi) améliorée de 11%.
Comme quoi c’est pas le tout de faire son cake en annonçant à la cantonade (rien à voir avec le joueur de foot) « Mon Raspberry Pi 3 tourne à 1,5 GHz ! » s’il plante dès qu’on applique une charge au CPU
Comme je n’ai pas l’intention (pour le moment) de tester le watercooling
ni le refroidissement par module Peltier
je trouve que le jeu n’en vaut pas la chandelle…
La consommation
Pour un Raspberry Pi 3 sans overclock, en faisant tourner stress-ng on a une consommation de 0.95 A soit 4.75w
Le même Raspberry Pi 3 avec stress-ng et une fréquence CPU de 1350 MHz consomme 1.14 A soit 5,7w
C’est 20% de consommation supplémentaire pour 10% de performance en plus
Conclusion
Gagner un peu plus de 10% de performance en soumettant un microprocesseur à des conditions pour lesquelles il n’est pas forcément prévu, ce n’est pas mon truc.
Entre un Raspberry Pi un tout petit peu plus lent et le ventilateur qui me casse les oreilles depuis 2 jours (oui le Pi3 tourne à 1,350 GHz depuis 2 jours pleins maintenant, sans planter, même avec des applis ouvertes et utilisées :
Comme on le dit : il n’y a que les imbéciles qui ne changent pas d’avis. Je n’étais pas fan (jeu de mot) d’overclocking, eh bien je le reste ! Donc… je suis un imbécile ( qui a dit ça on le savait déjà ?). Je vais donc remettre mon Raspberry Pi 3 en état « normal » et fermer la parenthèse sur cet épisode.
Bon, après si vous avez des expériences positives de l’overclocking, rien ne vous empêche de les raconter dans les commentaires ci-dessous, avec des photos si vous voulez
Sources
- https://retroresolution.com/2016/03/24/overclocking-the-raspberry-pi-3-pragmatism-and-optimising-for-single-vs-multicore-performance/
- Raspberry Pi 3 – Stable and Unstable Overclock Values
- http://elinux.org/RPiconfig#Overclock_stability_test
- https://raspbian-france.fr/comment-overclocker-raspberrypi-3/
- https://www.raspberrypi.org/documentation/configuration/config-txt.md
- http://elinux.org/RPiconfig#Overclock_stability_test
- http://www.gamespot.com/articles/overclocking-for-beginners/1100-6421190/
- https://haydenjames.io/raspberry-pi-3-overclock/
- https://github.com/retropie/retropie-setup/wiki/Overclocking
- http://megakemp.com/2013/02/26/adventures-in-overclocking-a-raspberry-pi/
- http://www.phonandroid.com/forum/qu-est-ce-qu-un-gouverneur-cpu-t26062.html
Cet article Overclocker un Raspberry Pi 3 : rêve ou réalité ? a été publié en premier sur Framboise 314, le Raspberry Pi à la sauce française.....