Mayo 2013 AGENDA INTRODUCCIN ELEMENTOS DEL SIMULADOR INSTALACIN LENGUAJE NED MDULOS SIMPLES EJEMPLOS INTRODUCCION Existen tres tcnicas para evaluar el desempeo de sistemas y redes: Anlisis Matemtico Medidas Simulacin computacional La simulacin es particularmente usada para sistemas que son altamente dinmicos y cuyas propiedades son difciles de capturar en un anlisis matemtico.
Introduccin Simulacin de Eventos Discretos Se utiliza para hacer la investigacin sobre todas las capas de una red. Provee un camino simple y flexible para evaluar el comportamiento de la red bajo diferentes condiciones. Principios de la Simulacin de Eventos Discretos La idea de un simulador de eventos discretos es saltar desde un evento al siguiente, por lo cual la ocurrencia de un evento puede desencadenar cambios en el estado del sistema asi como la generacion de nuevos estados, denominados event notices. Los eventos son registrados como event notices en la FEL (Future Event List), la cual es una estructura apropiada de datos para administrar todos los eventos en este tipo de simulaciones. t1 t2 ti ti+1 ti+2 Principios de la Simulacin de Eventos Discretos Todo simulador de eventos discretos comparten los siguientes componentes: Estado del Sistema: Conjunto de variables que definen el estado del sistema. Reloj: Da la hora actual durante la simulacin Lista de eventos futuros (FEL) Contadores estadisticos: Conjunto de variables que contiene informacin de las estadsticas del rendimiento del sistema. Rutina de Inicializacion: Inicializa el modelo y configura el reloj a 0. Rutina de Temporizacion: recupera el proximo evento del FEL y avanza el reloj al tiempo que ocurre el evento. Rutina del Evento: es llamada cuando un evento particular ocurre durante la simulacin. Diagrama de Flujo de una Simulacin de Eventos Discretos INICIO FIN Inicializacin Seleccin del Prximo Evento Rutina Evento 1 Rutina Evento 2 Rutina Evento k Termina? Datos de Salida No Si Terminologa y componentes de una Simulacin Entidad: es una abstraccin de un tema particular de inters Se describe por sus atributos, por ejemplo, una entidad paquete debera tener como atributos: longitud, direccin destino y origen. Sistema: se define como un conjunto de entidades y su interrelacin Tiene un determinado objetivo que pretende lograr. Por ejemplo una red puede ser definida por las entidades hosts, routers y enlaces, siendo su objetivo proveer de conectividad end-to-end. Terminologa y componentes de una Simulacin Sistema Discreto: es un sistema cuyo estado, definido por el estado de todas las entidades del sistema, cambia solamente en puntos discretos en el tiempo. Modelo: es una abstraccin del sistema. Por lo tanto esta formado por determinadas entidades de inters del sistema y la seleccin de las relaciones entre las entidades. OMNeT++ OMNeT++ (Objective Modular Network Testbed in C++) Es un simulador de eventos discretos. Su rea de accin es el campo de las redes de comunicaciones. Esta compuesto por: kernel del simulador GUI: Grfico (tkenv) o texto (cmdenv) Simulation Class library OMNeT++ Puede ser usado en varios mbitos: Modelado de redes de comunicacin Cableadas e Inalmbricas Modelado de Protocolos Modelado de Colas Modelado de multiprocesos, sistemas distribuidos. Evaluacin del desempeo de sistemas En general, modelado y simulacin de cualquier sistema basado en eventos discretos que permitan el intercambio de mensajes. La Simulacin IDE Una importante parte de OMNeT++ es la Simulacin basada en Eclipse (IDE). Para simplificar el desarrollo de plug-ins, la simulacin IDE carga plug-ins de proyectos de usuarios tales como INET o MiXiM. La Simulacin IDE Los siguientes grandes frameworks han sido desarrollados para OMNeT++: INET: contiene modelos para varios protocolos Internet tales como UDP, TCP, SCTP, IP, IPv6, Ethernet, PPP, MPLS, OSPF, IEEE 802.11 INETMANET: Para soporte de protocolos de redes moviles. MiXiM: soporta simulaciones de redes inalmbricas y mviles Castalia: para redes de sensores inalambricos. Editor NED El editor NED puede editar archivos en modo grafico o en modo texto. El usuario puede conmutar entre los modos en cualquier momento.
Editor de archivos INI El editor de archivos INI permite al usuario configurar los modelos de simulacin para la ejecucin. Esta basado en formularios y edicin de origen.
Editor de archivos INI Configuracin de la Simulacin
Instalacin OMNeT++ es soportado en los siguientes sistemas operativos: Windows 7, 8 y XP Mac OS X 10.7 y 10.8 Distribuciones de Linux tales como: Ubuntu 12.04 LTS, 13.04 Fedora Core 18 Red Hat Enterprise Linux Desktop Workstation 6.4 OpenSUSE 12.3 Instalacin La simulacin IDE puede usarse en las siguientes plataformas: Linux x86 32/64-bit Windows 7, 8 y XP Mac OS X 10.7 y 10.8 OMNeT++ requiere varios paquetes para ser instalado en un computador. Entre estos paquetes se incluye el compilador C++ (gcc). Instalacin Ubuntus Se instalar Ubuntus 10.04, para lo cual se utilizar el programa wubi.exe para realizar la instalacin desde windows. Al ejecutar este programa se va a seleccionar el realease 12.04.2 LTS. Se escoge el espacio a ser usado para esta instalacin por ejemplo 25 Gbytes. Instalacin Ubuntus ls Lista los ficheros de un directorio. ls -l Lista ficheros con atributos ls -la Lista ficheros incluidos los ocultos cd nom_directorio Cambia de directorio ls -la | more lista ficheros con paginacin mv [ruta1]fichero1 [ruta2]fichero2 Mueve y/o renombra un directorio. rm archivo o directorio Elimina archivos o directorios rm -r directorio Borra un directorio recursivamente cp archivo1 archivo2 Realiza una copia de un fichero mkdir crea un directorio rmdir borra un directorio Instalacin Ubuntus Los comandos que se usan para actualizar paquetes en Ubuntu: Instalar un paquete sudo apt-get install Instalar un paquete desde el lector de cds sudo apt-cdrom install Actualizar paquetes (o recargar repositorios) sudo apt-get update Actualizar todos los paquetes instalados sudo apt-get upgrade Desinstalar un programa/aplicacin/paquete sudo apt-get remove Instalacin en Ubuntus Antes de iniciar la instalacin, es necesario refrescar la base de datos de paquetes disponible, para lo cual en el terminal se ingresa la linea de comando: $ sudo apt-get update Para instalar los paquetes requerido, se debe escribir en el terminal el siguiente comando: $ sudo apt-get install build-essential gcc g++ bison flex perl \ tcl-dev tk-dev blt libxml2-dev zlib1g-dev default-jre \ doxygen graphviz libwebkitgtk-1.0-0 openmpi-bin libopenmpi-dev libpcap-dev Instalacin en Ubuntus Proceso de Instalacin de OMNeT++ Se puede descargar OMNeT++ desde la direccin http://omnetpp.org. Para Linux el archivo a descargar es: omnetpp-4.3-src.tgz. Es necesario copiar el archivo en el directorio donde se desea realizar la instalacin (/home/<you>) Es necesario abrir un terminal, y extraer el archivo usando el siguiente comando: $ tar xvfz omnetpp-4.3-src.tgz Este crear un subdirectorio omnetpp-4.3 que contiene los archivos OMNeT++. Proceso de Instalacin de OMNeT++ OMNeT++ necesita que su directorio bin/ este en el path. Para aadir bin/ temporalmente, se debe cambiar al directorio OMNeT++ y colocar el siguiente comando: $ cd omnetpp-4.3 $ . setenv Para configurar de forma permanente los directorio con sus correspondientes paths es necesario editar .bashrc: $ gedit ~/.bashrc Al final del archivo se debe aadir lo siguiente: export PATH=$PATH:$HOME/omnetpp-4.3/bin export TCL_LIBRARY=/usr/share/tcltk/tcl8.5 Es necesario luego de guardar los cambios cerrar y reabrir el terminal. Configurando y Construyendo OMNeT++ En el nivel mas alto del directorio de OMNeT++, ejecutar: $ ./configure Configurando y Construyendo OMNeT++ $ make Luego de la Instalacin ... Para probar la instalacin se puede ejecutar el siguiente ejemplo: $ cd samples/dyna $ ./dyna Para iniciar el OMNeT++ desde el terminal: $ omnetpp Para habilitar acceso rpidos: $ make install-menu-item $ make install-desktop-icon Luego de la Instalacin ... Instalacin de Plug-in para ambiente de desarrollo. Help Install new software Luego de la Instalacin ... Conceptos de Modelado Un modelo OMNeT++ consiste de mdulos que se comunican enviando mensajes: Mdulos simples son escritos en C++, usando libreras de clases, pueden ser agrupados en mdulos compuestos y as sucesivamente; el numero de niveles jerrquicos es ilimitado. Mdulos compuestos estn formados por un conjunto de mdulos simples conectados entre si. Creacin de Programas de Simulacin Un modelo OMNeT++ contiene las siguientes partes: Descripcin de topologa de lenguaje NED. Archivos con extensin .ned. Definicin del mensaje, en archivos con extensin .msg. Implementacin de mdulos simples y otro cdigo C++ , en archivos .cc (o .cpp, en Windows) Ejecucin de Simulaciones y Anlisis de Resultados La simulacin puede ser compilada como un programa ejecutable independiente, o puede ser creada como una librera compartida. Cuando se inicia un programa, primero se leen todos los archivos NED que contiene la topologa del modelo, luego se lee el archivo de configuracin (llamado comnmente omnetpp.ini). Este archivo contiene la configuracin que controla la forma como se ejecuta la simulacin, valores para los parmetros del modelo, etc. El resultado de la simulacin se escribe en archivos de resultados: archivos de vectores, archivos de escalares, y posiblemente archivos propios de salida del usuario. OMNeT++ contiene un Integrated Development Environment (IDE) que provee un ambiente para el anlisis de estos archivos. Que est en la Distribucin? El directorio OMNeT++ contendr los siguientes subdirectorios: omnetpp/ OMNeT++ root directory bin/ OMNeT++ executables include/ header files for simulation models lib/ library files images/ icons and backgrounds for network graphics doc/ manuals, readme files, license, APIs, etc. migrate/ tools to help model migration from 3.x to 4.0 version src/ OMNeT++ sources test/ regression test suite Que est en la Distribucin? La simulacin IDE basada en Eclipse se encuentra en el directorio : ide/ Simulation IDE features/ Eclipse feature definitions plugins/ IDE plugins (extensions to the IDE can be dropped here) ... Los ejemplos de simulacin se encuentran en el directorio: samples/ directories for sample simulations aloha/ models the Aloha protocol cqn/ Closed Queueing Network Lenguaje NED El simulador utiliza el lenguaje de programacin NED, basado en C++, como herramienta para modelar topologas de red. Este lenguaje define la estructura de la red y facilita la descripcin modular de una red. Un modelo en OMNeT++ se construye con mdulos jerrquicos mediante el lenguaje NED. Los cuales pueden contener estructuras complejas de datos y tienen sus propios parmetros usados para personalizar el envo de paquetes a los destinos a travs de rutas, compuertas y conexiones. Lenguaje NED Bsicamente, con el lenguaje NED se definen tres tipos de mdulos: Mdulos simples Mdulos compuestos Mdulos de redes. En los mdulos de red se encuentran los componentes y especificaciones de la descripcin de una red de comunicaciones. La herencia de las clases componente, mdulo y el canal Lenguaje NED La estructura de un archivo NED puede contener los siguientes componentes: Directivas import Permiten importar declaraciones de otros archivos ned. Funciona como una sentencia include en C++. Ejemplo: import "ethernet"; // imports ethernet.ned
Lenguaje NED Definiciones de canales: Especifica una conexin con caractersticas dadas. Su sintaxis es: channel ChannelName //... endchannel Los parmetros a definir en un canal son: delay, error y datarate. Por ejemplo: channel LeasedLine delay 0.0018 // sec error 1e-8 datarate 128000 // bit/sec endchannel Lenguaje NED Definiciones de Mdulos simples Son las estructuras bsicas para mdulos ms complejos, su sintaxis es: simple SimpleModuleName parameters: //... gates: //... endsimple Los parmetros de los mdulos simples son definidos por quien los crea, y en general pueden ser numricos, booleanas o strings. Los gates (puertas) son las entradas y salidas del mdulo, por donde se transmiten los mensajes. Lenguaje NED Definiciones de Mdulos simples Los parmetros son variables que pertenecen a un modulo. Puede requerir y usar algoritmos de mdulos simples. Por ejemplo, un modulo llamado TrafficGen puede tener un parmetro denominado numOfMessages que determina cuantos mensajes se deberan generar. Son declarados haciendo una lista de sus nombres: seccin de descripcin de un modulo. Lenguaje NED Definiciones de Mdulos simples Ejemplo: simple TrafficGen Parameters: InterarrivalTime, numOfMessages : const, address : string; Gates: //... endsimple
Lenguaje NED Definiciones de Mdulos Compuestos Poseen los campos de un mdulo simple, pueden agregar submdulos, y poseen conexiones entre ellos. La sintaxis es: Module CompoundModule parameters: //... gates: //... submodules: //... connections: //... endmodule Lenguaje NED Definiciones de Mdulos Compuestos Los submdulos son mdulos simples de menor jerarqua Connections: Definen conexiones entre los submdulos definidos, o entre los submdulos y el exterior a travs de las gates. Estas conexiones pueden realizarse mediante canales previamente definidos, o indicando sus caractersticas en la misma conexin. La sintaxis de las conexiones es: entrada - -> channel - -> salida
Lenguaje NED Definiciones de Red La definicin de red declara a la simulacin como una instancia de un modelo previo, lo cual permite finalmente que se ejecute la simulacin. La sintaxis es:
network networkType : networkName parameters: //.. endnetwork Lenguaje C++ Para crear un mdulo simple en C++ se debe utilizar la clase cSimpleModule. sta, junto a la clase cCompoundModule, pertenece a la librera de OMNET++ y es derivada de la clase cModule. cSimpleModule posee las siguientes funciones para poder crear dicho mdulo simple: void initialize() void handleMessage(cMessage *msg) void activity() void finish()
Lenguaje C++ La funcin initialize() es llamada en el paso de inicializacin, cuando OMNET++ construye la red, creando los mdulos simples y complejos necesarios y conectndolos de acuerdo a las definiciones del archivo NED. initialize() crea los parmetros iniciales para el objeto creado. HandleMessage y activity funcionan durante el proceso. HandleMessage es llamada cuando el mdulo recibe un mensaje. La funcin activity es una solucin basada en co- rutinas, la cual implementa el proceso de interaccin (es siempre preferible utilizar handleMessage).
Lenguaje C++ La funcin finish, es llamada cuando la funcin termina de forma satisfactoria. Generalmente es usada para guardar las estadsticas vectoriales y escalares reunidas durante el proceso de simulacin. Los archivos que contienen estas funciones deben tener la extensin .cc. Las variables que se usan en los ficheros .cc estn declaradas en otro fichero creado a partir tambin de c++. ste tipo de fichero tiene como extensin .h. En l se crean las variables de funciones, variables de estadsticas y variables de parmetros
Ficheros INI Estos ficheros son fundamentales para realizar la simulacin. En ellos se describen: Los parmetros caractersticos de la simulacin El nmero de simulaciones a ejecutar. La duracin de la simulacin. El valor de los atributos de los mdulos simples. Los ficheros donde se guardarn las estadsticas recogidas, etc. La indicacin de un parmetro de un mdulo simple se realiza por orden jerrquico. Si se escribe el mdulo que se va a utilizar y se finaliza con un punto (.), se mostrar una lista de los parmetros que se puede utilizar. Ficheros INI Un ejemplo de un parmetro INI sera: modulodeRed.modulocompuesto.parametro Dos_Nodosfijos_Adhoc_60metros.channelControl.carrierFrequency = 2.4GHz Tambin puede crearse rutas relativas con el asterisco en vez de rutas absolutas. Por ejemplo: *.channelControl.carrierFrequency = 2.4GHz **.HostServidor.wlan.mac.address = "10:00:00:00:00:00"
Enlace con Eclipse Omnetpp hep Install New Software Simulacin de Eventos Discretos Un sistema de eventos discretos en un sistema donde los cambios de estados suceden en instancias de tiempo discretas. Sistemas que pueden ser vistos como sistemas de eventos discretos pueden ser modelados usando Simulacin de Eventos Discretos (DES). Por ejemplo, las redes de computadores son usualmente vistas como sistemas de eventos discretos. Algunos de los eventos son: Inicio de la transmisin de paquetes Fin de la transmisin de paquetes Expiracin del temporizador de retransmisin Simulacin de Eventos Discretos El tiempo cuando un evento ocurre se denomina frecuentemente event timestamp. Con OMNeT++ se usa el termino arrival time (porque en la clase library, la palabra timestamp se reserva para un atributo configurable por el usuario en el evento class). El tiempo en el modelo es frecuentemente llamado tiempo de simulacin, tiempo del modelo o tiempo virtual en lugar de tiempo real o tiempo de CPU que se refiere al tiempo que dura la simulacin del programa y la cantidad de CPU consumida. Crear una Simulacin Bsica Paso 1: Para crear una simulacin bsica en primer lugar se ingresa al ambiente visual de omnetpp. Crear una Simulacin Bsica Paso 2: Se crea un nuevo Proyecto Crear una Simulacin Bsica Paso 3: Se selecciona como vaco. Crear una Simulacin Bsica Paso 4: Se crea un nuevo archivo NED. Crear una Simulacin Bsica Paso 5: En este archivo se va a definir una red formada por dos computadores que se comunican entre si de modo full duplex. Crear una Simulacin Bsica Paso 5: Dentro del archivo fuente de ned.ned se crea un modulo simple denominado computer.
simple computer { gates: input in; output out; } Crear una Simulacin Bsica Paso 6: Dentro del archivo fuente de ned.ned se crea una red que contiene a los computadores. network net { submodules: computer1: computer { @display("p=47,59"); } computer2: computer { @display("p=221,59"); } connections: computer1.out --> computer2.in; computer2.out --> computer1.in; } Crear una Simulacin Bsica Paso 7: Se crea el archivo de inicializacin Crear una Simulacin Bsica Paso 8: Se crea un archivo fuente con el nombre computer.cc Crear una Simulacin Bsica Paso 9: Se construye el proyecto Paso 10: Se procede a correr la simulacin Demo INET Contiene diferentes ejemplos de demos de simulacin