# Hotfix - Améliorations Benchmarks Mémoire et Réseau Date : 13 décembre 2025 Version : 1.2.3 (script fix) ## 🐛 Problèmes Identifiés ### Problème #1 : Erreur jq dans Benchmark Réseau **Symptômes** : ``` ✓ Benchmark Réseau en cours (vers 10.0.0.50)... jq: invalid JSON text passed to --argjson Use jq --help for help with command-line options, or see the jq manpage, or online docs at https://jqlang.github.io/jq ``` **Cause Root** : `scripts/bench.sh:804` Le script passait une valeur invalide à `--argjson ping` quand `ping_ms` était vide ou contenait une chaîne non numérique. ```bash # ❌ Code buggé ping_ms=$(echo "$ping_output" | awk -F'/' '{print $5}') # Si ping_output est vide, ping_ms est vide "" # Puis on passe à jq : --argjson ping "${ping_ms:-null}" # Mais si ping_ms="", alors on passe --argjson ping "" ce qui est invalide ``` **Impact** : Erreur jq qui empêche la construction du JSON réseau --- ### Problème #2 : Benchmark Mémoire Retourne 0 MiB/s **Symptômes** : ``` ✓ Benchmark Mémoire en cours... ✓ Mémoire: 0 MiB/s (score: 0) ``` **Cause Root** : `scripts/bench.sh:693` Le pattern `awk` utilisé pour extraire le throughput ne correspondait pas au format de sortie de `sysbench memory`. ```bash # ❌ Code buggé thr=$(echo "$mem_res" | awk '/transferred/ {print $6}' | head -1) ``` Le problème : - Le format de sortie de `sysbench memory` a changé entre versions - Le champ 6 ne contient pas toujours le throughput - Le pattern `/transferred/` ne matche pas toujours la bonne ligne **Impact** : Score mémoire toujours à 0, faussant le score global --- ## ✅ Corrections Appliquées ### Fix #1 : Validation de ping_ms pour jq **Fichier** : `scripts/bench.sh:803-804` Ajout d'une validation avant de passer `ping_ms` à jq : ```bash # ✅ Code corrigé # S'assurer que ping_ms est une valeur valide pour jq [[ -z "$ping_ms" || "$ping_ms" == "null" ]] && ping_ms="0" net_bench=$(jq -n \ --argjson upload "$upload_mbps" \ --argjson download "$download_mbps" \ --argjson ping "$ping_ms" \ --argjson score "$net_score" \ '{upload_mbps: $upload, download_mbps: $download, ping_ms: $ping, score: $score}') ``` **Bénéfices** : - ✅ Plus d'erreur jq même si le ping échoue - ✅ Valeur par défaut de 0 au lieu de null - ✅ JSON toujours valide --- ### Fix #2 : Extraction Robuste du Throughput Mémoire **Fichier** : `scripts/bench.sh:693-696` Utilisation de plusieurs méthodes d'extraction (fallback) : ```bash # ✅ Code corrigé # Extraire le throughput - essayer plusieurs patterns thr=$(echo "$mem_res" | grep -oP '\d+\.\d+(?= MiB/sec)' | head -1) [[ -z "$thr" ]] && thr=$(echo "$mem_res" | awk '/transferred/ {print $(NF-1)}' | head -1) [[ -z "$thr" ]] && thr=0 ``` **Explication** : 1. **Première tentative** : `grep -oP '\d+\.\d+(?= MiB/sec)'` - Recherche un nombre décimal suivi de " MiB/sec" - Fonctionne avec le format moderne de sysbench 2. **Deuxième tentative** : `awk '/transferred/ {print $(NF-1)}'` - Prend l'avant-dernier champ de la ligne contenant "transferred" - Fonctionne avec les anciennes versions de sysbench 3. **Fallback** : `thr=0` - Si rien ne fonctionne, utilise 0 au lieu de planter **Bénéfices** : - ✅ Compatible avec plusieurs versions de sysbench - ✅ Extrait correctement le throughput - ✅ Graceful degradation si extraction échoue --- ## 🧪 Tests ### Test 1 : Benchmark Réseau avec Ping Échoué ```bash # Simuler un ping qui échoue sudo bash scripts/bench.sh # Attendu: # ✓ Réseau: ↑945.23Mbps ↓943.12Mbps (ping: 0ms, score: 94.41) # Pas d'erreur jq ``` ### Test 2 : Benchmark Mémoire ```bash # Exécuter le benchmark sudo bash scripts/bench.sh # Attendu: # ✓ Mémoire: 10845.23 MiB/s (score: 108.45) # Au lieu de: # ✓ Mémoire: 0 MiB/s (score: 0) ``` ### Test 3 : Benchmark Complet ```bash sudo bash scripts/bench.sh # Vérifier que toutes les valeurs sont correctes: # ✓ CPU: > 0 # ✓ Mémoire: > 0 (nouveau!) # ✓ Disque: > 0 # ✓ Réseau: > 0 (sans erreur jq!) # ✓ Score global: cohérent ``` --- ## 📊 Format de Sortie Sysbench Memory Pour référence, voici les formats possibles de sortie de `sysbench memory` : ### Format moderne (sysbench 1.0+) ``` Total operations: 104857600 (10485745.23 per second) 102400.00 MiB transferred (10239.99 MiB/sec) ``` Notre pattern `grep -oP '\d+\.\d+(?= MiB/sec)'` extrait : `10239.99` ### Format ancien (sysbench 0.5) ``` 102400.00 MiB transferred (10239.99 MiB/sec total) Operations performed: 104857600 (10485745.23 ops/sec) ``` Notre fallback `awk '/transferred/ {print $(NF-1)}'` extrait l'avant-dernier champ. --- ## 🔧 Fichiers Modifiés | Fichier | Lignes | Type | Description | |---------|--------|------|-------------| | `scripts/bench.sh` | 693-696 | Fix | Extraction robuste throughput mémoire | | `scripts/bench.sh` | 803-804 | Fix | Validation ping_ms pour jq | --- ## 📝 Notes de Version **Version** : Script 1.2.3 **Date** : 13 décembre 2025 **Type** : Hotfix **Impact** : Benchmark mémoire et réseau ### Changements - Fix : Extraction du throughput mémoire avec fallback multi-pattern - Fix : Validation de ping_ms avant passage à jq - Robustesse : Compatible avec plusieurs versions de sysbench - Graceful degradation : Valeurs par défaut au lieu d'erreurs --- ## ✅ Checklist de Validation - [x] Fix extraction throughput mémoire - [x] Fix validation ping_ms - [x] Documenter les corrections - [ ] Tester benchmark complet - [ ] Vérifier que mémoire > 0 - [ ] Vérifier que réseau sans erreur jq - [ ] Vérifier score global cohérent --- ## 🚀 Déploiement Le script `bench.sh` a été modifié localement. Pour l'appliquer : ```bash cd /home/gilles/Documents/vscode/serv_benchmark # Tester le script modifié sudo bash scripts/bench.sh # Si OK, commit git add scripts/bench.sh git commit -m "fix(bench): Improve memory throughput extraction and network ping validation - Add multi-pattern fallback for sysbench memory output parsing - Validate ping_ms value before passing to jq --argjson - Compatible with multiple sysbench versions - Prevents jq errors in network benchmark " ``` --- **Status** : ✅ Fix appliqué et prêt à tester **Prochaine action** : Exécuter `sudo bash scripts/bench.sh` et vérifier les résultats --- ## 🔗 Fichiers Liés - [HOTFIX_NETWORK_BENCH.md](HOTFIX_NETWORK_BENCH.md) - Fix safe_bc pour réseau - [HOTFIX_SCORE_VALIDATION.md](HOTFIX_SCORE_VALIDATION.md) - Augmentation limite scores à 10000 - [bench.sh](scripts/bench.sh) - Script de benchmark client