Comprendre Ryzen Master: guide d’overclocking des Ryzen 3000

La dernière génération de processeurs AMD, d’architecture Zen 2 (nom de code « Matisse ») peut être overclockée très facilement, en utilisant le logiciel qui vient avec, Ryzen Master. D’apparence complexe avec de nombreux paramètres à régler, nous allons essayer de comprendre ce qu’il propose. Cet article s’adresse à des novices/débutants mais curieux d’en apprendre sur les détails techniques.

Rappels des caractéristiques techniques de la gamme Ryzen 3000 pour socket AM4

ModèleNB coeurs (NB threads)fréquence max (boost single core)TDP
Ryzen 5 3500X6 (6)3.6 (4.1) GHz65 W
Ryzen 5 36006 (12)3.6 (4.2) GHz65 W
Ryzen 5 3600X6 (12)3.8 (4.4) GHz95 W
Ryzen 7 3700X8 (16)3.6 (4.4) GHz65 W
Ryzen 7 3800X8 (16)3.9 (4.5) GHz105 W
Ryzen 9 3900X12 (24)3.8 (4.6) GHz105 W
Ryzen 9 3950X16 (32)3.5 (4.7) GHz105 W
Les processeurs de bureau avec architecture Zen 2 pour socket AM4 (cartes mères B350/B450/B550 et X370/X470/X570). Les Threadripper ne sont pas inclus puisqu’ils utilisent d’autres modèles de carte mère (à socket sTRX4). Les modèles en « Ryzen 3XXXG » qui viennent avec une puce graphique intégrée ne sont pas des Zen 2, et les « Ryzen 3XXXU » et « Ryzen 3XXXH » pour laptop non plus, ce sont des Zen+.

Le nombre de coeurs physique indique combien de tâches le processeur peut exécuter en même temps. En pratique, grâce au SMT (Simultaneous Multi Threading), souvent appelé « Hyperthreading » chez les processeurs Intel, le processeur peut partager un core entre deux threads, ce qui multiplie par deux le nombre de threads pouvant être exécutés en même temps. On regardera donc surtout la seconde valeur.

La fréquence en GHz est le nombre de cycles par seconde que chaque coeur peut effectuer. Un certain nombre d’opérations élémentaires peuvent être effectuées par cycle, le nombre d’IPC (Instructions Per Cycle), par exemple, 4 opérations par cycle. C’est une valeur difficile à connaitre et à mesurer, spécifique de l’architecture. Prenons l’exemple du Ryzen 7 3700X, il peut réaliser 3.6 milliards d’opérations par seconde fois 16 threads fois disons 4 opérations = 230.4 milliards d’opérations par seconde, soit 230.4 Gflops. Un flop, ou floating-point operation, est une opération élémentaire sur un nombre à virgule. On mesure donc les puissances de calcul brutes en flops. Je le cite surtout à l’usage des bio-informaticiens qui me suivent, pour les gamers, cela n’est quasiment pas corrélé à une bonne expérience de jeu. En effet, il n’est pas dit que vos applications et jeux soient capables d’utiliser plusieurs threads en parallèle. Bien souvent malheureusement, un algorithme ne peut pas être parallélisé et s’effectue sur un seul coeur. La fréquence boost est la fréquence maximale que peut atteindre un coeur quand il tourne tout seul sans ses voisins. En pratique, il est rare d’atteindre effectivement la fréquence boost.

Le TDP (Thermal Design Power) est la quantité de chaleur que votre système de refroidissement doit être capable d’évacuer pour que la puce fonctionne correctement (1 Watt = 1 Joule par seconde). Globalement, ça donne une idée de la quantité de chaleur émise par la puce, et donc de sa consommation de courant. Un TDP plus élevé veut dire investir dans un système de refroidissement plus perfectionné, une facture électrique plus élevée, et souvent, plus de ventilateurs qui tournent et donc de bruit.

La finesse de gravure (en nm) est à relier au TDP : un processeur gravé plus finement demande moins de courant pour fonctionner et dissipe logiquement moins de chaleur par effet Joule. Tous les processeurs Zen2 sont gravés en 7 nm, soit la meilleure finesse de gravure en 2020. Cependant, graver plus finement c’est aussi avoir plus de place: AMD a donc augmenté le nombre de transistors entre les générations Zen+ et Zen2. Donc la corrélation entre finesse de gravure et TDP n’est pas très rigoureuse, il faut aussi prendre en compte la taille de la puce.

