addon
This commit is contained in:
332
docs/simple_bench.md
Executable file
332
docs/simple_bench.md
Executable file
@@ -0,0 +1,332 @@
|
||||
# Tests de Benchmarks Individuels
|
||||
|
||||
Ce fichier contient les commandes pour tester chaque benchmark individuellement et voir exactement ce qu'ils retournent.
|
||||
|
||||
## Prérequis
|
||||
|
||||
Vérifier les outils installés :
|
||||
```bash
|
||||
which sysbench fio iperf3 dmidecode lscpu free jq lsblk
|
||||
```
|
||||
|
||||
Installer les outils manquants (Debian/Ubuntu) :
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install sysbench fio iperf3 dmidecode lshw util-linux coreutils jq
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1. Test CPU avec sysbench
|
||||
|
||||
### Mode court (10000 primes)
|
||||
```bash
|
||||
sysbench cpu --cpu-max-prime=10000 --threads=$(nproc) run
|
||||
```
|
||||
|
||||
### Mode normal (20000 primes)
|
||||
```bash
|
||||
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run
|
||||
```
|
||||
|
||||
### Récupérer uniquement les events/sec
|
||||
```bash
|
||||
sysbench cpu --cpu-max-prime=10000 --threads=$(nproc) run 2>&1 | grep 'events per second'
|
||||
```
|
||||
|
||||
**Ce qu'on cherche** : La ligne `events per second: XXXX.XX`
|
||||
|
||||
---
|
||||
|
||||
## 2. Test Mémoire avec sysbench
|
||||
|
||||
### Mode court (512M)
|
||||
```bash
|
||||
sysbench memory --memory-block-size=1M --memory-total-size=512M run
|
||||
```
|
||||
|
||||
### Mode normal (1G)
|
||||
```bash
|
||||
sysbench memory --memory-block-size=1M --memory-total-size=1G run
|
||||
```
|
||||
|
||||
### Récupérer le throughput
|
||||
```bash
|
||||
sysbench memory --memory-block-size=1M --memory-total-size=512M run 2>&1 | grep 'MiB/sec'
|
||||
```
|
||||
|
||||
**Ce qu'on cherche** : Le throughput en MiB/sec
|
||||
|
||||
---
|
||||
|
||||
## 3. Test Disque avec fio
|
||||
|
||||
### Test lecture séquentielle
|
||||
```bash
|
||||
fio --name=seqread --ioengine=libaio --rw=read --bs=1M --size=1G --numjobs=1 --direct=1 --filename=/tmp/fio-test-file
|
||||
```
|
||||
|
||||
### Test écriture séquentielle
|
||||
```bash
|
||||
fio --name=seqwrite --ioengine=libaio --rw=write --bs=1M --size=1G --numjobs=1 --direct=1 --filename=/tmp/fio-test-file
|
||||
```
|
||||
|
||||
### Test lecture/écriture aléatoire (IOPS)
|
||||
```bash
|
||||
fio --name=randrw --ioengine=libaio --rw=randrw --bs=4k --size=100M --numjobs=1 --direct=1 --filename=/tmp/fio-test-file
|
||||
```
|
||||
|
||||
### Récupérer les résultats en JSON
|
||||
```bash
|
||||
fio --name=test --ioengine=libaio --rw=randrw --bs=4k --size=100M --numjobs=1 --direct=1 --filename=/tmp/fio-test-file --output-format=json
|
||||
```
|
||||
|
||||
**Ce qu'on cherche** :
|
||||
- `READ: bw=XXXMiB/s` (throughput lecture)
|
||||
- `WRITE: bw=XXXMiB/s` (throughput écriture)
|
||||
- `IOPS=XXXX` (operations/sec)
|
||||
|
||||
### Nettoyage
|
||||
```bash
|
||||
rm -f /tmp/fio-test-file
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Test Réseau avec iperf3
|
||||
|
||||
### Sur le serveur (10.0.0.50) - Lancer le serveur iperf3
|
||||
```bash
|
||||
iperf3 -s
|
||||
```
|
||||
|
||||
### Sur le client - Test upload
|
||||
```bash
|
||||
iperf3 -c 10.0.0.50 -t 5
|
||||
```
|
||||
|
||||
### Sur le client - Test download
|
||||
```bash
|
||||
iperf3 -c 10.0.0.50 -t 5 -R
|
||||
```
|
||||
|
||||
### Récupérer les résultats en JSON
|
||||
```bash
|
||||
iperf3 -c 10.0.0.50 -t 5 -J
|
||||
```
|
||||
|
||||
**Ce qu'on cherche** :
|
||||
- `bits_per_second` (vitesse en bits/sec)
|
||||
- Convertir en Mbps : `bits_per_second / 1000000`
|
||||
|
||||
---
|
||||
|
||||
## 5. Collecte d'infos Hardware
|
||||
|
||||
### CPU avec lscpu
|
||||
```bash
|
||||
lscpu
|
||||
```
|
||||
|
||||
Extraction des infos importantes :
|
||||
```bash
|
||||
echo "Vendor: $(lscpu | grep 'Vendor ID' | awk '{print $3}')"
|
||||
echo "Model: $(lscpu | grep 'Model name' | sed 's/Model name: *//')"
|
||||
echo "Cores: $(lscpu | grep '^CPU(s):' | awk '{print $2}')"
|
||||
echo "Threads: $(nproc)"
|
||||
echo "Base Freq: $(lscpu | grep 'CPU MHz' | awk '{print $3}')"
|
||||
echo "Max Freq: $(lscpu | grep 'CPU max MHz' | awk '{print $4}')"
|
||||
```
|
||||
|
||||
### RAM avec free
|
||||
```bash
|
||||
free -m
|
||||
```
|
||||
|
||||
Total RAM :
|
||||
```bash
|
||||
free -m | grep '^Mem:' | awk '{print $2}'
|
||||
```
|
||||
|
||||
### RAM détaillée avec dmidecode (nécessite sudo)
|
||||
```bash
|
||||
sudo dmidecode -t memory
|
||||
```
|
||||
|
||||
Infos RAM structurées :
|
||||
```bash
|
||||
sudo dmidecode -t memory | grep -E 'Size|Type:|Speed:|Manufacturer'
|
||||
```
|
||||
|
||||
### GPU avec lspci
|
||||
```bash
|
||||
lspci | grep -i vga
|
||||
lspci | grep -i 3d
|
||||
```
|
||||
|
||||
### GPU NVIDIA avec nvidia-smi (si carte NVIDIA)
|
||||
```bash
|
||||
nvidia-smi --query-gpu=gpu_name,memory.total --format=csv,noheader
|
||||
```
|
||||
|
||||
### Carte mère avec dmidecode
|
||||
```bash
|
||||
sudo dmidecode -t baseboard | grep -E 'Manufacturer|Product Name'
|
||||
```
|
||||
|
||||
### OS
|
||||
```bash
|
||||
cat /etc/os-release
|
||||
uname -r # kernel version
|
||||
uname -m # architecture
|
||||
```
|
||||
|
||||
### Disques
|
||||
```bash
|
||||
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
|
||||
```
|
||||
|
||||
Avec détails :
|
||||
```bash
|
||||
lsblk -J # JSON format
|
||||
```
|
||||
|
||||
### Réseau
|
||||
```bash
|
||||
ip link show
|
||||
```
|
||||
|
||||
Interfaces actives :
|
||||
```bash
|
||||
ip -br link show | grep UP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Test du Script bench.sh (si tu veux)
|
||||
|
||||
### Dry-run (voir ce qui serait collecté sans envoyer)
|
||||
Tu peux commenter la ligne de curl dans le script et juste faire un `echo "$payload"` pour voir le JSON généré.
|
||||
|
||||
Ou créer un script de test :
|
||||
```bash
|
||||
# Dans le script bench.sh, remplacer la ligne 455-459 par :
|
||||
echo "=== PAYLOAD JSON ==="
|
||||
echo "$payload" | jq .
|
||||
echo "=== END PAYLOAD ==="
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Format JSON attendu par le backend
|
||||
|
||||
Le backend attend un JSON comme ceci :
|
||||
|
||||
```json
|
||||
{
|
||||
"device_identifier": "hostname",
|
||||
"bench_script_version": "1.0.0",
|
||||
"hardware": {
|
||||
"cpu": {
|
||||
"vendor": "GenuineIntel",
|
||||
"model": "Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz",
|
||||
"microarchitecture": "Coffee Lake",
|
||||
"cores": 8,
|
||||
"threads": 8,
|
||||
"base_freq_ghz": 3.6,
|
||||
"max_freq_ghz": 4.9,
|
||||
"cache_l1_kb": 512,
|
||||
"cache_l2_kb": 2048,
|
||||
"cache_l3_kb": 12288,
|
||||
"flags": ["avx", "avx2", "sse4_1", "sse4_2"],
|
||||
"tdp_w": 95
|
||||
},
|
||||
"ram": {
|
||||
"total_mb": 16384,
|
||||
"slots_total": 4,
|
||||
"slots_used": 2,
|
||||
"ecc": false,
|
||||
"layout": [
|
||||
{"slot": "DIMM1", "size_mb": 8192, "type": "DDR4", "speed_mhz": 3200, "manufacturer": "Corsair"},
|
||||
{"slot": "DIMM2", "size_mb": 8192, "type": "DDR4", "speed_mhz": 3200, "manufacturer": "Corsair"}
|
||||
]
|
||||
},
|
||||
"gpu": {
|
||||
"vendor": "NVIDIA",
|
||||
"model": "GeForce RTX 3070",
|
||||
"vram_mb": 8192,
|
||||
"driver_version": "525.105.17",
|
||||
"cuda_version": "12.0"
|
||||
},
|
||||
"motherboard": {
|
||||
"manufacturer": "ASUS",
|
||||
"model": "ROG STRIX Z390-E GAMING",
|
||||
"bios_version": "2417",
|
||||
"bios_date": "08/14/2020"
|
||||
},
|
||||
"storage": [
|
||||
{"device": "nvme0n1", "model": "Samsung SSD 970 EVO Plus", "size_gb": 500, "type": "nvme"},
|
||||
{"device": "sda", "model": "WD Blue 1TB", "size_gb": 1000, "type": "sata"}
|
||||
],
|
||||
"network": [
|
||||
{"name": "eth0", "speed_mbps": 1000, "type": "ethernet"},
|
||||
{"name": "wlan0", "speed_mbps": 866, "type": "wifi"}
|
||||
],
|
||||
"os": {
|
||||
"name": "ubuntu",
|
||||
"version": "22.04",
|
||||
"kernel_version": "5.15.0-91-generic",
|
||||
"architecture": "x86_64"
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"cpu": {
|
||||
"events_per_sec": 5234.89,
|
||||
"duration_s": 10.0,
|
||||
"score": 52.35
|
||||
},
|
||||
"memory": {
|
||||
"throughput_mib_s": 15234.5,
|
||||
"score": 76.17
|
||||
},
|
||||
"disk": {
|
||||
"read_mb_s": 3500.0,
|
||||
"write_mb_s": 3000.0,
|
||||
"iops_read": 450000,
|
||||
"iops_write": 400000,
|
||||
"latency_ms": 0.05,
|
||||
"score": 85.0
|
||||
},
|
||||
"network": {
|
||||
"upload_mbps": 940.5,
|
||||
"download_mbps": 950.2,
|
||||
"ping_ms": 0.5,
|
||||
"jitter_ms": 0.1,
|
||||
"packet_loss_percent": 0.0,
|
||||
"score": 95.0
|
||||
},
|
||||
"gpu": null,
|
||||
"global_score": 77.13
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Tous les champs optionnels peuvent être `null` ou omis
|
||||
- Le backend acceptera un JSON partiel tant que les champs obligatoires sont présents :
|
||||
- `device_identifier` (string)
|
||||
- `bench_script_version` (string)
|
||||
- `hardware` (objet, peut être minimaliste)
|
||||
- `results.global_score` (float 0-100)
|
||||
|
||||
---
|
||||
|
||||
## Prochaine étape
|
||||
|
||||
Une fois que tu auras testé les benchmarks individuellement, copie-colle les résultats ici et on pourra :
|
||||
1. Adapter le parsing dans le script bench.sh
|
||||
2. S'assurer que les regex/awk extraient les bonnes valeurs
|
||||
3. Tester le JSON généré
|
||||
Reference in New Issue
Block a user