# Plan: End-to-End Real World Benchmarks ## Objectif Scénarios réalistes de jeu pour valider performance globale. --- ## Benchmark M: Game Loop Simulation **Test**: Latence et throughput dans un scénario de jeu réaliste. **Setup**: - **100 modules** simulés: - 50 game logic: publish `player:*`, `game:*` - 30 AI: subscribe `ai:*`, `player:*` - 20 rendering: subscribe `render:*`, `player:*` - **1000 messages/sec** pendant 10 secondes - Topics variés: `player:123:position`, `ai:enemy:target`, `render:draw`, `physics:collision` **Mesures**: - Latence p50: X µs - Latence p95: Y µs - Latence p99: Z µs (attendu <1ms) - Throughput: W msg/s - CPU usage: U% **Succès**: - p99 < 1ms - Throughput stable à 1000 msg/s - CPU < 50% --- ## Benchmark N: Hot-Reload Under Load **Test**: Overhead du hot-reload pendant charge active. **Setup**: - Lancer benchmark M (game loop) - Après 5s, déclencher hot-reload d'un module - Mesurer pause time et impact sur latence **Mesures**: - Pause time: X ms (attendu <50ms) - Latence p99 pendant reload: Y µs - Overhead: (latence_reload - latence_normale) / latence_normale **Succès**: - Pause < 50ms - Overhead < 10% **Note**: Simuler hot-reload avec unload/reload d'un module --- ## Benchmark O: Memory Footprint **Test**: Consommation mémoire du TopicTree et buffers. **Setup**: - Créer 10000 topics uniques - Créer 1000 subscribers (patterns variés) - Mesurer memory usage avant/après **Mesures**: - Memory avant: X MB (baseline) - Memory après topics: Y MB - Memory après subscribers: Z MB - Memory/topic: (Y-X) / 10000 bytes - Memory/subscriber: (Z-Y) / 1000 bytes **Succès**: - Memory/topic < 1KB - Memory/subscriber < 5KB **Implémentation**: Lire `/proc/self/status` (VmRSS) ou utiliser `malloc_stats()` --- ## Implémentation **Fichier**: `benchmark_e2e.cpp` **Dépendances**: - `IntraIOManager` (src/) - `JsonDataNode` (src/) - Potentiellement `ModuleLoader` pour hot-reload simulation - Helpers: Timer, Stats, Reporter **Structure**: ```cpp class MockModule { // Simule un module (publisher ou subscriber) }; void benchmarkM_game_loop(); void benchmarkN_hotreload_under_load(); void benchmarkO_memory_footprint(); int main() { benchmarkM_game_loop(); benchmarkN_hotreload_under_load(); benchmarkO_memory_footprint(); } ``` **Complexité**: Plus élevée que les autres benchmarks (intégration multiple features) **Référence**: `tests/integration/test_13_cross_system.cpp` (IO + DataNode) --- ## Notes **Benchmark M**: - Utiliser threads pour simuler modules concurrents - Randomiser patterns pour réalisme - Mesurer latence = temps entre publish et receive **Benchmark N**: - Peut nécessiter hook dans ModuleLoader pour mesurer pause - Alternative: simuler avec mutex lock/unlock **Benchmark O**: - Memory measurement peut être OS-dépendant - Utiliser `#ifdef __linux__` pour `/proc`, alternative pour autres OS