Traqueur, CPU virtuel
Téléchargement du traqueur pour PostgreSQL 11, 12, 13, 14 et 15
Téléchargement du traqueur pour PostgreSQL 10
Téléchargement du traqueur pour PostgreSQL 9.6
Téléchargement du traqueur pour PostgreSQL 9.5
Téléchargement du traqueur pour PostgreSQL 9.4
Téléchargement du traqueur pour PostgreSQL 9.3
Journal des changements
Signalement de bugs via le forum
Licence identique à celle de PostgreSQL, open source type BSD
Dossier des versions
Même si les DBA sont parfois réticents, les serveurs de bases de données peuvent être virtualisés.
Une pratique courante est de surallouer les CPU disponibles. Cela permet de faire des économies en optimisant l'utilisation de la puissance CPU.
Exemple sur la configuration Xen que j'utilise :
xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 2048 1 r----- 460149.1
sv-t-vtl-bas10 20 4096 4 -b---- 306299.3
sv-t-vtl-bas11 22 4096 4 -b---- 1154202.0
sv-t-vtl-bas12 23 8192 3 -b---- 261858.6
sv-t-vtl-bas15 24 1024 1 -b---- 74718.5
sv-t-vtl-bas16 25 1024 1 -b---- 75280.1
sv-t-vtl-bas02 28 1024 1 -b---- 81602.5
sv-t-vtl-bas04 29 1024 1 -b---- 185860.3
sv-t-vtl-bas08 30 4096 2 -b---- 1690464.0
sv-t-vtl-bas01 31 1024 1 -b---- 122047.4
sv-t-vtl-bas03 32 1024 1 -b---- 163815.2
sv-t-vtl-bas05 35 8192 4 -b---- 50624.5
sv-t-vtl-bas07 37 3840 2 -b---- 18302.0
sv-t-vtl-bas06 40 4096 4 -b---- 1463823.2
sv-t-vtl-bas13 46 16384 4 r----- 26372.7
L'hôte dispose de 8 coeurs Xeon mais le nombre de CPU alloués est 34. Tout va bien tant que les machines virtuelles ne sollicitent pas simultanément plus de 8 CPU.
Nous allons le vérifier avec une des machines virtuelles, sv-t-vtl-bas13 :
cat /proc/cpuinfo | grep "model name"
model name : Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz
model name : Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz
model name : Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz
model name : Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz
time parallel -j1 "./traqueur.sh" ::: "-a 1"
O. Tange (2011): GNU Parallel - The Command-Line Power Tool
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 269
real 4m29,805s
user 4m20,892s
sys 0m6,084s
time parallel -j4 "./traqueur.sh" ::: "-a 1" "-a 1" "-a 1" "-a 1"
O. Tange (2011): GNU Parallel - The Command-Line Power Tool
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 279
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 279
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 279
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 279
real 4m40,001s
user 17m19,552s
sys 0m23,340s
time parallel -j5 "./traqueur.sh" ::: "-a 1" "-a 1" "-a 1" "-a 1" "-a 1"
O. Tange (2011): GNU Parallel - The Command-Line Power Tool
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 346
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 348
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 348
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 348
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 349
real 5m49,667s
user 21m39,516s
sys 0m28,868s
Le test CPU du traqueur (option -a) est lancé en parallèle grâce à l'outil GNU "parallel". Le score théorique du processeur tourne autour des 260-270s.
La machine sv-t-vtl-bas13 obtient bien ce score lorsque le test est exécuté sur 1 thread, résultat obtenu : 270.
Avec 4 threads, le score est toujours assez proche du résultat optimal, résultat obtenu : 280.
Avec 5 threads, le score s'éloigne du résultat optimal : 350. C'était toutefois attendu puisque la machine sv-t-vtl-bas13 dispose de 4 CPU virtuels.
À présent, nous allons relancer le test sur 4 threads alors que plusieurs machines virtuelles travaillent simultanément :
time parallel -j4 "./traqueur.sh" ::: "-a 1" "-a 1" "-a 1" "-a 1"
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 407
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 408
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 409
traqueur 3.01.00 - outil de diagnostic performance pour PostgreSQL 9.3 => 11
INFORMATION, test CPU de calcul du plus grand nombre premier connu en 2017 ...
INFORMATION, score CPU (s) ... 409
real 6m49,516s
user 24m44,008s
sys 0m32,224s
top
...
24664 postgres 20 0 264268 263068 884 R 100,0 1,6 3:10.13 traqueur_bellar
24670 postgres 20 0 264268 263060 876 R 100,0 1,6 3:10.79 traqueur_bellar
24648 postgres 20 0 264268 263124 944 R 99,7 1,6 3:11.66 traqueur_bellar
24674 postgres 20 0 264268 263060 876 R 99,7 1,6 3:09.30 traqueur_bellar
...
Depuis la machine virtuelle, nous avons l'impression via un top que notre machine travaille à 100% mais que tout va bien.
Le résultat obtenu (410) est pourtant très éloigné du résultat obtenu précédemment avec 4 threads (280). Le matériel a rattrapé le virtuel, la puissance CPU partagée entre les machines virtuelles ne peut pas dépasser la puissance CPU physique.
Conclusion
La puissance CPU réelle peut être différente de la puissance CPU théorique, notamment sur les serveurs virtualisés.
Les systèmes modernes permettent de répartir au mieux la charge sur un serveur et entre serveurs. Cela peut être réalisé de manière entièrement automatique ou encore en dédiant un nombre de CPU minimal à chaque machine virtuelle avec en complément un pool partagé. Il convient tout de même d'être vigilant sur le sujet, d'autant que PostgreSQL dispose de plus en plus de capacités d'exécutions en parallèle.
Mise à jour : 29/09/2018