Les 8 coeurs de mon 3700X, organisés en groupes, les CCD et CCX (Core Complex Die et Core Complex), et leur fréquences en temps réel au moment de la capture (en MHz, à faible charge). Sur mon 3700X, je n’ai qu’un seul CCD contenant deux CCX de 4 coeurs. Les étoiles et points marquent les coeurs les plus rapides, pour des raisons d’architecture.

Les cadrans de RyzenMaster

Nous allons jeter un oeil à l’écran d’accueil du logiciel. et comprendre ce que ça affiche.

Des cadrans de monitoring permettent de surveiller la température, la vitesse et la consommation du processeur.

Qu’est-ce que donc que tout ceci ? A gauche, la température du Ryzen. Juste à coté, la cadence la plus rapide observée sur l’un des coeurs. Jusque là, facile. On va détailler un peu la suite:

Le Package Power Tracking (PPT) est la consommation de courant, en pourcentage de la limite autorisée, elle même en Watts. La limite est de 88W (processeurs à 65W de TDP) ou 142W (processeurs à 105W de TDP). Cette mesure prend en compte le socket du CPU plus le contrôleur de la mémoire RAM. Les valeurs respectives en Watts sont données dans les deux cadrants suivants, pour le CPU et pour le contrôleur « SoC ».

Le Thermal Design Current (TDC) est l’intensité de courant atteinte lorsque le processeur atteint sa limite de « thermal throttling » (c’est à dire la température où il est trop chaud pour continuer à fonctionner, qui est indiquée dans le cadran Température), c’est à dire 95°C pour cette génération de Ryzen. L’Electrical Design Current (EDC) est l’intensité maximale qu’il est possible d’envoyer dans le socket. Les pourcentages donnés devraient correspondre au cadran Consommation CPU, ce qui n’est pas le cas, j’ai donc probablement encore beaucoup à apprendre sur ce logiciel.

Les capacités d’overclocking automatique des Ryzen 3000

AMD se vante de ses technologies avec de jolis noms pompeux qu’on ne comprend pas à première lecture. Nous allons voir ce que font Precision Boost, XFR, Precision Overdrive, dans leurs versions 1 et 2.

Les différentes technologies surveillent des choses différentes (consommation, température, stabilité, activité des coeurs voisins….) et votent entre elles pour augmenter ou diminuer la fréquence autorisée.

Precision Boost (PB) propose d’augmenter ou diminuer la fréquence des coeurs d’un CCX si sa consommation électrique est en dessous de la limite autorisée. Note historique: La version 1 des premiers Ryzen regardait aussi l’activité des coeurs du CCX et proposait d’augmenter la fréquence des coeurs actifs si seuls 1 ou 2 coeurs étaient actifs, jusqu’à atteindre la fréquence boost. Ce n’est plus le cas avec le Precision Boost 2 (PB2) des Ryzen 2000 et 3000, qui regarde seulement la limite de consommation du CCX. Ainsi, la courbe des fréquences décroit progressivement et sans cassure entre la fréquence boost et la fréquence de base quand le nombre de threads augmente.

Xtended Frequency Range (XFR) est une technologie qui s’adapte à votre système de refroidissement. S’il est bien refroidi, chaque coeur va s’autoriser individuellement à pousser plus loin ses fréquences, jusqu’à 100 MHz de plus par coeur.
La version 1 des premiers Ryzen ne l’autorisait que pour certains coeurs en cas de faible utilisation, la version 2 n’utilise plus que la température comme limite.
XFR2 est donc un vrai argument pour bien refroidir votre Ryzen: il peut gagner en performance s’il n’est pas trop chaud.

Le Precision Boost Overdrive (PBO), maintenant. C’est la véritable feature d’overclocking automatique. Les Ryzen 3000 sont capables d’aller vérifier la capacité qu’a votre carte mère à fournir du courant au socket. Votre carte mère a en effet été concue pour accueillir tout processeur AM4, et est potentiellement capable de fournir plus de courant que la limite pour lequel votre processeur est conçu. PBO autorise à outrepasser la limite du processeur pour utiliser celle de la carte (celle des Voltage Regulator Modules (VRM) de la carte mère, en fait) et atteindre, potentiellement, des fréquences plus élevées en consommant plus.
Le PBO aide surtout pour augmenter la fréquence lorsque de nombreux threads sont actifs. Les gains sont donc dépendants de votre carte mère, les modèles X570 en profiteront plus, mais ne sont pas nécessaires. L’ancien PBO se contentait d’outrepasser la limite de consommation électrique, la nouvelle version du PBO des Ryzen 3000 autorise en plus de repousser la limite de fréquence du processeur si la VRM est capable de fournir le courant.

