Files
serv_benchmark/docs/simple_bench.md
Gilles Soulier c67befc549 addon
2026-01-05 16:08:01 +01:00

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 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é