182 lines
5.8 KiB
Markdown
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
|