Files
Mapo-IOB-WIN/wip.md
T

1.6 KiB

WIP - Refactor Simulatore

Analisi Ereditarietà

  • Simula.cs -> Generic (Generic.Protected.cs / Generic.Public.cs)
  • Classe simPar: Gestisce durata e attesa eventi simulati

Criticità Riscontrate (CPU & Context Switch)

  1. Sync-over-Async: Uso massiccio di Task.Run(...).GetAwaiter().GetResult() in Simula_Load e ProcessDataSync. Questo blocca i thread e aumenta il context switching.
  2. Polling Frequente:
    • processVHF(): Gestisce i decrementi dei timer basandosi su periodoMSec.
    • getDynData(): Genera dati random walk/level basandosi su waitSimPar.
  3. Operazioni I/O Sincrone: Uso di HttpService.CallUrl all'interno di cicli di simulazione/polling.

Strategie di Intervento Applicate

1. Jittering (Disallineamento) [DONE]

  • Aumentato jitter di avvio fino a 10s nel costruttore.
  • Applicato rumore statistico (±15% + jitter extra) al periodoMSec per evitare la sincronizzazione delle VM.

2. Throttling e Dirty Check [DONE]

  • Contapezzi: Implementato lastSentPzCount per inviare dati solo se il valore è effettivamente cambiato.
  • Bitmap: Implementato throttling su decodeToBaseBitmap (limite 500ms) per ridurre chiamate HTTP sincrone e calcoli pesanti.

3. Refactor Async/Sync [DONE]

  • Eliminato l'uso di .GetAwaiter().GetResult() in Simula_Load e ProcessDataSync.
  • Convertito il caricamento e la sincronizzazione in task "fire-and-forget" controllati (_ = Task.Run(...)), liberando immediatamente i thread di polling/sistema.

Stato Finale

  • Implementazione completa delle fasi di refactor su Simula.cs.
  • Fase di test in ambiente di staging/produzione per monitoraggio CPU Proxmox.