simul_data Manual de usuario Universidad Miguel Hernández 1 3 de mayo de 2011 1 Copyright (c) 2008 P. Pablo Garrido Abenza. Todos los derechos reservados. Resumen El presente manual describe el programa simul_data, que se incluye con el paquete de programas simul_xxx. Ha sido desarrollado por P. Pablo Garrido Abenza ([email protected]), dentro del Grupo de Arquitectura y Tecnología de COMputadores (GATCOM) de la Universidad Miguel Hernández. Índice general 1. Introducción 3 2. Instalación 6 2.1. Requerimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.1. Posibles problemas . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.1. Posibles problemas . . . . . . . . . . . . . . . . . . . . . . . . . 8 3. Uso del programa 9 3.1. Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.3. Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.4. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 Capítulo 1 Introducción El objetivo de esta herramienta es extraer datos desde una serie de archivos binarios .ov generados por el programa simul_run, el cual invoca a la utilidad op_runsim de OPNET Modeler. Los datos son exportados a ficheros de texto para facilitar su posterior procesado. El programa simul_data invoca a ov2txt para cada simulacion, aunque este programa tambiéen se puede ejecutar manualmente por el usuario. Finalmente, simul_data se puede ejecutar en un cluster Condor [2], ejecutando varias instancias de ov2txt en paralelo, simplemente especificando una opción (-cluster). Además de utilizar el programa simul_data, para extraer los datos de las simulaciones realizadas con OPNET Modeler [?] también se puede utilizar: • El entorno gráfico de OPNET Modeler (GUI). • Desde línea de órdenes con la utilidad op_cvov. Aunque utilizar el entorno gráfico puede ser más sencillo, tiene el inconveniente de que se trabaja de forma interactiva, lo cual puede ser muy repetitivo si se han realizado muchas simulaciones en una secuencia. Cuando se desarrolló simul_data, no existía otra posibilidad de hacerlo. Sin embargo, actualmente (desde la versión 14.0?) existe la utilidad op_cvov con objeto de realizar esta tarea desde línea de órdenes. A continuación se muestran tres ejemplos de uso de esta utilidad. En el primero de ellos se extraerán los datos de todas las simulaciones realizadas del proyecto completo. op_cvov -m simul_run -mod_dirs ~/op_models/simul_run -output_file_path ~/op_models/simul_run/data/file.txt -vector_header -vector_data En este segundo caso se considerarán todas las simulaciones pero del escenario especificado. op_cvov -m simul_run-mymodel -mod_dirs ~/op_models/simul_run -output_file_path ~/op_models/simul_run/data/file.txt -vector_header -vector_data 3 simul_data Manual de usuario Por último, en el tercer ejemplo se extraerán los datos vectoriales de una única simulación del escenario especificado. En todos los casos se exportan todas las variables estadísticas seleccionadas a la hora de realizar la simulación. op_cvov -m simul_run-mymodel-DES-1 -mod_dirs ~/op_models/simul_run -output_file_path ~/op_models/simul_run/data/file-1.txt -vector_header -vector_data Con simul_data, no se dispone de la primera posibilidad, siempre se trabaja con un escenario concreto, ya sea una única simulación, todas, o un rango específico. Aunque se verán más ejemplos en la sección 3.4, a modo de comparativa con la utilidad op_cvov, dos formas de uso de simul_data parecidas a los dos últimos ejemplos anteriores serían: simul_data.sh -m simul_run-mymodel -i ~/op_models/simul_run/results -o ~/op_models/simul_run/data -f rh simul_data.sh -m simul_run-mymodel -i ~/op_models/simul_run/results -o ~/op_models/simul_run/data -f rh -first 1 -last 1 En resumen, las principales diferencias de simul_data respecto op_cvov son: 1. Con simul_data se pueden seleccionar las columnas o variables estadísticas a exportar, en vez de exportar todas las que contenga el archivo .ov. Además, dichas columnas se pueden especificar de varios modos (por índice, por nombre, . . . ). 2. El formato generado por op_cvov, aunque sea texto, es difícil de procesar de forma automática. Por ejemplo, en el caso de extraer los datos de varias simulaciones (escenario o todo el proyecto), todos los datos van en el mismo archivo, mientras que con simul_data, cada archivo .ov (es decir, cada simulación) tiene su propio archivo de salida. 3. Con simul_data se puede indicar el formato de salida, que aunque siempre es en modo texto, es diferente para Excel que para el paquete estadístico R (p.e., el carácter fin de línea, el carácter separador, el carácter utilizado como separador de decimales en caso de utilizar Excel con un idioma distinto del inglés, etc.). 4. Con simul_data se pueden realizar operaciones sobre los datos vectoriales generados para obtener datos escalares: MIN, MAX, AVG, MEAN, VAR, SUM, etc. Estas mismas operaciones se pueden definir desde OPNET Modeler para generar archivos de datos escalares (.os), excepto la función SUM que no la ofrece OPNET. La ventaja de esto es que no es necesario haber generado dichos archivos .os para obtener tales valores, ya que el programa simul_data los calcula a partir de los datos vectoriales. 5. El programa simul_data puede ejecutar en paralelo la extracción de datos, realizando la extracción de cada simulacióon en un procesador de un cluster Condor. 4 simul_data Manual de usuario El paquete de programas simul_xxx, consta básicamente de varios programas independientes que se ejecutarán uno tras otro, desde línea de órdenes. Estos programas son los siguientes: • simul_run: para realizar secuencias de simulaciones con OPNET Modeler sin utilizar el entorno gráfico del simulador. • simul_data: para extraer los datos que nos interesan de entre todas las estadísticas recogidas durante una secuencia de simulaciones. • ov2txt: invocado por simul_data para extraer los datos de una simulación concreta. También se puede ejecutar por el usuario de forma manual. • simul_graphs: para generar gráficos a partir de los datos extraídos, utilizando el paquete R o gnuplot. • simul_reports: para generar un único informe que contenga todos los gráficos generados, así como los datos utilizados para ellos. Además de los programas anteriores, hay otras utilidades más específicas para el caso de realizar simulaciones de redes MANETs: • simul_geoloc: para distribuir aleatoriamente los nodos de una red durante el diseño del mismo y calcular el grado de partición según su rango de transmisión. • simul_ah2r: para transformar un archivo de histórico de animación de formato binario .ah a formato de texto .as, al tiempo que se calcula el grado de partición de la red en cada instante de la simulación. • simul_manet: para generar de forma sencilla archivos .ef de parámetros de entrada para simul_run, especificando por ejemplo un rango de transmisión, y el programa escribirá en el archivo de salida los valores apropiados para ciertas propiedades de algunos objetos del modelo. A diferencia de los lenguajes de script, como estos programas se han desarrollado en lenguaje C ha sido bastante fácil portarlos a otras plataformas. Actualmente están disponibles para Windows y sistemas de tipo UNIX como Linux o Mac OS X1 . 1 Actualmente OPNET Modeler solo esta disponible para Windows y Linux, aunque podría ser que se ejecutase en Mac OS X utilizando X11. 5 Capítulo 2 Instalación El proceso de instalación del programa simul_data es muy sencillo, muy similar al resto de programas del paquete simul_xxx. Los pasos a seguir son los siguientes: 1. Copiar el ejecutable simul_data en cualquier directorio. 2. Añadir a la variable de entorno PATH la ruta absoluta del directorio donde esté el ejecutable (por conveniencia). 3. Bajo Linux, añadir a la variable de entorno LD_LIBRARY_PATH la ruta absoluta de las librerias de OPNET, la cual depende del directorio de instalación de OPNET y de su versión (p.e. /usr/opnet/16.0.A/sys/pc_intel_linux/lib). 4. Instalar el programa ov2txt (ver la siguiente sección). Respecto a los pasos relacionados con variables de entorno, la explicación detallada de cómo establecer una variable de entorno sale fuera del ámbito de este manual, pero a continuación se explica brevemente. Se deben especificar rutas absolutas, siendo indiferente si las rutas terminan con la barra separadora o no. 2.1. Requerimientos El programa simul_data requiere que se tenga instalado el programa ov2txt del paquete simul_xxx, el cual requiere ser compilado con la misma versión que la versión de OPNET Modeler instalado (ver manual de ov2txt para más detalles). Por conveniencia, el programa simul_datano llama al ejecutable directamente sino a un script o archivo por lotes llamado ov2txt.sh (Linux) o ov2txt.bat (Windows), el cual debe existir en una ruta accesible. Es dicho script el que invoca al ejecutable según la versión de OPNET Modeler. 2.2. Windows Supongamos que el directorio en el que hemos copiado el programa simul_data es: 6 simul_data Manual de usuario C:\Archivos de programa\utils En resumen, la forma de modificar la variable de entorno PATH seria la siguiente: • Windows 98 o anteriores: modificar el archivo C:\AUTOEXEC.BAT, añadiendo la línea siguiente al final. Dependiendo de nuestra versión de Windows, puede que tengamos que escribir el directorio entre comillas dobles si el nombre del directorio es de mas de 8 letras o tiene espacios en blanco: SET PATH=%PATH%;C:$\Archivos de programa\utils • Windows NT, 2000 o XP: en la configuración del sistema, Panel de Control >Sistema >solapa Avanzado >pulsar botón [Variables de entorno]. Podemos modificar la variable de entorno PATH, añadiendo el directorio anterior al final, separado con un ’;’. También podemos modificar el archivo Autoexec.NT de la misma forma que en el caso anterior. 2.2.1. Posibles problemas Algunos mensajes de error en Windows relacionados con esto son: 1. Mensaje ’Error al iniciar la aplicación porque no se encontró opema.dll. La reinstalación de la aplicación puede solucionar el problema’: este mensaje indica que no se ha instalado OPNET en el ordenador o alguna variable de entorno mal establecida. Asegurarse de que el directorio siguiente aparece en la variable de entorno PATH: C:\Archivos de programa\OPNET\16.0.A\sys\pc\_intel\_win32$\bin 2. Mensaje ’No se encuentra el punto de entrada del procedimiento Vos_Error_Fstack– _Discrepancy_Detected en la biblioteca de vínculos dinámicos opvos.dll’: indica que se tiene instalado una versión de OPNET Modeler distinta de la utilizada para generar el programa. Caso de tener varias versiones instaladas, en la variable PATH debe aparecer primero el directorio bin de la versión correspondiente, y ejecutar el programa compilado con la misma versión. 3. Mensaje (aviso): ’Error: Invalid port assignment’: asegurarse de que: (1) la propiedad license_port está establecida a port_a, port_b, o port_c y (2) la propiedad license_server o license_server_standalone está bien establecida. Se pueden establecer las siguientes variables de entorno: license_port=port_a y license_server_standalone=true. 2.3. Linux Supongamos que el directorio en el que hemos copiado el programa simul_data es: $HOME/bin 7 simul_data Manual de usuario En Linux hay que establecer las variables PATH y LD_LIBRARY_PATH. En esta última hay que establecer la ruta de las librerías de OPNET, ya que es necesario para poder ejecutar programas que utilicen el API EMA (creados con op_mkema). Esta ruta depende del directorio de instalación de OPNET y de su versión. La forma de hacerlo y fichero a modificar depende del shell o interprete de órdenes utilizado (bash, ksh, . . . ): • Linux (shells: bash, ksh, zsh, sh): $HOME/.bash_profile or $HOME/.profile: PATH=.:$PATH:$HOME/bin LD_LIBRARY_PATH=/usr/opnet/16.0.A/sys/pc_intel_linux/lib export PATH export LD_LIBRARY_PATH • Linux (shells: csh, tcsh): $HOME/.login: setenv PATH .:$PATH:$HOME/bin setenv LD_LIBRARY_PATH /usr/opnet/16.0.A/sys/pc_intel_linux/lib A la hora de establecer la variable LD_LIBRARY_PATH, hay algunas distribuciones Linux que no lo permiten. En este caso, será necesario establecer su valor cada vez que vayamos a ejecutar el programa simul_data o abramos la consola. Para simplificar este proceso, se puede escribir un pequeño archivo por lotes llamado simul_data.sh similar al siguiente, y copiarlo junto al ejecutable de simul_data. Para pasar los argumentos desde el script al ejecutable también se puede utilizar "$@" (con las comillas) en vez de $*. #!/bin/sh export LD_LIBRARY_PATH=/usr/opnet/16.0.A/sys/pc_intel_linux/lib exec simul_data-en-x86.bin $* 2.3.1. Posibles problemas Algunos mensajes de error que se pueden obtener en Linux son: 1. Mensaje ’error while loading shared libraries: libopema.so: cannot open shared object file: No such file or directory’. En este caso, el problema se debe a no haber establecido la variable de entorno LD_LIBRARY_PATH. 2. Mensaje ’error while loading shared libraries: libopxml.so: cannot open shared object file: No such file or directory’ puede ser debido a que se tiene instalada la version OPNET Modeler v16.0.A, mientras que el ejecutable de simul_data fue compilado para otra versión anterior. La versión v14.0.A utiliza la librería libopxml.so, pero la v16.0.A ya no. 3. Mensaje (aviso): ’Error: Invalid port assignment’: asegurarse de que: (1) la propiedad license_port está establecida a port_a, port_b, o port_c y (2) la propiedad license_server o license_server_standalone está bien establecida. Se pueden establecer las siguientes variables de entorno: license_port=port_a y license_server_standalone=true. 8 Capítulo 3 Uso del programa En este apartado vamos a explicar el uso del programa simul_data. Suponemos que hemos escrito el script simul_data.sh explicado en el apartado anterior. 3.1. Sintaxis simul_data -? simul_data -m <input-file> [-w <path>] [-i <path>] [-o <path>] [-q] [-v] [-f <output-format>] [-x <data-to-export>] [-s <suffix>] [-first <n>] [-last <n>] [-dont_run] [-cluster <np> <met> [<notif> <email>]] 3.2. Descripción El programa simul_data extrae datos a partir de los archivos binarios (.ov) obtenidos como resultado de la ejecución de una secuencia de simulaciones de OPNET Modeler, exportando los datos a archivos en modo texto con objeto de procesarlos posteriormente con Excel, el paquete estadístico R, etc. Estos archivos de texto tienen una serie de datos ordenados por columnas separadas con algún carácter separador (csv). El programa permite la ejecución secuencial (por defecto) o en paralelo en un cluster Condor. El programa no funciona de manera interactiva, es decir, no pide ningún dato al usuario una vez lanzado. Por ello, siempre hay que especificar las opciones necesarias al invocar al programa, y son las siguientes: Argumentos generales (ayuda, ...): -----------------------------------------?: muestra esta ayuda. -v: modo ’verbose’. Argumentos para pasar directamente a ov2txt: -------------------------------------------Las siguientes opciones se pasaran directamente a ov2txt. 9 simul_data Manual de usuario Consulta la ayuda de ov2txt para mas detalles: -m, -w, -i, -o, -q, -v, -f, -x, -s Argumentos para definir la secuencia de simulaciones: ----------------------------------------------------Si el escenario especificado con -m es ’mymodel’, los archivos de los que se extraeran datos seran: ’mymodel-DES-001.ov’, ’mymodel-DES-002.ov’, ... Por defecto, se comienza por el 001 y se termina cuando no se encuentre un archivo, a menos que se especifique las opciones -first o -last: -first <n>: indice de simulacion (n) desde donde comenzar. Por defecto desde la primera de la secuencia (1). -last <n>: indice de simulacion (n) hasta donde realizar. Por defecto hasta la ultima de la secuencia encontrada. -dont_run: no extrae ningun dato, solo mostrara informacion con los datos a extraer, y en el caso de utilizar un cluster Condor, generara archivos necesarios pero sin lanzar los jobs. Argumentos para utilizar un cluster (Condor): ---------------------------------------------cluster <np> <met> [<notif> <email>]: ejecucion de la secuencia de simulaciones en paralelo (cluster Condor). Si ’simul_data’ se ejecuta en un cluster y no se especifica esta opcion, los procesos se ejecutaran secuencialmente en un mismo procesador. Los argumentos para esta opcion son: <np> = numero de procesadores a utilizar, es decir, numero maximo de jobs simultaneos, uno para cada simulacion (np>=0). Como los usuarios de OPNET Modeler deben tener un numero de licencias, el valor <np> debera ser menor o igual que el numero de licencias disponibles; en otro caso muchas simulaciones fallaran por no tener licencia disponible. <met> = metodo para lanzar los jobs en el cluster: 1-jobs sueltos; 2-DAG; 3-DAG parametrizado En caso de que el numero de simulaciones (jobs) sea mayor que <np>, el metodo 1 no puede utilizarse, ya que podria significar que no hay suficientes licencias de OPNET. Si se detecta este caso, se cambia al metodo 2. <notif> = eventos a notificar al <email> indicado: 0-Nunca; 1-Completado; 2-Errores; 3-Siempre <e-mail> = Direccion de correo al que notificar los eventos. 3.3. Archivos El programa simul_data utiliza los archivos binarios .ov como entrada (mymodel-DES-001.ov, mymodel-DES-002.ov, ...), los cuales han sido generados por la utilidad simul_run (y op_runsim). Por otro lado, el programa generará un fichero de texto por cada archivo .ov como salida (con la extensión .data o .xls). Opcionalmente, en caso de utilizar un cluster Condor (opción -cluster), el programa simul_data generará también los archivos necesarios de forma automática para lanzar las simulaciones en paralelo (.sh/.job/.dag), así como otros con mensajes y/o errores (.out/.err/.log). Estos últimos se generarán en un subdirectorio 10 simul_data Manual de usuario del directorio actual o directorio de trabajo, llamado: ./condor1, ./condor2, o ./condor3, dependiendo del método empleado para lanzar los trabajos (1-3). Para más detalles sobre los archivos generados para el cluster ver el manual de simul_run. 3.4. Ejemplos Los siguientes ejemplos muestran cómo utilizar el programa. En resumen, los mismos ejemplos mostrados en el manual ov2txt se pueden aplicar aquíi, ya que la mayoríia de los argumentos pasados desde líinea de órdenes son los mismos. Sólo cuatro argumentos son nuevos a simul_data: -first, -last, -dont_run, and -cluster. Como podemos comprobar, estos argumentos están relacionados con el número de veces (intervalo) que se invocará a ov2txt para extraer datos de cada simulación dentro de una secuencia de simulaciones, así como para especificar si se utilizará o no un cluster Condor. El resto de argumentos (-m, -w, -i, -o, -q, -v, -f, -x, -s) se pasarán a ov2txt en cada invocación tal cual. Para más detalles y ejemplos relacionados con estas opciones ver el manual de ov2txt. En este primer ejemplo se extraen los datos de todas las simulaciones ejecutadas utilizando el modelo mymodel.nt.m. Los archivos resultantes de estas simulaciones son unos archivos .ov generados por simul_run (en realidad por op_runsim), los cuales fueron almacenados en un subdirectorio relativo al directorio actual llamado ./results. Notar que la extensión .ov no se debe especificar. Por defecto, los archivos .ov que finalmente se utilizarán se determina buscando en la lista de directorios especificados en la preferencia mod_dirs de OPNET Modeler, exactamente en el mismo orden en que aparezcan. Sin embargo, podemos forzar el directorio a utilizar mediante la opción -i, y sin la necesidad de modificar dicha preferencia. simul_data -m mymodel -i ./results -x 1,2,3 -f rh En el ejemplo anterior, se asume el argumento -first 1, es decir, que el proceso comenzará extrayendo datos desde el archivo llamado mymodel-DES-001.ov. Por otra parte, como la opción -last no se ha especificado, el proceso continuará hasta el último fichero mymodel-DES-xxx.ov que se encuentre, donde xxx=001,002,. . . En todos los casos, sólo se extraerán las tres primeras estadísticas almacenadas, y el formato a utilizarse para el archivo de salida será válido para ser procesado por el paquete estadístico R, incluyéndose una línea de cabecera al principio del archivo con los nombres de esas estadísticas. Si necesitásemos extraer datos únicamente para un rango de las simulaciones (o una simulación específica), podemos ejecutar el programa ov2txt de forma manual, o especificar los argumentos -first y -last al programa simul_data, como se muestra en el siguiente ejemplo: simul_data -m mymodel -i ./results -first 5 -last 6 -x 1,2,3 -f rh De esta forma, sólo se extraeráan datos de dos archivos (mymodel-DES-005.ov y mymodel-DES-006.ov). Alternativamente, como habíamos dicho antes, podemos ejecutar manualmente el programa ov2txt, dos veces en este caso: 11 simul_data ov2txt -m mymodel-DES-005 ov2txt -m mymodel-DES-006 Manual de usuario -i ./results -i ./results -x 1,2,3 -x 1,2,3 -f rh -f rh En caso de tener un gran número de simulaciones, se recomienda ejecutar el programa en un cluster Condor con múltiples procesadores, en caso de que esté diponible. El programa simul_data permite hacer uso del cluster de forma automática tan sólo especificando la opción -cluster con los argumentos adecuados, sin que el usuario necesite tener conocimientos sobre cómo lanzar procesos en un cluster. Los argumentos que recibe esta opción son el número de procesadores disponibles (número máximo de instancias de ov2txt a ejecutar de forma simultánea), y el método utilizado para lanzar jobs (ver el manual de simul_run para más detalles). simul_data -m mymodel -i ./results -x 1,2,3 -first 1 -last 500 -cluster 100 3 -f rh En este ejemplo, se extraerán datos de 500 archivos .ov, pero no de forma secuencial sino en paralelo ejecutando hasta 100 instancias del programa ov2txt simultáneamente (o hasta el número de procesadores disponibles). Para ello, el usuario no necesita saber nada sobre cómo lanzar trabajos (jobs) en el cluster, ya que todos los archivos necesarios para ello (.job/.dag/.sh/. . . ) se generan de forma automática en un subdirectorio llamado: ./condor1, ./condor2, o ./condor3, dependiendo del método utilizado para lanzar los trabajos (1-3). Finalmente, podría ser de utilidad la opción -dont_run, especialmente cuando se utiliza un cluster por primera vez. En ese caso, los ficheros necesarios para el cluster Condor se generan pero no se ejecutan, permitiendo al usuario comprobar su contenido antes de lanzarlos finalmente, o incluso modificar algo y lanzarlos de forma manual sin el programa simul_data. 12 Bibliografía [1] R Development Core Team. R: A language and environment for statistical computing. ISBN 3-900051-07-0, 2007. [2] The Condor Team. Condor. 13