Traqueur, CPU virtuel

Téléchargement du traqueur pour PostgreSQL 9.4, 9.5, 9.6, 10, 11 et 12
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