# Plan: IntraIO Batching Benchmarks

## Objectif
Mesurer les gains de performance du batching et son overhead.

---

## Benchmark E: Baseline sans batching

**Test**: Mesurer performance sans batching (high-freq subscriber).

**Setup**:
- 1 subscriber high-freq sur pattern `"test:*"`
- Publier 10000 messages rapidement
- Mesurer temps total, latence moyenne, throughput

**Mesures**:
- Temps total: X ms
- Messages/sec: Y msg/s
- Latence moyenne: Z µs
- Allocations mémoire

**Rôle**: Baseline pour comparer avec batching

---

## Benchmark F: Avec batching

**Test**: Réduction du nombre de messages grâce au batching.

**Setup**:
- 1 subscriber low-freq (`batchInterval=100ms`) sur `"test:*"`
- Publier 10000 messages sur 5 secondes (2000 msg/s)
- Mesurer nombre de batches reçus

**Mesures**:
- Nombre de batches: ~50 (attendu pour 5s @ 100ms interval)
- Réduction: 10000 messages → 50 batches (200x)
- Overhead batching: (temps F - temps E) / temps E
- Latence additionnelle: avg delay avant flush

**Succès**: Réduction > 100x, overhead < 5%

---

## Benchmark G: Overhead du thread de flush

**Test**: CPU usage du `batchFlushLoop`.

**Setup**:
- Créer 0, 10, 100 buffers low-freq actifs
- Mesurer CPU usage du thread (via `/proc/stat` ou `getrusage`)
- Interval: 100ms, durée: 10s

**Mesures**:
| Buffers actifs | CPU usage (%) |
|----------------|---------------|
| 0              | ?             |
| 10             | ?             |
| 100            | ?             |

**Succès**: CPU usage < 5% même avec 100 buffers

---

## Benchmark H: Scalabilité subscribers low-freq

**Test**: Temps de flush global croît linéairement avec nb subs.

**Setup**:
- Créer N subscribers low-freq (100ms interval)
- Tous sur patterns différents
- Publier 1000 messages matchant tous
- Mesurer temps du flush périodique

**Mesures**:
| Subscribers | Temps flush (ms) | Croissance |
|-------------|------------------|------------|
| 1           | ?                | baseline   |
| 10          | ?                | ~10x       |
| 100         | ?                | ~100x      |

**Graphe**: Temps flush = f(N subs) → linéaire

**Succès**: Croissance linéaire (pas quadratique)

---

## Implémentation

**Fichier**: `benchmark_batching.cpp`

**Dépendances**:
- `IntraIOManager` (src/)
- Helpers: Timer, Stats, Reporter

**Structure**:
```cpp
void benchmarkE_baseline();
void benchmarkF_batching();
void benchmarkG_thread_overhead();
void benchmarkH_scalability();

int main() {
    benchmarkE_baseline();
    benchmarkF_batching();
    benchmarkG_thread_overhead();
    benchmarkH_scalability();
}
```

**Référence**: `tests/integration/test_11_io_system.cpp` (scenario 6: batching)

**Note**: Utiliser `std::this_thread::sleep_for()` pour contrôler timing des messages
