7.3 KiB
Executable File
7.3 KiB
Executable File
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 :
which sysbench fio iperf3 dmidecode lscpu free jq lsblk
Installer les outils manquants (Debian/Ubuntu) :
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)
sysbench cpu --cpu-max-prime=10000 --threads=$(nproc) run
Mode normal (20000 primes)
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run
Récupérer uniquement les events/sec
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)
sysbench memory --memory-block-size=1M --memory-total-size=512M run
Mode normal (1G)
sysbench memory --memory-block-size=1M --memory-total-size=1G run
Récupérer le throughput
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
fio --name=seqread --ioengine=libaio --rw=read --bs=1M --size=1G --numjobs=1 --direct=1 --filename=/tmp/fio-test-file
Test écriture séquentielle
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)
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
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
rm -f /tmp/fio-test-file
4. Test Réseau avec iperf3
Sur le serveur (10.0.0.50) - Lancer le serveur iperf3
iperf3 -s
Sur le client - Test upload
iperf3 -c 10.0.0.50 -t 5
Sur le client - Test download
iperf3 -c 10.0.0.50 -t 5 -R
Récupérer les résultats en JSON
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
lscpu
Extraction des infos importantes :
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
free -m
Total RAM :
free -m | grep '^Mem:' | awk '{print $2}'
RAM détaillée avec dmidecode (nécessite sudo)
sudo dmidecode -t memory
Infos RAM structurées :
sudo dmidecode -t memory | grep -E 'Size|Type:|Speed:|Manufacturer'
GPU avec lspci
lspci | grep -i vga
lspci | grep -i 3d
GPU NVIDIA avec nvidia-smi (si carte NVIDIA)
nvidia-smi --query-gpu=gpu_name,memory.total --format=csv,noheader
Carte mère avec dmidecode
sudo dmidecode -t baseboard | grep -E 'Manufacturer|Product Name'
OS
cat /etc/os-release
uname -r # kernel version
uname -m # architecture
Disques
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
Avec détails :
lsblk -J # JSON format
Réseau
ip link show
Interfaces actives :
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 :
# 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 :
{
"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
nullou 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 :
- Adapter le parsing dans le script bench.sh
- S'assurer que les regex/awk extraient les bonnes valeurs
- Tester le JSON généré