TP1 : Découvrir OMNeT++

Discrete Event Simulator - http://www.omnetpp.org/

Hakim Badis

 

Un rapport doit être rendu au plus tard 10 jours après le dernier TP à l’adresse e-mail suivante : badis@u-pem.fr. Le compte rendu doit contenir : un rapport pour chaque TP + les sources de chaque exercice (.ned et .ini). L’objet de l’e-mail doit respecter le format suivant : [TP-MDR][votre-formation].nom1-nom2.

       I.            La plateforme OMNeT++

OMNeT++ [http://www.omnetpp.org/] est une plateforme de simulation, modulaire, open source, orienté objet et à événements discrets écrit en C++. Elle offre un IDE basé sur Eclipse, un environnement d'exécution graphique, et une foule d'autres outils. Elle a été conçue pour créer des simulateurs pour les réseaux de communication, les systèmes multi processeurs, et d'autres systèmes distribués. Le développement d’OMNeT++ a commencé en 1992 par Andras Vargas à l'université de Budapest. Actuellement, Ce projet est utilisé par des dizaines d'université pour la validation de nouveaux matériels et logiciels, ainsi que pour l'analyse de performance et l'évaluation de protocoles de communication. L'avantage de OMNeT ++ est sa facilité d'apprentissage, d'intégration de nouveaux modules et la modification de ceux déjà implémentés.

L'architecture d'OMNET++ est hiérarchique composé de modules. Un module peut être soit module simple ou bien un module composé. Les feuilles de cette architecture sont les modules simples qui représentent les classes C++. Pour chaque module simple correspond un fichier .cc et un fichier .h. Un module composé est composé de simples modules ou d'autres modules composés connectés entre eux. Les paramètres, les sous modules et les ports de chaque module sont spécifiés dans un fichier .ned (ned : Network Description). La communication entre les différents modules se fait à travers les échanges de messages (.msg). Les messages peuvent représenter des paquets, des trames d'un réseau informatique, des clients dans une file d'attente ou bien d'autres types d'entités en attente d'un service. Les messages sont envoyés et reçus à travers des ports qui représentent les interfaces d'entrer et de sortie pour chaque module. La conception d'un réseau se fait dans un fichier .ned et les différents paramètres de chaque module sont spécifiés dans un fichier de configuration (.ini). OMNeT++ génère à la fin de chaque simulation deux nouveaux fichiers omnet.vec et omnet.sca qui permettent de tracer les courbes et calculer des statistiques.

Q1.      Quelle est la différence entre un résultat scalaire et un résultat vectoriel ?

 II.            Installation et configuration

La version de d’OMNeT++  la plus à jour actuellement est la version 5.5.1. Le guide d’installation est disponible sur ce document http://omnetpp.org/doc/omnetpp/InstallGuide.pdf

Pour lancer l’IDE d’OMNeT++, il suffit d’utiliser la commande

$ ./omnetpp

III.            Création, configuration, exécution et analyse d’un modèle de simulation via l’IDE d’OMNeT++

Le système à réaliser consiste en une source qui fournit un nombre limité de tâches (job) à un sous-système fermé de files d’attente. La topologie est la suivante :

                                             

Pour créer, configurer, exécuter et analyser ce système, il faut suivre pas-à-pas (et répondre aux questions en même temps) le screencast : http://www.omnest.com/webdemo/ide/demo.html

Q1.      Quelle est la signification de la valeur 0 attribuée au source.InterArrivalTime ?

Q2.      Expliquer l’expression suivante : exponential(${serviceMean=1..3 step 1}).

Q3.      Qu'est-ce qu'un « seed » ?

IV.            La file M/M/1

La topologie à réaliser est la suivante :

Le modèle contient 3 modules :

1.      Le module gen génère des Jobs et il les envoie instantanément au module fifo. Le temps qui sépare deux générations suit une loi exponentielle de paramètre λ jobs/s.

2.      Les Jobs reçus par le module fifo sont stockés dans la file d’attente si le serveur est occupé. Le temps de service suit une loi exponentielle de paramètre μ jobs/s.

3.      Les jobs traités sont envoyés au module sink pour être détruits.

Les paramètres de la simulation sont résumés dans la table suivante

Paramètre

Valeur

1/λ

4s, 8s, 12s, 16s, 20s

1/μ

12s

Capacité de la file d’attente

∞ (capacité par défaut sous OMNeT++)

Nombre de serveurs

1

Type de la file d’attente

FIFO

Durée de la simulation

200000s

Nombre de jobs

∞ (valeur par défaut sous OMNeT++)

Q1.      Quelles sont les valeurs moyennes pratiques et théoriques de : nombre de jobs dans la file fifo,  temps d’attente dans la file fifo, temps de séjours, Taux d’occupation, nombre de jobs droppés ? 

Q2.      Comparer les résultats pratiques et théoriques. Comment expliquer le peu de différence ?

Q3.      Comment améliorer les résultats de la simulation pour converger le plus possible vers les résultats théoriques ?