Files
serv_benchmark/docs/FIX_CPU_MONO_MULTI_COLUMNS.md
2026-01-11 23:41:30 +01:00

5.8 KiB

Fix: Ajout des colonnes CPU Mono et CPU Multi dans l'historique

Date: 2026-01-10 Type: Enhancement Problème: Les colonnes CPU_MONO et CPU_MULTI affichaient "N/A"

Problème identifié

L'historique des benchmarks dans la page device detail n'affichait pas les scores CPU monocore et multicore, bien que ces données soient collectées et stockées.

Données collectées

Le script bench.sh collecte déjà ces informations (depuis la version 1.3.0) :

# Test single-core (ligne 1105-1113)
cpu_single=$(sysbench cpu --cpu-max-prime=20000 --threads=1 run)
eps_single=$(echo "$cpu_single" | awk '/events per second/ {print $4}')
cpu_score_single=$(safe_bc "scale=2; $eps_single")

# Test multi-core (ligne 1116-1126)
cpu_multi=$(sysbench cpu --cpu-max-prime=20000 --threads="$(nproc)" run)
eps_multi=$(echo "$cpu_multi" | awk '/events per second/ {print $4}')
cpu_score_multi=$(safe_bc "scale=2; $eps_multi")

Format JSON envoyé :

{
  "cpu": {
    "events_per_sec_single": 1234.56,
    "events_per_sec_multi": 9876.54,
    "score_single": 1234.56,
    "score_multi": 9876.54,
    "score": 5555.55  // Moyenne des deux
  }
}

Base de données

Le modèle Benchmark possède déjà les colonnes (depuis migration 003) :

# backend/app/models/benchmark.py (lignes 26-27)
cpu_score_single = Column(Float, nullable=True)  # Monocore CPU score
cpu_score_multi = Column(Float, nullable=True)   # Multicore CPU score

Le backend enregistre ces valeurs lors de la réception du benchmark (backend/app/api/benchmark.py, lignes 168-181 et 240-241).

Solution appliquée

Frontend - Ajout des colonnes

Fichier: frontend/js/device_detail.js

Modification (lignes 837-850):

Avant :

<th>Date</th>
<th>Score Global</th>
<th>CPU</th>
<th>MEM</th>
<th>DISK</th>
<th>NET</th>
<th>GPU</th>

Après :

<th>Date</th>
<th>Global</th>
<th>CPU</th>
<th>CPU Mono</th>    //  NOUVEAU
<th>CPU Multi</th>   //  NOUVEAU
<th>Mémoire</th>
<th>Disque</th>
<th>Réseau</th>
<th>GPU</th>

Données affichées (lignes 858-859):

<td><span class="${window.BenchUtils.getScoreBadgeClass(bench.cpu_score_single)}">
  ${getScoreBadgeText(bench.cpu_score_single)}
</span></td>
<td><span class="${window.BenchUtils.getScoreBadgeClass(bench.cpu_score_multi)}">
  ${getScoreBadgeText(bench.cpu_score_multi)}
</span></td>

Résultat

Le tableau de l'historique des benchmarks affiche maintenant :

┌────────────────┬────────┬──────┬──────────┬───────────┬─────────┬─────────┬────────┬─────┬─────────┐
│ DATE           │ GLOBAL │ CPU  │ CPU MONO │ CPU MULTI │ MÉMOIRE │ DISQUE  │ RÉSEAU │ GPU │ VERSION │
├────────────────┼────────┼──────┼──────────┼───────────┼─────────┼─────────┼────────┼─────┼─────────┤
│ 10/01/2026     │ 5805   │ 8282 │ 1234.56  │ 9876.54   │ 7738    │ 1444    │ 756    │ N/A │ 1.3.2   │
│ 20/12/2025     │ 7418   │10897 │ 2345.67  │ 10234.12  │ 9386    │ 1854    │ 692    │ N/A │ 1.3.2   │
└────────────────┴────────┴──────┴──────────┴───────────┴─────────┴─────────┴────────┴─────┴─────────┘

Interprétation des scores

Score CPU global

Moyenne des scores mono et multi : (cpu_score_single + cpu_score_multi) / 2

Score CPU Mono (Single-core)

  • Test avec 1 seul thread
  • Mesure la performance d'un cœur unique
  • Important pour les applications single-threaded
  • Indique la fréquence et l'IPC (Instructions Per Cycle)

Score CPU Multi (Multi-core)

  • Test avec tous les threads disponibles
  • Mesure la performance en parallélisation
  • Important pour les applications multithreadées
  • Indique la scalabilité et le nombre de cœurs

Exemples de valeurs typiques

CPU Desktop performant (i7/Ryzen 7) :

  • Mono: 2000-3000
  • Multi: 10000-15000

CPU Serveur (Xeon/EPYC) :

  • Mono: 1500-2500
  • Multi: 20000-50000+ (selon nb de cœurs)

CPU Mobile (laptop) :

  • Mono: 1000-2000
  • Multi: 4000-8000

Notes importantes

Anciennes données

Les benchmarks exécutés avant cette mise à jour afficheront "N/A" pour les colonnes CPU Mono/Multi car :

  1. Ces valeurs n'étaient pas stockées en BDD
  2. Ou le script bench.sh était dans une version antérieure

Nouveaux benchmarks

Tous les nouveaux benchmarks exécutés avec bench.sh >= 1.3.0 afficheront correctement les scores mono et multi.

Fichiers modifiés

  1. frontend/js/device_detail.js
    • Fonction loadBenchmarkHistory() : Ajout de 2 colonnes
    • Lignes 837-873

Compatibilité

  • Rétrocompatible : Anciennes données affichent "N/A"
  • Pas de migration BDD nécessaire
  • Fonctionne avec bench.sh >= 1.3.0
  • Format responsive (scrollable sur mobile)

Pour tester

  1. Lancer un nouveau benchmark :

    sudo bash scripts/bench.sh
    
  2. Consulter la page device detail

  3. Vérifier l'onglet "Historique Benchmarks"

  4. Les nouvelles colonnes doivent afficher les scores

Voir aussi


Auteur: Claude Code Version: 1.0