Refactoring data_server

Ciao Pietro, ho risistemato un po' il data server nel tentativo di semplificarlo e renderlo più comprensibile e debuggabile.

In particolare:

  • ho sistemato i problemi di perdita di allineamento che si manifestavano interrompendo e riavviando il server, che nella precedente versione erano risolti riavviando il server;
  • ho introdotto un buffer circolare tra DMA e TCP in modo da avere il controllo in caso di overflow, per ora ho impostato il buffer su 2 GB;
  • ho tolto tutti in mutex e i lock, semplificando la logica multithreading: un thread legge da DMA e scrive sul buffer, l'altro legge solo dal buffer e manda via TCP/IP;
  • ho spostato la parte di interpretazione dei comandi nello stesso thread TCP/IP impostando una verifica periodica della presenza di nuovi comandi da gestire in attesa ogni 100 ms;
  • ho creato due test (dma_test e tcp_test) che girano ciascuno dei due thread singolarmente, simulando (in modo minimo e miserabile) gli effetti dell'altro, come far partire l'acquisizione;
  • ho scritto due righe di documentazione nel README.md

Ho testato il nuovo setup con il client innesco e ho verificato che l'allineamento delle parole viene mantenuto e che gli header sono quelli attesi. Ho anche verificato il comportamento del buffer in caso di overflow, come riportato nella figura sotto. La scrittura in DMA è un po' più veloce del trasferimento via TCP, dopo aver generato e trasferito 12 GB di hit consecutive il buffer da 2 GB è pieno. A questo punto il sistema entra in modalità throttling e iterativamente scarta il 10% della dimensione del buffer per far spazio a dati più recenti, saltando e poi sovrascrivendo quelli vecchi, non ancora trasferiti. Questo genera spike finte nel througput (saltare i dati è enormemente più veloce di trasferirli davvero). WhatsApp_Image_2025-09-16_at_19.52.45_9fb01d50

Il throughput DMA è poco inferiore a 1 Gib/s. Il throughput TCP (per ora non ottimizzato) è intorno a 750 Mb/s.

Considero lo sviluppo di questo servizio in pausa finché non sarà disponibile il sistema con chip ed FPGA.

Fammi sapere se hai osservazioni o commenti.

Merge request reports

Loading