Bash shell trick : play a sound when your computations fail or succeed

Several times, i launched heavy computations from a bash terminal, and then worked on something else waiting for them to finish. And then 3 hours later, discover that they failed at the first minute.

Sometimes it’s the opposite : i wait for them to finish, but… they already finished.

Solution : Make bash play a sound when a heavy command succeeds or fails !


1) Play a sound from the terminal

We will use the program aplay.

$ aplay -q ~/Public/my_sound.wav

So, i downloaded some free scores in wav format and edited them to cut and extract just a piece of Haendel’s Hallelujah (for successful jobs) and Chopin’s Funeral March (for failed jobs).

$ aplay -q ~/Public/hallelujah.wav
$ aplay -q ~/Public/funeral.wav

2) Get the return code of a command

Bash has a variable « ? » that stores the return code of the last executed command. After running something, you can try:

$ echo $?
0

If it returns 0, it means that everything went well (no errors). Otherwise, the value is supposed to help you to understand what the problem was using the command’s documentation (it is often -1, 1, 2 …).
So we can store this value and then test it to play the right sound. (We need to store it, because our bash code will also modify the « ? » variable).

LAST=$?;
if [ $LAST -eq 0 ]; 
    then aplay -q ~/Public/hallelujah.wav; 
    else aplay -q ~/Public/funebre.wav; 
fi;

3) Set it permanently

We need to add the previous code to the $PROMPT_COMMAND variable, which contains the instructions executed after a command to restore a command prompt (like displaying $PS1, etc…).

PROMPT_COMMAND='LAST=$?; if [ $LAST -eq 0 ]; then aplay -q ~/Public/hallelujah.wav; else aplay -q ~/Public/funebre.wav; fi'

To get a permanent effect everytime you open a terminal, edit your .bashrc file (nano ~/.bashrc) and add the line at the end.
Note that on some terminals, the PROMPT_COMMAND is overwritten by /etc/profile.d/vte.sh. I partially solved the problem by editing /etc/profile.d/vte.sh and commenting the line that sets PROMPT_COMMAND.


4) Restrict it to very-long command only

As it is annoying to play 15 seconds of sound at every cd and ls, we need to restrict the execution to long commands.
To measure the running time of a command we need to compute the difference between the time when it started and the time when it exited.
We get the current time this way (number of seconds since January the first 1970):

$ printf "%(%s)T" -1
1557489306

We can store the result of printf into a variable with printf -v:

printf -v __timer_start "%(%s)T" -1
printf -v __timer_stop "%(%s)T" -1

We already know how to execute it at the end of a command, it’s using PROMPT_COMMAND. We will add the second line into it.
To execute a command when another command starts, we will use the trap DEBUG linux command:

$ trap 'something to execute' DEBUG

We can use it to execute something at the begining of every command.

Then, we will store the difference between __timer_start and __timer_stop into a variable __timer (using printf -v again), which we will test to know if we should play a sound or not (example : if [ $__timer -gt 10 ] for ten seconds threshold).


5) All together

Modify your .bashrc to include the two following lines (the trap, and the PROMPT_COMMAND definition):

trap '[ -v __timer_start ] || TZ=UTC printf -v __timer_start "%(%s)T" -1' DEBUG

PROMPT_COMMAND='LAST=$?; TZ=UTC printf -v __timer_stop "%(%s)T" -1; TZ=UTC printf -v __timer $((__timer_stop - __timer_start)); if [ $__timer -gt 10 ]; then if [ $LAST -eq 0 ]; then aplay -q ~/Public/hallelujah.wav; else aplay -q ~/Public/funeral.wav; fi; fi; unset __timer_start'

To make it work, you need to unset the $__timer_start variable at the very end.
The TZ=UTC are only used to define the time-zone (not so useful).

Here it is !
Open a terminal.

persalteas@persalstation[~]$ ls
Data       labo           logo_univ.png   Modèles   Release.key  signature.png  Téléchargements    Bureau    Documents    Libraries      mcfold.htm      Projects    Public    Seafile      Software    Zotero
persalteas@persalstation[~]$ sleep 11
persalteas@persalstation[~]$ sleep 11; ls aiefv
ls: impossible d'accéder à 'aiefv': Aucun fichier ou dossier de ce type

The first command (ls) plays nothing. The second (sleep 11) takes 11 seconds and plays Hallelujah. The last (sleep 11; ls aiefv) takes 11 seconds, fails, and plays the Funeral March.

Enjoy !