Elaborato Flaminio Alessandro N46001998

Transcript

Elaborato Flaminio Alessandro N46001998
Scuola Politecnica e delle Scienze di Base
Corso di Laurea in Ingegneria Informatica
Elaborato finale in Programmazione II
Analisi sperimentale delle policy di QoS di
OpenDDS
Anno accademico 2015/2016
Candidato:
Alessandro Flaminio
mat. N46001998
Indice
Introduzione
0.1 Introduzione al concetto di middleware . . . . . . . . . . . . . . .
0.2 Metodo e finalità del lavoro . . . . . . . . . . . . . . . . . . . . .
1 DDS/OpenDDS
1.1 Lo standard DDS . . . . . . . . . . . .
1.1.1 Data-centricity . . . . . . . . .
1.1.2 Global Data Space . . . . . . .
1.1.3 Quality of Service . . . . . . . .
1.1.4 Dynamic Discovery . . . . . . .
1.1.5 RTPS . . . . . . . . . . . . . .
1.1.6 DCPS e DLRL . . . . . . . . .
1.2 OpenDDS . . . . . . . . . . . . . . . .
1.2.1 ACE e TAO . . . . . . . . . . .
1.2.2 Caratteristiche . . . . . . . . .
1.2.3 Compliance alle specifiche DDS
2 Le policy di QoS di DDS/OpenDDS
2.1 Timeliness dei dati . . . . . . . . . .
2.1.1 DEADLINE . . . . . . . . . .
2.1.2 LATENCY BUDGET . . . .
2.1.3 TRANSPORT PRIORITY . .
2.2 Disponibilità dei dati . . . . . . . . .
2.3 Consegna dei dati . . . . . . . . . . .
2.4 Risorse . . . . . . . . . . . . . . . . .
2.5 Configurazione . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
.
.
.
.
.
.
.
.
.
.
.
4
4
4
6
6
7
7
8
9
9
10
10
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
12
13
13
14
15
15
3 Applicazione dimostrativa basata su OpenDDS
3.1 Sistema . . . . . . . . . . . . . . . . . . . . . .
3.2 Strumenti utilizzati . . . . . . . . . . . . . . . .
3.3 Implementazione . . . . . . . . . . . . . . . . .
3.3.1 Definizione del tipo di dato Message . .
3.3.2 Implementazione Publisher e Subscriber
3.3.3 Immissione policy di QoS . . . . . . . .
3.3.4 Configurazione listener del Data Reader
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
18
18
18
19
20
20
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Analisi sperimentale delle policy di timeliness di OpenDDS
4.1 Policy di QoS utilizzate . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Caso 1: Calcolo empirico dei tempi di consegna di OpenDDS . . .
4.2.1 Controllore e sensore sulla stessa macchina . . . . . . . . .
4.2.2 Controllore e sensore su macchine diverse . . . . . . . . . .
4.3 Caso 2: Test di utilizzo della policy DEADLINE . . . . . . . . . .
4.4 Caso 3: Verifica prestazioni in presenza di TRANSPORT PRIORITY
22
22
22
22
23
24
24
5 Conclusioni
29
Sitografia
30
ii
Elenco delle figure
1
Il middleware si interpone tra il sistema operativo e le applicazioni.
2
1.1
1.2
Grazie a DDS le applicazioni possono comunicare tramite operazioni di publish/subscribe su determinati Topic. . . . . . . . . . .
Architettura dello standard DDS. . . . . . . . . . . . . . . . . . .
6
9
2.1
Le policy di QoS di DDS. . . . . . . . . . . . . . . . . . . . . . .
11
3.1
I processi comunicano tramite operazioni di publish/subscribe su
determinati Topic. . . . . . . . . . . . . . . . . . . . . . . . . . .
Definizione dell’interfaccia IDL per il tipo di dato Message. . . . .
Comandi necessari alla compilazione dell’interfaccia IDL. . . . . .
Output della compilazione IDL. . . . . . . . . . . . . . . . . . . .
La priorità viene indotta dall’argomento ricevuto dal terminale,
dopodiché vengono impostati i campi relativi alle policy di QoS. .
La funzione on data available() viene richiamata ogni qualvolta
sono disponibili nuovi dati al Data Reader. . . . . . . . . . . . . .
3.2
3.3
3.4
3.5
3.6
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
Snippet di codice del sensore che mostra l’invio del messaggio
contenente il timestamp. . . . . . . . . . . . . . . . . . . . . . . .
Snippet di codice del controllore che mostra la ricezione del timestamp e il calcolo della latenza. . . . . . . . . . . . . . . . . . . .
Calcolo latenza da parte del controller a fine esecuzione. . . . . .
Grafico rappresentante sull’asse delle ascisse il numero di messaggi inviati dal sensore al controllore e sull’asse delle ordinate
la latenza in nanosecondi. In rosso sono riportati i risultati di
LatencyStatistics e in blu i risultati ottenuti dall’elaborazione
dei timestamp. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Grafico relativo alla latenza tra due macchine diverse. In arancio
sono riportati i risultati di LatencyStatistics e in ciano i risultati
ottenuti dall’elaborazione dei timestamp. . . . . . . . . . . . . . .
Numero di deadline miss dato l’invio di 30 messaggi intervallati da
usleep(1) e con deadline di un microsecondo. . . . . . . . . . . .
Numero di deadline miss dato l’invio di 30 messaggi intervallati da
usleep(1) e con deadline di 5000 microsecondi. . . . . . . . . . .
Tramite le LatencyStatistics è possibile notare come i messaggi
vengano consegnati con le giuste priorità. . . . . . . . . . . . . . .
iii
17
18
19
19
20
21
23
24
25
26
26
27
27
28
Abstract
During the past decades, distributed Real-Time systems and Internet of Things
(IoT) applications have grown exponentially in importance. It is vital to have
efficient and simple tools to develop connected softwares. This work describes
the DDS middleware standard and traces the key features of the OpenDDS implementation of the standard. It is then reported an example application using
the OpenDDS APIs, which is used to demonstrate experimentally the Quality of
Service (QoS) timeliness policies of the platform.
Introduzione
Sommario
Al giorno d’oggi, con l’irrefrenabile sviluppo di sistemi distribuiti e di applicazioni
basate sull’Internet of Things (IoT), è sempre più utile disporre di strumenti
semplici e snelli per lo sviluppo di software connessi tra loro. Nella fattispecie,
questo elaborato approfondisce lo standard middleware Data Distribution Service
(DDS), focalizzandosi su una particolare implementazione di esso: OpenDDS. È
quindi riportata un’applicazione esemplificativa, implementata tramite le API
specifiche di OpenDDS, al fine di dimostrare il funzionamento del middleware e
di analizzare sperimentalmente le diverse policy di Quality of Service relative alla
timeliness o↵erte dallo standard.
0.1
Introduzione al concetto di middleware
In un sistema distribuito, un middleware è uno strato che si interpone tra sistema
operativo e applicazioni (fig. 1). Esso permette ai vari componenti del sistema di
comunicare più facilmente e di condividere dati tramite l’utilizzo della rete, a dispetto delle eterogeneità che possono caratterizzarli. Un middleware semplifica lo
sviluppo di sistemi, permettendo agli sviluppatori di concentrarsi sulla cosiddetta business logic delle loro applicazioni, piuttosto che sui dettagli implementativi
relativi alla comunicazione tra processi. Generalmente un middleware fornisce le
seguenti astrazioni:
• Trasparenza del sistema operativo;
• Trasparenza del linguaggio di programmazione;
• Trasparenza della locazione;
• Trasparenza della migrazione;
• Trasparenza ai guasti;
• Trasparenza della replicazione;
• Trasparenza delle implementazioni commerciali.
1
Figura 1: Il middleware si interpone tra il sistema operativo e le applicazioni.
0.2
Metodo e finalità del lavoro
Negli ultimi decenni sono stati realizzati numerosi middleware atti a semplificare
la progettazione e lo sviluppo di sistemi distribuiti. Nel caso di SoS (System of Systems) e di applicazioni dell’Internet of Things (IoT) si è distinto, in particolare,
uno standard in grado di supportare l’eterogeneità, la scalabilità e la dinamicità tipiche di questi sistemi: il middleware message-oriented Data Distribution
Service (DDS). Nell’ambito dei sistemi Real-Time, è di cruciale importanza la
capacità di DDS di permettere un controllo preciso su diversi aspetti di Quality
of Service (QoS) dello scambio di messaggi, specificamente su quelli riguardanti
la temporizzazione.
Per questi motivi il lavoro si è so↵ermato sullo standard DDS e sulle policy di
QoS o↵erte da esso. Nello specifico, data la loro primaria importanza nei sistemi
Real-Time, sono analizzate le seguenti policy relative alla timeliness: DEADLINE,
LATENCY BUDGET e TRANSPORT PRIORITY. Vengono anzitutto esaminati lo standard DDS ed una sua particolare implementazione (OpenDDS) e sono messe
in risalto le policy di QoS o↵erte, ponendo un particolare accento su quelle relative alla timeliness. Nell’ambito dell’implementazione OpenDDS, utilizzando
i numerosi strumenti e funzioni disponibili, è quindi riportata un’applicazione
esemplificativa relativa ad un SoS costituito da un controllore e tre sensori, realizzata al fine di testare l’utilizzo di alcune delle diverse funzionalità o↵erte da
OpenDDS. L’implementazione di esempio è stata utilizzata per e↵ettuare misu-
2
razioni temporali e per verificare sperimentalmente il funzionamento delle policy
di QoS dello standard DDS.
In questo modo vengono dimostrate la semplicità e l’efficienza dello standard, fornendo delle misurazioni empiriche che potrebbero essere utilizzate come punto di
partenza nella valutazione di DDS nell’ambito della progettazione di un ipotetico
sistema.
3
Capitolo 1
DDS/OpenDDS
1.1
Lo standard DDS
Data Distribution Service for Real-Time Systems (DDS) è uno standard middleware specifico per sistemi Real-Time sviluppato da Object Management Group
(OMG). DDS è un MOM (message-oriented middleware) data-centric basato sul
paradigma publish/subscribe, progettato per garantire connettività a bassa latenza, estrema affidabilità e un’architettura scalabile per applicazioni mission-critical
e Internet of Things (IoT).
1.1.1
Data-centricity
Un middleware data-centric come DDS rappresenta un approccio concettualmente di↵erente ai classici MOM message-centric: infatti la data-centricity assicura
che i messaggi scambiati tra le applicazioni contengano le corrette informazioni
contestuali per permettere all’applicazione di riconoscere i dati ricevuti. DDS
conosce i dati da esso immagazzinati e ne controlla la condivisione. La programmazione di sistemi distribuiti che utilizzano MOM message-centric prevede che
venga scritto del codice per l’invio dei messaggi, i sistemi data-centric permettono
invece di focalizzarsi direttamente su quando e come condividere dati, occupandosi direttamente dell’invio dei dati stessi. DDS implementa una condivisione
delle informazioni controllata e sicura.
Le applicazioni comunicano tramite le operazioni di publish e subscribe su specifici Topic, inoltre le sottoscrizioni possono essere caratterizzate da filtri, che
permettono di ottenere solo un sottoinsieme dei dati pubblicati su un determinato Topic.
Un’applicazione sviluppata con un middleware data-centric risparmia al team di
sviluppatori di scrivere migliaia di linee di codice, e per questo permette una significativa riduzione del budget economico e temporale garantendo una maggiore
affidabilità al sistema.
4
Message-Centric Middleware
È necessario definire un set di messaggi basandosi sugli scambi di informazioni richiesti per supportare i
casi d’uso previsti. Nel caso in cui si
presentino nuovi casi d’uso nelle applicazioni è necessario riprogettare il
set di messaggi.
Ogni applicazione deve gestire la
compatibilità tra dati ricevuti/inviati, mantenendo autonomamente una
versione locale del dato. Nel caso in
cui un’applicazione necessiti solo un
sottoinsieme dei dati ricevuti, è necessario gestire il filtraggio a livello
applicativo.
Data-Centric Middleware
Viene definito un modello dei dati basato sulle informazioni necessarie a descrivere lo stato del sistema. Quando nuove risorse vengono
aggiunte, il modello dei dati viene
espanso per includerle.
La compatibilità tra tipi di dato viene gestita dal middleware, che si occupa inoltre di garantire un modello locale dello stato del sistema ad
ogni applicazione. Il middleware è
in grado di recapitare automaticamente i messaggi ai partecipanti in
base alle informazioni di interesse,
garantendone il filtraggio.
Cambiamenti nel sistema quali l’ag- Il middleware si occupa automatigiunta di nuovi dispositivi, la presen- camente di notificare la presenza di
za di nuovi flussi di dati o problemi nuovi partecipanti, di recapitare i
di connessione devono essere gestiti dati provenienti da nuovi flussi di
direttamente dalle applicazioni.
dati e di tenere traccia delle informazioni inviate quando la rete non è
disponibile.
Tabella 1.1:
Data-Centric.
Confronto tra middleware Message-Centric e middleware
5
1.1.2
Global Data Space
DDS è caratterizzato da una posizione di archiviazione dati locale ad ogni applicazione chiamata Global Data Space (GDS). Ad ogni partecipante del dominio DDS, il GDS appare come una memoria locale alla quale si accede tramite
apposite API, mentre DDS gestisce l’invio degli opportuni messaggi finalizzati
all’aggiornamento della memoria sui rispettivi nodi remoti. Gli elementi presenti
in questa area di memoria sono accessibili tramite la tupla (Topic, Key). DDS
provvede alla creazione di Local Object Cache costruite a partire dal GDS; le
modifiche e↵ettuate sulla Local Object Cache vengono riportate sul GDS. Nonostante la presenza di questo ”modello comune” che potrebbe far pensare alla
presenza di un server, DDS opera una comunicazione peer-to-peer, per cui non è
necessaria la presenza di un’entità broker. Questo permette di garantire un certo
grado di affidabilità grazie all’assenza di single point of failure (nodi di fallimento
centralizzati).
Figura 1.1: Grazie a DDS le applicazioni possono comunicare tramite operazioni
di publish/subscribe su determinati Topic.
1.1.3
Quality of Service
I dati possono essere condivisi con DDS utilizzando delle flessibili specifiche di
Quality of Service (QoS) che permettono di garantire requisiti di affidabilità,
sicurezza e salute del sistema (liveliness):
• In un sistema reale non tutti i nodi necessitano della totalità dei dati presente nel Global Data Space: DDS invia solo ciò di cui ogni processo ha
e↵ettivamente bisogno;
6
• Se i messaggi non raggiungono le destinazioni, il middleware implementa
l’affidabilità della consegna quando necessario;
• Se la quantità di dati è ingente, DDS e↵ettua un filtraggio intelligente e
invia soltanto i dati di cui ogni nodo ha bisogno;
• Quando il sistema cambia, DDS riconosce dinamicamente a chi inviare quale
dato, e informa intelligentemente i partecipanti dei cambiamenti;
• Quando sono necessari aggiornamenti veloci, DDS invia messaggi multicast
per eseguire l’aggiornamento di molte applicazioni remote contemporaneamente;
• Con l’evolversi dei tipi di dato, DDS tiene traccia delle versioni utilizzate dalle varie parti del sistema ed esegue automaticamente le dovute
traduzioni;
• Per applicazioni security-critical, DDS controlla gli accessi, impone percorsi
ai flussi di dati e cripta i dati on-the-fly.
Le policy di QoS verranno ulteriormente esaminate in seguito, nell’ambito dell’implementazione dello standard DDS OpenDDS.
1.1.4
Dynamic Discovery
DDS dispone di un servizio di Dynamic Discovery dei publisher e dei subscriber
che permette un riconoscimento automatico degli endpoint da parte del middleware; grazie a questa caratteristica è infatti possibile realizzare applicazioni in
cui ulteriori partecipanti possono entrare a far parte del dominio gestito da DDS a
tempo di esecuzione, realizzando un vero e proprio sistema plug-and-play. Grazie
al Dynamic Discovery, DDS è inoltre in grado di riconoscere lo stato dei publisher
e dei subscriber, comprese le caratteristiche di connessione di entrambi e i tipi di
dato condivisi da essi.
Nonostante le applicazioni possano trovarsi sulla stessa macchina o su diversi sistemi posti in una rete, esse utilizzano le stesse API o↵erte dallo standard. Dato
che non è necessaria la configurazione manuale degli indirizzi IP per realizzare
le comunicazioni, è estremamente flessibile aggiungere partecipanti al dominio,
anche aventi piattaforme software/hardware diverse.
1.1.5
RTPS
Il protocollo Real-Time Publish Subscribe (RTPS) è stato specificamente realizzato per supportare i requisiti dei sistemi a data-distribution, ed, in particolare, esso viene utilizzato dallo standard DDS per permettere un’interoperabilità
multi-vendor tra le varie implementazioni dello standard. RTPS è progettato per
funzionare su IP multicast e con protocolli di trasporto connectionless e best-e↵ort
come UDP/IP. Il protocollo presenta le seguenti principali caratteristiche:
7
• Specifiche QoS atte a realizzare comunicazioni publish-subscribe best-e↵ort
e affidabili per applicazioni Real-Time, utilizzando reti IP standard;
• Tolleranza ai guasti;
• Estensibilità e interoperabilità tra varie versioni dello standard;
• Connettività plug-and-play per le nuove applicazioni;
• Modularità, per consentire ai dispositivi di utilizzare soltanto un sottoinsieme delle caratteristiche o↵erte dal protocollo;
• Scalabilità;
• Type-safety per prevenire errori di programmazione.
1.1.6
DCPS e DLRL
Data-Centric Publish Subscribe (DCPS) è una formalizzazione realizzata dallo
standard DDS per le comunicazioni publish-subscribe. In particolare, DCPS è la
API più bassa tra gli strati di DDS ed è utilizzata dalle applicazioni per le comunicazioni con altri processi basati su DDS. Il Data Local Reconstruction Layer
(DLRL) è invece situato sullo strato più alto perché specifica come un’applicazione possa interfacciarsi con i campi dati di DCPS attraverso le proprie classi in
ambiente di programmazione object-oriented.
Nello specifico, DCPS fornisce le seguenti entità primarie allo standard DDS:
• Domain,
• Domain Participant,
• Data Writer,
• Publisher,
• Data Reader,
• Subscriber,
• Topic.
Sebbene queste fondamentali proprietà del layer DCPS siano suscettibili ad ulteriori approfondimenti, si è preferito focalizzare questo elaborato su altri aspetti
salienti dello standard DDS.
8
Figura 1.2: Architettura dello standard DDS.
1.2
OpenDDS
OpenDDS è un’implementazione open-source scritta in C++ dello standard OMG
DDS, fruibile anche in applicazioni Java tramite l’utilizzo di binding Java e JMS.
OpenDDS è perlopiù sviluppato da Object Computing, Incorporated (OCI), che
ne rilascia i sorgenti sotto licenze open-source. Questa particolare implementazione di DDS è realizzata sull’abstraction layer fornito da ACE per garantire la
portabilità della piattaforma; inoltre fa utilizzo di TAO e del suo compilatore
Interface Description Language (IDL).
1.2.1
ACE e TAO
ADAPTIVE Communication Environment (ACE) è un framework object-oriented
teso alla portabilità che implementa i fondamentali design pattern per il software
concorrente che utilizza la rete. ACE fornisce una serie di wrapper e framework
in C++ che garantiscono diversi task per la comunicazione tra una vasta gamma
di sistemi operativi.
The ACE ORB (TAO) è un framework middleware basato sullo standard Common Object Request Broker Architecture (CORBA) che permette ai client di
invocare operazioni su oggetti distribuiti. L’utilizzo del framework TAO permette di non dover disporre obbligatoriamente di informazioni relative alla posizione
dell’oggetto remoto, al protocollo di comunicazione utilizzato, al sistema opera9
tivo o all’hardware remoti.
OpenDDS fa uso delle suddette tecnologie per snellire lo sviluppo del middleware
stesso, evitando di gestire problematiche quali la portabilità da una piattaforma
all’altra, problemi di multi-threading e sincronizzazione, rilevamento guasti, ecc.
1.2.2
Caratteristiche
OpenDDS è basato sulla versione 1.4 dello standard DDS (formal/2015-04-10) e
sulla versione 2.2 del protocollo DDS-RTPS (formal/2014-09-01).
OpenDDS o↵re di default le implementazioni dei seguenti protocolli di livello
trasporto (sia con IPv4 che con IPv6):
• TCP/IP,
• RTPS/UDP,
• UDP/IP,
• IP multicast.
Tramite l’utilizzo del Pluggable Transport Layer è comunque possibile per gli
sviluppatori realizzare protocolli di trasporto ad-hoc da utilizzare con OpenDDS.
1.2.3
Compliance alle specifiche DDS
OpenDDS, essendo compliant allo standard DDS, implementa tutti i profili del
layer DCPS. Gli sviluppatori possono inoltre definire strutture in IDL da utilizzare come tipi di dato di DDS. Le strutture possono includere tipi scalari base,
stringhe, sequenze, vettori, enumerazioni e unioni.
OpenDDS supporta anche le seguenti caratteristiche della specifica DDS-RTPS:
• Supporto a tutti gli RTPS Message;
• Supporto a RTPS Discovery tramite l’implementazione del Simple Participant Discovery Protocol (SPDP) e Simple Endpoint Discovery Protocol
(SEDP);
• Le implementazioni di tutti gli elementi hanno proprietà relative al tempo
modificabili;
• Supporto a tutti i comportamenti RTPS Reader e RTPS Writer richiesti;
• Supporto a tutte le funzionalità QoS di RTPS.
10
Capitolo 2
Le policy di QoS di
DDS/OpenDDS
In quanto compliant allo standard DDS, OpenDDS o↵re tutte le policy di QoS
descritte dalla specifica. In particolare, le policy possono essere suddivise in
base ai seguenti requisiti non-funzionali: timeliness dei dati, disponibilità dei
dati, consegna dei dati, risorse e configurazione. Ad ogni entità DCPS (come un
Topic, Data Reader o Data Writer) può essere associato un insieme di policy di
QoS. DDS è caratterizzato da un matching tra le policy di QoS o↵erte e richieste
da determinate istanze: ad esempio, un Data Writer e un Data Reader possono
associarsi solo nel momento in cui le QoS o↵erte dall’uno rientrano nei requisiti
di QoS richiesti dall’altro.
Figura 2.1: Le policy di QoS di DDS.
2.1
Timeliness dei dati
Le seguenti policy forniscono un controllo sulle proprietà temporali dei dati, caratteristiche più che significative in System of Systems (SoS) perché, grazie ad
esse, è possibile controllare gli aspetti temporali degli scambi di dati tra sottosistemi, assicurando, allo stesso tempo, che la larghezza di banda sia gestita in
modo ottimale. In considerazione del loro di↵uso utilizzo anche in ambito IoT e
11
dei sistemi embedded, alle suddette policy sono dedicati maggiori approfondimenti, tra tutte quelle che comunque sono oggetto di osservazioni nel corso del lavoro.
Nello specifico, si fa riferimento alle implementazioni in OpenDDS. Sarebbe preferibile, per garantire una resa più efficiente di queste policy prettamente relative
all’aspetto temporale dei dati, l’utilizzo di OpenDDS su un sistema operativo
Real-Time.
2.1.1
DEADLINE
La policy di QoS DEADLINE permette alle applicazioni di definire un massimo
tempo di inter-arrivo per i dati e, in caso di impossibilità di rientrare in questo
intervallo, permette di attivare un meccanismo di notifica per le deadline mancate.
Dal punto di vista implementativo, la policy DEADLINE permette di valutare se i
dati non sono stati letti o scritti in un certo intervallo di tempo. In OpenDDS
questa policy può essere applicata ad un Topic, ad un Data Writer o ad un Data
Reader tramite il campo deadline delle loro rispettive strutture QoS. Di seguito
è riportato l’IDL relativo alla policy deadline:
s t r u c t DeadlineQosPolicy {
Duration t period ;
};
Il valore di default della variabile membro period è infinito, per cui non è richiesto
alcun comportamento. Settando invece i campi period.sec e period.nanosec
a valori finiti, il Data Writer (Data Reader) monitora i cambiamenti di dato effettuati dall’applicazione e, in caso di superamento della deadline, segnala la corrispondente condizione di stato, richiamando la callback on offered deadline missed()
(on requested deadline missed()). Come già accennato precedentemente, la
policy DEADLINE può essere o↵erta e richiesta, per tale motivo vi sono due callback richiamabili nell’ambito del Data Reader o del Data Writer. Specificamente
il valore di period del Data Writer (deadline o↵erta) deve essere minore o uguale
all valore relativo al Data Reader (deadline richiesta). L’interfaccia e l’utilizzo
delle callback sopra riportate sono esaminate nel capitolo successivo.
2.1.2
LATENCY BUDGET
La policy LATENCY BUDGET rappresenta un mezzo per comunicare a DDS l’urgenza
associata ai dati trasmessi. La LATENCY BUDGET indica il tempo entro il quale
DDS deve consegnare le informazioni; questo periodo comincia nel momento in
cui i dati sono scritti da un publisher, e termina nel momento in cui essi sono
disponibili nella cache dei subscriber.
Da un punto di vista implementativo, la policy LATENCY BUDGET può applicarsi a
Topic, Data Reader e Data Writer tramite la variabile latency budget presente
nelle strutture relative alle policy di QoS. Di seguito è riportato l’IDL relativo
alla policy:
s t r u c t LatencyBudgetQosPolicy {
Duration t period ;
};
12
Il valore di default del campo period è zero, il che vuol dire che il ritardo andrebbe minimizzato. Questa policy è considerata come un suggerimento al livello
di trasporto per indicare l’urgenza dei campioni inviati. OpenDDS utilizza il
valore per delineare un intervallo massimo di latenza oltre il quale il ritardo viene segnalato come inaccettabile. Questa policy viene utilizzata perlopiù ai fini
di monitoraggio, infatti, in caso di superamento del budget, viene richiamata la
callback on budget exceeded().
2.1.3
TRANSPORT PRIORITY
La policy TRANSPORT PRIORITY permette di specificare l’importanza associata ai
messaggi, permettendo a DDS di dare priorità a dati più importanti rispetto ad
altri.
In particolare la policy può essere applicata a Topic e a Data Writer, settando
il campo transport priority delle strutture relative alle QoS delle entità. Di
seguito è riportato l’IDL della policy:
struct TransportPriorityQosPolicy {
long value ;
};
La priorità è rappresentata dal campo value. Valori più grandi della variabile
rappresentano valori più alti di priorità in un intervallo compreso tra 1 e 63. Il
valore di default della variabile è 0. Questa policy rappresenta un suggerimento al
livello di trasporto sulla priorità con la quale andrebbero consegnati i messaggi,
il che si concretizza nell’impostazione da parte di OpenDDS delle priorità dei
thread finalizzati alla consegna e alla ricezione del messaggio e nell’impostazione
dei codepoint dei Di↵erentiated Services (Di↵Serv). Ovviamente, per permettere
il corretto funzionamento dei servizi sopra descritti, è necessario che lo scheduler
del sistema operativo implementi le priorità per i thread, ed è inoltre essenziale
che l’hardware di networking supporti i codepoint.
2.2
Disponibilità dei dati
Queste policy disaccoppiano le applicazioni dal punto di vista temporale e spaziale, permettendo di lavorare in ambienti estremamente dinamici caratterizzati da
continui cambiamenti di publisher/subscriber. Queste proprietà sono particolarmente rilevanti in SoS perché aiutano il disaccoppiamento dei vari componenti.
DURABILITY
La policy DURABILITY controlla il ciclo di vita dei dati scritti sul Global Data Space. Esistono 3 livelli di durata dei dati: VOLATILE fa sı̀ che, una volta pubblicato
un dato, esso non sia disponibile ai subscriber pervenuti dopo la pubblicazione;
TRANSIENT LOCAL consente di rendere i dati disponibili anche ai subscriber entrati a far parte del dominio successivamente; PERSISTENT permette la consegna dei
dati a tutti i subscriber anche in caso di spegnimento e riavvio dell’intero sistema.
13
LIFESPAN
La policy LIFESPAN controlla l’intervallo di validità di un determinato messaggio.
HISTORY
La policy HISTORY permette di controllare il numero di messaggi (scritti nell’ambito dello stesso Topic) da tenere in memoria per i Reader ed i Writer.
2.3
Consegna dei dati
Le policy elencate nel presente paragrafo costituiscono degli strumenti di controllo delle modalità di consegna dei dati (affidabilità e disponibilità); in pratica
consentono che i corretti dati siano recapitati al momento esatto e al giusto destinatario. In tal modo, grazie al profilo di content-awareness di DDS, è inoltre
possibile garantire una funzione di filtraggio, che permette alle applicazioni di
selezionare le informazioni di interesse basandosi sul loro contenuto. Questo tipo
di policy è peculiarmente utile in sistemi complessi, in cui un mancato filtraggio
dei messaggi potrebbe comportare grandi sprechi di risorse.
PRESENTATION
La policy PRESENTATION rende possibile il controllo della presentazione ai subscriber dei cambiamenti al modello delle informazioni e↵ettuati dai publisher.
Questa funzione permette di gestire l’ordine e la coerenza degli aggiornamenti
dei dati.
RELIABILITY
La policy RELIABILITY permette di controllare il livello di affidabilità associato
alla di↵usione dei dati (RELIABLE o BEST EFFORT).
PARTITION
La policy PARTITION permette la creazione di partizioni logiche nell’ambito di
un dominio. Questa possibilità fornisce un’astrazione che riesce a suddividere
efficientemente il traffico tra diverse partizioni, migliorando le prestazioni e la
scalabilità del sistema.
DESTINATION ORDER
La policy DESTINATION ORDER consente di modellare l’ordine con cui i messaggi
vengono resi disponibili ai subscriber, basandosi sui timestamp della sorgente o
della destinazione.
14
OWNERSHIP e OWNERSHIP STRENGHT
La policy OWNERSHIP controlla i Writer che detengono i permessi di scrittura ad
un Topic. Esistono due opzioni per la policy: SHARED e EXCLUSIVE. Nel caso
in cui i permessi di scrittura siano condivisi, diversi Writer possono aggiornare concorrentemente un Topic; se invece sono esclusivi, viene garantita la possibilità di scrittura solo al Writer che presenta il valore maggiore della policy
OWNERSHIP STRENGHT.
2.4
Risorse
Queste policy permettono di controllare le risorse locali e end-to-end, come la
memoria e la larghezza di banda. Queste caratteristiche possono rivelarsi cruciali
in sistemi eterogenei, in cui è necessario adattare specificamente la quantità di
risorse utilizzabili.
TIME BASED FILTER
La policy TIME BASED FILTER consente alle applicazioni di specificare ogni quanto
tempo un Data Reader è interessato ai cambiamenti di dato, esprimendo praticamente il massimo tasso al quale possono elaborare informazioni. I campioni
prodotti ad un ritmo maggiore non vengono consegnati. Questa policy permette
quindi di adattare la consegna di dati a dispositivi caratterizzati da banda di rete
o da capacità di elaborazione limitate.
RESOURCE LIMITS
A mezzo della policy RESOURCE LIMITS si ottiene controllo sulle risorse massime
disponibili per la memorizzazione delle istanze dei Topic, in modo da adattare la
consegna dei messaggi anche a dispositivi meno performanti.
2.5
Configurazione
Le seguenti policy garantiscono meccanismi per l’inizializzazione e la configurazione di applicazioni che utilizzano DDS. Tutti i dati settati nell’ambito seguenti
policy vengono distribuiti tramite Topic built-in.
USER DATA
La policy USER DATA permette di associare una sequenza di ottetti (8 bit) ai
Domain Participant, Data Reader e Data Writer; questa policy è spesso utilizzata
per la distribuzione di credenziali di sicurezza.
15
TOPIC DATA
La policy TOPIC DATA consente di associare una sequenza di ottetti ai Topic; frequentemente questa policy viene utilizzata per estendere i Topic con informazioni
addizionali o meta-informazioni, come type-code IDL o XML schema.
GROUP DATA
La policy GROUP DATA rende possibile l’associazione di una sequenza di ottetti
ai publisher e ai subscriber. La finalità tipica di questa informazione è l’attribuzione di un maggiore controllo alle applicazioni sulle corrispondenze delle
sottoscrizioni.
16
Capitolo 3
Applicazione dimostrativa basata
su OpenDDS
Di seguito vengono riportati la specifica ed i dettagli implementativi di un sistema
teorico formato da un controllore e una serie di sensori, realizzato tramite le API
di OpenDDS. Come già accennato precedentemente, questa applicazione è stata
utilizzata per dimostrare ed analizzare le policy di QoS di OpenDDS.
3.1
Sistema
La configurazione presa in esame è, più propriamente, una sottoparte di un classico sistema di controllo (fig. 3.1). I sensori hanno il compito di misurare l’uscita
dell’impianto (elemento non approfondito in questo lavoro) con una certa tolleranza e accuratezza; il controllore, invece, sulla base dei dati ricevuti dai sensori,
determina la logica di controllo. Si suppone che i componenti non si trovino
collegati fisicamente tra loro, ma che siano connessi in rete tramite l’utilizzo di
hardware apposito. A causa della necessità di una comunicazione tra processi
basata sui messaggi e su eventuali requisiti di temporizzazione, risulta più che
adatto l’utilizzo dello standard DDS (OpenDDS) per implementare un meccanismo di comunicazione tra il controllore e i diversi sensori. In particolare il
controllore è un publisher, e i sensori sono dei subscriber.
Figura 3.1: I processi comunicano tramite operazioni di publish/subscribe su
determinati Topic.
17
3.2
Strumenti utilizzati
L’implementazione del sistema descritto è realizzata utilizzando una macchina
virtuale creata tramite VMware Workstation Pro 12 con sistema operativo guest
Xubuntu 14.04.4 a 64 bit. Per i test a più computer è stata adoperata la stessa
macchina virtuale caricata anche su VMware Fusion 8; entrambe le macchine
accedono alla rete LAN tramite connessione bridged.
È utilizzata la versione 3.8 di OpenDDS, compilata direttamente su Linux.
3.3
3.3.1
Implementazione
Definizione del tipo di dato Message
Ogni tipo di dato elaborato da DDS è definito utilizzando Interface Definition
Language (IDL) (fig. 3.2), avvalendosi delle direttive #pragma per permettere a
OpenDDS di identificare i tipi di dato che DDS trasmette e gestisce. I tipi di dato
sono dunque processati dai compilatori IDL di TAO e di OpenDDS (fig. 3.3), al
fine di generare il codice necessario ad inviare e ricevere i suddetti tipi di dato
tramite DDS (fig. 3.4).
In questo caso è stato creato un tipo di dato Message contenente i seguenti campi:
• id: utilizzato per identificare univocamente le istanze nell’ambito dello
stesso Topic;
• value: contenente il valore della misurazione da inviare al controllore;
• timestamp: adoperato per e↵ettuare misurazioni temporali, come dettagliato nel prossimo capitolo.
Figura 3.2: Definizione dell’interfaccia IDL per il tipo di dato Message.
18
Figura 3.3: Comandi necessari alla compilazione dell’interfaccia IDL.
Figura 3.4: Output della compilazione IDL.
3.3.2
Implementazione Publisher e Subscriber
La realizzazione del codice inerente al controllore e ai sensori utilizza come scheletro di partenza l’esempio Messenger, fornito di default dagli sviluppatori di
OpenDDS. In particolare sono state e↵ettuate le seguenti modifiche al codice:
• Sia i publisher (sensori) che il subscriber (controllore) stampano a video
i dati inviati/ricevuti, per una corretta verifica del funzionamento della
comunicazione;
• È stato implementato il passaggio della priorità tramite argomento ricevuto
da linea di comando, in modo da impostare in seguito la policy TRANSPORT PRIORITY
(fig. 3.5);
• È stato previsto l’invio di valori random in un range tra 1 e 100 da parte
dei sensori come misurazioni di esempio.
19
Figura 3.5: La priorità viene indotta dall’argomento ricevuto dal terminale,
dopodiché vengono impostati i campi relativi alle policy di QoS.
3.3.3
Immissione policy di QoS
Per dimostrare il funzionamento delle policy di QoS di OpenDDS sono stati associati dei determinati valori alle strutture corrispondenti delle entità Data Reader
e Data Writer. In particolare, una volta ottenuta la struttura contenente i valori
di default delle policy di QoS, sono stati modificati i campi relativi alla timeliness
(fig. 3.5). È necessario ricordare che le policy devono essere impostate coerentemente tra Data Reader e Data Writer per garantire la corrispondenza tra QoS
o↵erte e richieste.
3.3.4
Configurazione listener del Data Reader
In OpenDDS ogni entità del layer DCPS possiede un’interfaccia listener basata
sui cambiamenti di determinate variabili di stato. Ad esempio, nel caso di un
Data Reader, lo stato DATA ON READERS segnala la presenza di nuovi dati ricevuti,
richiamando la funzione on data available() (fig. 3.6). Le interfacce listener
contengono numerose funzioni relative ai cambiamenti di stato inerenti alle policy
di QoS; tra queste si cita la funzione on requested deadline missed(), che
viene attivata ogniqualvolta non si è ricevuto alcun messaggio entro la deadline
specificata.
20
Figura 3.6: La funzione on data available() viene richiamata ogni qualvolta
sono disponibili nuovi dati al Data Reader.
21
Capitolo 4
Analisi sperimentale delle policy
di timeliness di OpenDDS
4.1
Policy di QoS utilizzate
Tramite la predisposizione di alcune policy di QoS sull’implementazione controlloresensori riportata precedentemente, è possibile analizzare diversi dati sperimentali
degni di nota. In particolare, si è focalizzata l’attenzione sulle policy di QoS atte
al controllo della timeliness dei dati distribuiti come DEADLINE, LATENCY BUDGET
e TRANSPORT PRIORITY.
4.2
Caso 1: Calcolo empirico dei tempi di consegna di OpenDDS
Come primo caso si valutano i tempi richiesti da OpenDDS per la consegna di
un generico messaggio. Il test è e↵ettuato in due modalità: nella prima un controllore (subscriber) e un sensore (publisher) sono avviati sulla stessa macchina,
mentre nella seconda vengono eseguiti su macchine diverse.
Il calcolo della latenza da parte del controllore avviene tramite la sottrazione tra un timestamp ottenuto dalla funzione standard C++ clock gettime e
un timestamp (figura 4.2) inviato come campo del messaggio da parte del sensore (figura 4.1). Nel caso di controllore e sensore in esecuzione sulla stessa
macchina si confrontano i risultati ottenuti con i dati forniti dalla funzionalità LatencyStatistics, inclusa di default in OpenDDS come parte della policy
LATENCY BUDGET.
4.2.1
Controllore e sensore sulla stessa macchina
Sullo stesso sistema vengono avviati un processo controllore e un processo sensore, simultaneamente al processo DCPSInfoRepo che si occupa della registrazione
dei publisher e dei subscriber. Sono dunque inviati dal sensore un determinato
numero di messaggi, e, alla fine dell’esecuzione (fig. 4.3), il controllore e↵ettua il
calcolo della latenza media di consegna degli stessi messaggi. E↵ettuando il test
22
Figura 4.1: Snippet di codice del sensore che mostra l’invio del messaggio
contenente il timestamp.
trasmettendo 10, 20, 30, 100, 200, 300, 600 e 1000 messaggi è possibile notare
(fig. 4.4) come, all’aumentare dei messaggi scambiati, ci sia una leggera variazione
della latenza media di consegna, probabilmente dovuta al maggiore accodamento
di dati. Per limitare tale problema è quindi inserita un’attesa di 0,5 secondi tra
l’invio di un messaggio e l’altro tramite la funzione usleep(500000); infatti, senza questo accorgimento, le latenze aumenterebbero esponenzialmente al crescere
del numero di messaggi inviati. È da sottolineare (fig. 4.4) che la misurazione e↵ettuata tramite sottrazione di timestamp non si discosta particolarmente
da quella ottenuta tramite LatencyStatistics ed, e↵ettuando una media tra le
varie misurazioni, si ottiene una latenza di 570,78 microsecondi.
4.2.2
Controllore e sensore su macchine diverse
Su due dispositivi diversi, con identico hardware virtuale e sistema operativo,
vengono avviati un processo sensore ed un processo controllore; dopodiché il
test è e↵ettuato identicamente al precedente. Prima di analizzare i risultati,
bisogna notare che, in questo caso, diversi fattori aleatori possono incidere sulla
veridicità del test. I ritardi (non dovuti a OpenDDS) causati dal trasferimento dei
pacchetti in rete e l’imprecisione della valutazione della latenza tramite di↵erenza
di timestamp sono solo una parte dei fattori che possono causare incertezza.
In ogni caso, tramite la sincronizzazione dei timer con Network Time Protocol
(NTP), è possibile ottenere una stima approssimativa della latenza tra le due
macchine, che, com’era prevedibile, risulta essere sensibilmente superiore a quella
e↵ettuata su un solo dispositivo (fig. 4.5). La media tra le varie misurazioni è di
19048 microsecondi.
23
Figura 4.2: Snippet di codice del controllore che mostra la ricezione del timestamp
e il calcolo della latenza.
4.3
Caso 2: Test di utilizzo della policy DEADLINE
La policy DEADLINE, come descritto precedentemente, permette di rilevare quando i dati non vengono scritti o letti nell’arco di un certo intervallo di tempo.
Pertanto, potrebbe essere impiegata nell’ambito del sistema controllore-sensori,
dove è richiesta da parte del controllore una determinata frequenza di ricezione
delle misurazioni, in modo da evitare problemi causati dalla presenza di ritardi.
Bisogna precisare che, nel caso preso in esame di un sistema time-sharing, non
è possibile garantire una frequenza prefissata di invio dei messaggi, per la quale
sarebbe richiesto un sistema operativo Real-Time. Nonostante ciò, si riescono
ad ottenere ugualmente risultati soddisfacenti, come riportato di seguito. Ad
esempio, provando ad inviare 30 messaggi intervallati da una usleep(1) (attesa
di un microsecondo), si può verificare la possibilità di rispettare una deadline di
un microsecondo. In questa particolare esecuzione (fig. 4.6) ci sono ben 2032
deadline miss, il che significa che, dati i tempi di consegna medi ricavati, non è
possibile garantire o richiedere una deadline cosı̀ stringente, come del resto era
immaginabile. In particolare, analizzando i precedenti dati, si deduce che, nel
tempo in cui sono stati inviati e consegnati i 30 messaggi di test, il controllore
ne avrebbe attesi ulteriori 2032. Al contrario, settando una deadline di 5000
microsecondi, non viene riscontrata alcuna deadline miss (fig. 4.7).
4.4
Caso 3: Verifica prestazioni in presenza di
TRANSPORT PRIORITY
Come descritto nei capitoli precedenti, la policy TRANSPORT PRIORITY permette
di modificare il livello di priorità con il quale devono essere consegnati i mes24
Figura 4.3: Calcolo latenza da parte del controller a fine esecuzione.
saggi. Con il prossimo test si vuole verificare il funzionamento di questa policy
ottenendo la stampa a video dei messaggi ricevuti dal controllore (subscriber),
unitamente alle priorità dei tre sensori (publisher) sotto forma di misurazione
acquisita (ed inviata). Le priorità dei tre sensori sono impostate a 10, 20 e 30
tramite il campo value della policy, e viene previsto che i sensori inizino ad
inviare messaggi nello stesso momento. L’osservazione dei tempi medi di consegna (fig. 4.8) dei messaggi provenienti dai tre sensori (campo mean della struttura
LatencyStatistics) permette di a↵ermare che i messaggi del primo sensore vengono e↵ettivamente consegnati alla minima latenza, quelli del secondo a latenza
leggermente superiore, mentre quelli del terzo alla massima latenza.
25
7,5⋅105
Latenza in ns
5⋅10
5
2,5⋅105
Num messaggi
0
100
200
300
400
500
600
700
800
900
1000
1100
Figura 4.4: Grafico rappresentante sull’asse delle ascisse il numero di messaggi
inviati dal sensore al controllore e sull’asse delle ordinate la latenza in nanosecondi. In rosso sono riportati i risultati di LatencyStatistics e in blu i risultati
ottenuti dall’elaborazione dei timestamp.
3,5⋅107
3⋅107
Latenza in ns
2,5⋅107
2⋅107
1,5⋅107
1⋅107
Num messaggi
5⋅106
0
100
200
300
400
500
600
700
800
900
1000
1100
Figura 4.5: Grafico relativo alla latenza tra due macchine diverse. In arancio
sono riportati i risultati di LatencyStatistics e in ciano i risultati ottenuti
dall’elaborazione dei timestamp.
26
Figura 4.6: Numero di deadline miss dato l’invio di 30 messaggi intervallati da
usleep(1) e con deadline di un microsecondo.
Figura 4.7: Numero di deadline miss dato l’invio di 30 messaggi intervallati da
usleep(1) e con deadline di 5000 microsecondi.
27
Figura 4.8: Tramite le LatencyStatistics è possibile notare come i messaggi
vengano consegnati con le giuste priorità.
28
Capitolo 5
Conclusioni
A partire dalla disamina delle specifiche di DDS e↵ettuata, è possibile constatare
come lo standard rappresenti la tecnologia ideale per l’implementazione di SoS,
soprattutto grazie alle sue seguenti caratteristiche:
• Interoperabilità e portabilità,
• Accoppiamento lasco,
• Estensibilità,
• Scalabilità, efficienza e timeliness.
Sulla base dell’applicazione dimostrativa riportata si può inoltre assodare la grande semplicità di utilizzo delle API o↵erte da OpenDDS; non è stata infatti necessaria alcuna modifica dei parametri relativi alla comunicazione su rete, al
marshalling-unmarshalling dei dati o ad altri aspetti gestiti autonomamente dal
middleware.
Grazie alle verifiche e↵ettuate, sono stati ottenuti dei dati sperimentali che possono fornire, con la dovuta cautela, una visione d’insieme sulle prestazioni di
OpenDDS. Infatti le varie misurazioni, sebbene e↵ettuate in maniera sistematica, presentano un certo grado di alea causata, come riportato precedentemente,
da alcune fonti di incertezza presenti nel sistema esaminato.
29
Sitografia
[1] The Data Distribution Service, Angelo Corsaro, Douglas C. Schmidt https:
//www.dre.vanderbilt.edu/~schmidt/PDF/dds-sos.pdf [09/08/2016]
[2] An Introduction to DDS and Data-Centric Communications, Gerardo
Pardo-Castellote, Bert Farabaugh, Rick Warren http://www.omg.org/
news/whitepapers/Intro_To_DDS.pdf [09/08/2016]
[3] DDS Enabling Global Data,
Gerardo Pardo-Castellote, Gordon
A. Hunt. https://www.rti.com/docs/DDS_Enabling_Global_Data.pdf
[09/08/2016]
[4] About OpenDDS, http://opendds.org/about/ [09/08/2016]
[5] Data-Centric Middleware,
https://www.rti.com/docs/RTI_Data_
Centric_Middleware.pdf [09/08/2016]
[6] OpenDDS Developer’s Guide, http://download.ociweb.com/OpenDDS/
OpenDDS-latest.pdf [09/08/2016]
[7] The DDS QoS Model, http://download.prismtech.com/docs/Vortex/
html/ospl/DDSTutorial/qos.html [09/08/2016]
[8] The Real-time Publish-Subscribe Protocol (RTPS) DDS Interoperability Wire
Protocol Specification, http://www.omg.org/spec/DDSI-RTPS/2.2/PDF/
[09/08/2016]
[9] What is DDS?,
[09/08/2016]
http://portals.omg.org/dds/what-is-dds-3/
30