Trainsim
Ambiente di simulazione per il collaudo di apparecchiature ferroviarie in sicurezza
La richiesta
GE Transportation, la divisione dedicata ai sistemi di segnalamento ferroviario della nota multinazionale, aveva la necessità di implementare un complesso sistema di simulazione di scenari, per il collaudo di apparecchiature ferroviarie in sicurezza.
Il simulatore avrebbe dovuto girare su più nodi (PC industriali e/o a bordo di device), con requisiti molto importanti di sincronizzazione dello stato di simulazione (latenze di sincronizzazione inferiori a 10 ms).
Inoltre, era necessario che i nodi del simulatore potessero funzionare anche a bordo di computer Windows, e che la libreria fosse utilizzabile da C++, Python e LISP.
Problemi affrontati
- Necessità di scrivere codice fortemente performance-oriented, ma comunque ricco di funzionalità
- Libreria multipiattaforma con binding Python e LISP
Soluzioni implementate
- Utilizzo di ZeroMQ come protocollo di trasporto
- Utilizzo di tecniche avanzate per sincronizzazioni lockless tra thread
- Metodologia performance-oriented allo sviluppo
Le richieste
- Simulazione di scenari tra più nodi
- Supporto Linux e Windows
- Sincronizzazione tra nodi entro 10ms
Cosa ha fatto Develer
- Utilizzo di ZeroMQ come trasporto
- Ottimizzazione tramite l’uso di C++, tecniche di multithreading e zero-copy
- Binding da C++ a Python e a LISP
Risultati
- Latenze estremamente basse e in linea con i requisiti
- Software funzionante su piattaforme multiple
Vantaggi introdotti dalle nostre soluzioni
Abbiamo utilizzato la libreria ZeroMQ per implementare il protocollo di trasporto per la sincronizzazione tra i nodi. I meccanismi di publish/subscribe e request/reply implementati da ZeroMQ si sono rivelati molto efficienti, sebbene durante la fase iniziale di studio architetturale abbiamo effettuato importanti ottimizzazioni tramite l’uso di un approccio completamente multithread, con sincronizzazione lockless e zero copy dei dati.
L’uso del C++ si è poi rivelato vincente anche in fase di scrittura di binding, dove abbiamo potuto facilmente interfacciarsi a Python e LISP, i linguaggi scelti dal cliente per la scrittura dei nodi a livello applicativo.
Aumentare le performance è il tuo obiettivo?
In quale modo la nostra metodologia ci ha aiutato
Abbiamo scelto un approccio performance-oriented: cominciando da pagina bianca, abbiamo prima lavorato per ottenere le performance richieste nei casi semplici, e poi durante lo sviluppo è stata sempre considerata bloccante ogni regressione in termini di performance dovuta all’aggiunta di nuove funzionalità.
In quale modo l’open source ha aiutato il progetto
La libreria ZeroMQ è stato un importante tassello, che si è rivelato un trasporto perfetto per l’applicazione in questione, unendo basse latenze, un’architettura thread-safe e la piena portabilità tra mondo Linux e mondo Windows.
Cliente
Multinazionale produttrice di sistemi di segnalamento ferroviario
Staff
“L’uso di ZeroMQ e del multithreading ha consentito di raggiungere fin dall’inizio e mantenere importanti target di performance riguardo alla latenza di comunicazione tra i nodi”