9.5 KiB
Executable File
Améliorations du Script bench.sh
Date : 13 décembre 2025 Version script : 1.1.0 → 1.2.0
📋 Résumé
Ce document décrit les améliorations apportées au script de benchmark client scripts/bench.sh suite à l'analyse détaillée des données collectées.
🎯 Objectifs
Améliorer la collecte de données hardware selon les recommandations de l'[ANALYSE_DONNEES final.md](ANALYSE_DONNEES final.md) pour :
- Obtenir des informations plus détaillées sur le matériel
- Calculer des scores plus précis et représentatifs
- Collecter des métriques supplémentaires (températures, SMART health)
✨ Améliorations Implémentées
1. Support GPU NVIDIA (nvidia-smi)
Problème : Le script détectait les GPU via lspci mais n'obtenait pas la VRAM ni la version du driver pour les cartes NVIDIA.
Solution :
- Ajout de la détection automatique de
nvidia-smi - Collecte de la VRAM (en MB)
- Collecte de la version du driver NVIDIA
- Amélioration du nom du modèle GPU
Code ajouté :
if echo "$gpu_line" | grep -qi 'nvidia'; then
gpu_vendor="NVIDIA"
if command -v nvidia-smi &>/dev/null; then
nvidia_model=$(nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1)
nvidia_vram=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>/dev/null | head -1)
nvidia_driver=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader 2>/dev/null | head -1)
[[ -n "$nvidia_model" ]] && gpu_model="$nvidia_model"
[[ -n "$nvidia_vram" ]] && gpu_vram="$nvidia_vram"
[[ -n "$nvidia_driver" ]] && gpu_driver="$nvidia_driver"
fi
fi
Champs JSON ajoutés :
{
"gpu": {
"vendor": "NVIDIA",
"model": "GeForce RTX 3070",
"memory_dedicated_mb": 8192,
"driver_version": "525.105.17"
}
}
Bénéfices :
- ✅ VRAM précise pour les cartes NVIDIA
- ✅ Version du driver (utile pour debug)
- ✅ Nom exact du modèle GPU
2. Amélioration du Parsing des Caches CPU
Problème : Le cache L1 total n'était pas calculé correctement (seul L1d était pris en compte, pas L1i).
Solution :
- Ajout de la collecte séparée de L1d (cache de données) et L1i (cache d'instructions)
- Calcul du cache L1 total = L1d + L1i
Code ajouté :
# L1 cache = L1d + L1i
local cache_l1d cache_l1i
cache_l1d=$(lscpu | awk -F: '/L1d cache/ {gsub(/[^0-9]/,"",$2); print $2}')
cache_l1i=$(lscpu | awk -F: '/L1i cache/ {gsub(/[^0-9]/,"",$2); print $2}')
cache_l1_kb=$((${cache_l1d:-0} + ${cache_l1i:-0}))
Exemple :
- Avant : L1 = 128 KB (seulement L1d)
- Après : L1 = 256 KB (L1d 128 KB + L1i 128 KB)
Bénéfices :
- ✅ Valeur correcte du cache L1 total
- ✅ Meilleure comparaison entre CPUs
3. Collecte des Températures et Santé SMART des Disques
Problème : Les informations SMART (température, health status) n'étaient pas collectées.
Solution :
- Ajout de la collecte de la température via
smartctl -A - Ajout du statut SMART health via
smartctl -H - Affichage de la température dans les logs
Code ajouté :
# Essayer de récupérer la température et le statut SMART
local smart_all
smart_all=$(sudo smartctl -A "/dev/$d" 2>/dev/null || true)
# Température (diverses variantes selon le type de disque)
temperature=$(echo "$smart_all" | awk '/Temperature_Celsius|Airflow_Temperature_Cel|Current Drive Temperature/ {print $10}' | head -1)
[[ -z "$temperature" ]] && temperature="null"
# Statut SMART health
local health
health=$(sudo smartctl -H "/dev/$d" 2>/dev/null | awk '/SMART overall-health|SMART Health Status/ {print $NF}' | head -1)
[[ -n "$health" ]] && smart_health="$health" || smart_health="null"
Champs JSON ajoutés :
{
"storage": [
{
"device": "sda",
"model": "KINGSTON SA400S37480G",
"size_gb": "480",
"type": "ssd",
"interface": "sata",
"serial": "50026B77833E25E3",
"temperature_c": 35,
"smart_health": "PASSED"
}
]
}
Affichage amélioré :
✓ Disque: /dev/sda - KINGSTON SA400S37480G (447.1G, ssd, 35°C)
Bénéfices :
- ✅ Surveillance de la température des disques
- ✅ Détection précoce des problèmes (SMART health)
- ✅ Meilleure visibilité sur l'état du stockage
4. Correction des Pondérations du Score Global
Problème : Les pondérations du score global ne correspondaient pas aux recommandations de l'analyse.
Pondérations précédentes :
- CPU : 40%
- RAM : 30%
- Disque : 30%
- Réseau : non pris en compte
- GPU : non pris en compte
Pondérations corrigées (selon analyse) :
- CPU : 30%
- RAM : 20%
- Disque : 25%
- Réseau : 15% ✨ nouveau
- GPU : 10% ✨ nouveau
Code modifié :
# Score global selon pondérations recommandées :
# CPU 30%, RAM 20%, Disque 25%, Réseau 15%, GPU 10%
local scores="" total_weight=0
if [[ "$cpu_bench" != "null" ]]; then
cs=$(echo "$cpu_bench" | jq '.score // 0')
scores="$scores + $cs * 0.30"
total_weight=$(safe_bc "$total_weight + 0.30")
fi
if [[ "$mem_bench" != "null" ]]; then
ms=$(echo "$mem_bench" | jq '.score // 0')
scores="$scores + $ms * 0.20"
total_weight=$(safe_bc "$total_weight + 0.20")
fi
if [[ "$disk_bench" != "null" ]]; then
ds=$(echo "$disk_bench" | jq '.score // 0')
scores="$scores + $ds * 0.25"
total_weight=$(safe_bc "$total_weight + 0.25")
fi
if [[ "$net_bench" != "null" ]]; then
ns=$(echo "$net_bench" | jq '.score // 0')
scores="$scores + $ns * 0.15"
total_weight=$(safe_bc "$total_weight + 0.15")
fi
if [[ "$gpu_bench" != "null" ]]; then
gs=$(echo "$gpu_bench" | jq '.score // 0')
scores="$scores + $gs * 0.10"
total_weight=$(safe_bc "$total_weight + 0.10")
fi
Bénéfices :
- ✅ Score global plus équilibré
- ✅ Prise en compte du réseau (important pour serveurs)
- ✅ Support futur du benchmark GPU
- ✅ Calcul normalisé même si certains benchmarks échouent
📊 Impact sur les Données Collectées
Avant les améliorations
{
"cpu": {
"cache_l1_kb": 128
},
"gpu": {
"vendor": "NVIDIA",
"model": "NVIDIA Corporation GP104 [GeForce GTX 1070]",
"memory_dedicated_mb": null,
"driver_version": null
},
"storage": [
{
"device": "sda",
"temperature_c": null,
"smart_health": null
}
],
"results": {
"global_score": 45.2 // CPU 40% + RAM 30% + Disk 30%
}
}
Après les améliorations
{
"cpu": {
"cache_l1_kb": 256 // ✨ L1d + L1i
},
"gpu": {
"vendor": "NVIDIA",
"model": "GeForce GTX 1070", // ✨ Nom exact
"memory_dedicated_mb": 8192, // ✨ VRAM
"driver_version": "525.105.17" // ✨ Driver
},
"storage": [
{
"device": "sda",
"temperature_c": 35, // ✨ Température
"smart_health": "PASSED" // ✨ Santé
}
],
"results": {
"global_score": 42.8 // ✨ CPU 30% + RAM 20% + Disk 25% + Net 15% + GPU 10%
}
}
🧪 Tests Recommandés
Test 1 : Machine avec GPU NVIDIA
# Vérifier que nvidia-smi est bien détecté
sudo bash scripts/bench.sh
# → Devrait afficher : GPU: GeForce RTX 3070 (8192MB VRAM)
Test 2 : Températures des disques
# Vérifier que smartctl retourne bien les températures
sudo smartctl -A /dev/sda | grep Temperature
# → Si température présente, elle devrait apparaître dans le log bench.sh
Test 3 : Score global avec réseau
# S'assurer qu'un serveur iperf3 est accessible
iperf3 -c 10.0.0.50 -t 5
# → Le score global doit inclure le score réseau (15%)
Test 4 : Cache L1 CPU
# Vérifier que L1d + L1i sont bien additionnés
lscpu | grep 'L1'
# L1d cache: 128 KiB
# L1i cache: 128 KiB
# → bench.sh doit afficher cache_l1_kb: 256
📝 Compatibilité
Systèmes supportés
- ✅ Debian/Ubuntu (testé)
- ✅ Systèmes avec
lscpu,smartctl,lspci - ✅ Machines avec ou sans GPU NVIDIA
- ✅ Machines avec ou sans
nvidia-smi
Dégradation gracieuse
- Si
nvidia-smiabsent → Utiliselspciuniquement - Si
smartctlabsent → Pas de température/health - Si iperf3 échoue → Score global calculé sans réseau
- Si dmidecode manquant → Infos basiques uniquement
🔄 Prochaines Étapes
Améliorations futures possibles (Phase 2)
- Benchmark GPU : Implémenter
glmark2pour GPU score - Température CPU : Ajouter
sensorspour température processeur - Support AMD GPU : Ajouter support
rocm-smipour cartes AMD - BIOS/UEFI version : Améliorer collecte via
dmidecode -t 0 - PCIe gen : Détecter version PCIe (2.0, 3.0, 4.0, 5.0)
📚 Références
- [ANALYSE_DONNEES final.md](ANALYSE_DONNEES final.md) : Analyse détaillée des données
- scripts/bench.sh : Script client amélioré
- backend/app/schemas/hardware.py : Schémas Pydantic backend
- backend/app/models/hardware_snapshot.py : Modèle SQLAlchemy
✅ Checklist de Validation
- Support nvidia-smi pour GPU NVIDIA
- Parsing correct des caches CPU (L1 = L1d + L1i)
- Collecte températures disques via smartctl
- Collecte SMART health status
- Correction pondérations score global (30/20/25/15/10)
- Prise en compte du score réseau dans global_score
- Tests sur machine réelle avec GPU NVIDIA
- Tests sur machine avec plusieurs disques
- Validation des scores calculés
Version du script : 1.2.0 Auteur : Gilles @ maison43 Date : 13 décembre 2025