04 · Concurrence / performance

High-Performance Binary Log Recorder

Une boîte noire logicielle : plusieurs producteurs publient des événements vers une queue bornée, un writer de fond les sérialise avec contrôle d’intégrité, puis des outils relisent, filtrent et exportent le fichier.

C++20Producer/consumerstd::jthreadBinary I/OCRC-32Benchmark
HPBLR / BENCHMARK
$ hpblr_bench --events 50000

events                 50000
duration               0.198 s
events_per_second      252293
file_size              8.39 MiB
throughput             42.35 MiB/s
rejected               0

integrity: header + record + payload CRC

Le problème

Enregistrer vite sans bloquer les producteurs

Dans un système chargé, écrire chaque événement directement sur disque rend le temps de traitement dépendant de l’I/O. Le recorder déplace ce coût vers un thread dédié tout en imposant une capacité maximale : le comportement sous pression est explicite au lieu de consommer une mémoire non bornée.

La performance n’a de valeur que si les fichiers restent exploitables après écriture. Le format contient les tailles et CRC nécessaires pour détecter corruption et troncature lors du replay.

Architecture

Multi-producteurs, une politique d’écriture

N producteurs
d’événements
Queue bornée
thread-safe
Writer
asynchrone
Fichier .hpblr
+ replay tools

Les événements sont move-aware afin de limiter les copies de payload. Le writer regroupe les écritures et flush selon une politique configurable. Le lecteur valide le header et chaque enregistrement avant de l’exposer aux filtres.

Décisions d’ingénierie

Performance mesurée, intégrité conservée

01 / BACKPRESSURE

Queue bornée

La capacité est configurable et empêche une croissance mémoire silencieuse quand le disque devient plus lent.

02 / FORMAT

Little-endian explicite

Chaque champ est sérialisé sans écrire directement la représentation mémoire d’une structure C++.

03 / INTEGRITY

CRC à trois niveaux

Le header de fichier, le header d’événement et son payload sont contrôlés séparément.

04 / MEASUREMENT

Benchmark end-to-end

Le rapport mesure génération, queue et écriture et conserve événements/s, octets et MiB/s.

Démonstration réelle

12 000 événements enregistrés, inspectés puis benchmarkés

La capture provient des trois exécutables du dépôt. Quatre producteurs écrivent le fichier, l’outil vérifie et agrège les niveaux de sévérité, puis le benchmark mesure 50 000 événements avec payload de 128 octets.

Record → inspect → benchmarkExécution réelle : 252 293 événements/s sur la machine de test
./hpblr_record --output sample.hpblr --producers 4 --events 12000 --payload-size 64
./hpblr_tool inspect --input sample.hpblr
./hpblr_bench --producers 4 --events 50000 --payload-size 128

Preuves techniques

Ce que le dépôt permet de vérifier

  • Round-trip binaire et lecture des événements dans l’ordre attendu.
  • Détection de payload corrompu et de fichier tronqué.
  • Test de plusieurs producteurs écrivant via l’enregistreur asynchrone.
  • Outils CLI d’inspection, dump filtré et export CSV/JSON.
Projet suivantEmbedded Device Driver Simulator