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

182 lines
5.8 KiB
Markdown

# 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) :
```bash
# 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é :
```json
{
"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) :
```python
# 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 :**
```javascript
<th>Date</th>
<th>Score Global</th>
<th>CPU</th>
<th>MEM</th>
<th>DISK</th>
<th>NET</th>
<th>GPU</th>
```
**Après :**
```javascript
<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):**
```javascript
<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 :
```bash
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
- [Backend API Benchmark](../backend/app/api/benchmark.py) - Enregistrement des scores
- [Script bench.sh](../scripts/bench.sh) - Collecte des données (lignes 1096-1154)
- [Modèle Benchmark](../backend/app/models/benchmark.py) - Structure BDD
---
**Auteur:** Claude Code
**Version:** 1.0