HTTPS SSH
**..:[ Benchmark benchDBI ]:..**
==================================

 Este software es un benchmarch para evaluar frameworks de DBI. 
 Actualmente se ha usado para la evaluación de:
- PIN
- DynamoRIO
- Valgrind

Las aplicaciones que componen el benchmark son las siguientes:
-bzip2 
	bzip2-1.0.6.tar.gz
-GNU go 
	gnugo-3.8.tar.gz
-hmmer 
	hmmer-3.1b1.tar.gz
-libquantum 
	libquantum-1.1.1.tar.gz
-h264ref 
	jm18.5.zip
-ripemd 
	ripemd1.1.tar.gz
-aes
	aescrypt-3.0.9.tgz
-memtester 
	memtester-4.3.0.tar.gz
-ffmpeg 
	ffmpeg-2.0.1.tar.gz
-milc 
	milc_qcd-7.7.8.1.tar.gz
-povray 
	povray-3.6.tar.gz
-mlucas 
	Mlucas_12.09.2012.tgz
-namd 
	NAMD_2.9_Source.tar.gz
-linpack 
	1000d.f


Para la comparativa, se usan dos niveles de instrumentación diferentes: a nivel
de instrucción y a nivel de bloque básico/superbloque. Los binarios de las
aplicaciones del benchmark que se proporcionan han sido compilado con dos
optimizaciones diferentes, concretamente -O0 y -O3. También se proporciona el
código fuente de dos herramientas DBAs que usan estos dos tipos de
instrumentación, para cada framework de DBI considerado inicialmente (Pin,
Valgrind y DynamoRIO).


El benchmark puede funcionar en arquitecturas x86 y x64. Para ello tienen que
estar todos los ejecutables de las aplicaciones y de las DBAs compilados en
la misma arquitectura.

# Instalación
==============

Simplemente hay que descomprimir el fichero sobre el directorio que en el que
se quiere realizar el benchmark

$ tar xvfz benchDBI.X.YZ.tgz

donde X, Y, Z corresponden al número de versión del benchmark.


# Configuración
==============

Previamente a la ejecución del benchmark, es necesario que estén instalados, al
menos, los frameworks de DBI PIN, Valgrind y DynamoRIO. Los ejecutables de
de estos frameworks DBI deben de estar en la variable $PATH del sistema.

Además, en el fichero benchDBI.cfg hay que indicar la ruta donde está
instalado DynamoRIO. Ejemplo:
export ROOT_DR=/opt/DynamoRIO-Linux-4.1.0-8

Para el correcto funcionamiento de Valgrind, hay que copiar los siguientes
ficheros del directorio ./DBAs/valgrind/
- bbcount-amd64-linux  
- inscount-amd64-linux 

a los dos directorios siguientes:
- /usr/local/lib/valgrind/
- /usr/lib64/valgrind/

(en caso de que Valgrind se encuentre instalado y configurado en otros
directorios, estos pueden variar)

# Ejemplo de uso
=================
 
Se ejecuta con el script principal sin argumentos
$ ./benchDBI.sh 

Al final de la ejecución genera un fichero llamado "salida.XXXXX.csv" en el directorio
de las aplicciones apps. Con este fichero se pueden generar una serie de graficas usando el script:

$ ./graficas.sh apps/salida.XXXXX.csv



Formato del fichero de salida
=============================

El fichero "salida.XXXXX.csv" que se genera tiene un formato de campos
separado por puntos y coma. Estos son los campos:
- (1) Tiempo real de ejecucion en formato HH:MM:SS.DD
- (2) Tiempo real de ejecucion en formato SSSSS.DD
- (3) Tiempo de ejecucion en modo kernel
- (4) Tiempo de ejecucion en modo de usuario 
- (5) Fallos de pagina
- (6) Numero de veces que el programa a paginado a disco
- (7) Memoria usada por el proceso en Kilobytes segun /usr/bin/tim
- (8) Media del resident set size del proceso en Kilobytes segun /usr/bin/time
- (9) Linea de comando usada
- (10) Memoria usada por el proceso en Kilobytes segun monitorizacion propia.
- (11) Numero de instrucciones o bloques basicos ejecutados

Ejemplo de linea del fichero csv:
38:13.37;2293.37;43.05;2294.83;0;0;0;0;101%;valgrind --tool=bbcount hmmer.O3 allPK.hmm sprot41.dat;480432;112853638775


# Restricciones
================

Esta versión del benchmark es para Linux x64. Los ejecutables de las
aplicaciones están compilados tambien para esta arquitectura.

El framework de DBI más restrictivo respecto al Sistema Operativo donde se
puede hacer uso es PIN, que para la versión con número de compilación 61206 de
fecha 12 de septiembre de 2013 son estas:

- Funciona en todas las arquitecturas Intel(R) 64.
- PIN no ha sido completamente probado en procesadores no Intel, por lo que es
posible que haya algun funcionamiento incorrecto.
- Configuraciones de Linux comprobadas:

        +---------------------------------+----+-------+
        | OS                              |IA32|Intel64|
        +---------------------------------+----+-------+
        | Wind River Linux 4.0            | +  |       |
        | Red Hat Enterprise Linux 4      | +  |   +   |
        | Red Hat Enterprise Linux 5      | +  |   +   |
        | Red Hat Enterprise Linux 6      |    |   +   |
        | Red Hat Fedora 17               |    |   +   |
        | Red Hat Fedora 18               | +  |   +   |
        | SuSE Linux Enterprise Server 10 |    |   +   |
        | SuSE Linux Enterprise Server 11 | +  |   +   |
        | openSUSE 12.3                   | +  |       |
        | Ubuntu 10.04                    |    |   +   |
        | Ubuntu 12.04                    |    |   +   |
        | Ubuntu 13.04                    | +  |   +   |
        +---------------------------------+----+-------+

# Ficheros de configuración
============================

Hay dos tipos de ficheros de configuración:
- benchDBI.cfg: Configuración del benchmark
- benchDBI.dir.cfg: Configuración de cada una de las aplicaciones a instrumentar.

Variables en el fichero benchDBI.cfg configurables por el usuario
- LOG: Fichero de log de la ejecución del benchmark
- FR_DBI: Frameworks de DBI a probar, por defecto "drrun pin Valgrind". Se puede
configurar el benchmark para menos (o más) frameworks
- NUM_PRUEBAS: Número de veces que se quiere que se repita la ejecución de una 
aplicación, por defecto "1 2 3".
- PRUEBAS_BENCH: Contiene el listado de los directorios donde estan las
aplicaciones a ser ejecutadas, por defecto "gnugo povray linpack namd milc
ffmpeg memtester whirlpool aes h264ref libquantum hmmer bzip2". Se puede hacer
configurar el benchmark para menos (o más) aplicaciones.

Variables en el fichero benchDBI.dir.cfg modificables por el usuario
- EJECUTABLE: Nombre raíz del fichero a ejecutar. Tiene que haber uno por cada
optimización
- FICH_PRUEBA: Parámetro que indica el fichero de carga
- PARAM_PRE: Parámetros que van antes de FICH_PRUEBA 
- PARAM_POST: Parámetros que van después de FICH_PRUEBA 


# Compilación de los DBAs
==========================

Para que las DBAs sean independientes de la versión de los frameworks de DBI
sobre las que se van a compilar no se ofrece un fichero Makefile, sino un
procedimiento de cómo hacer la compilación. Puede que un fichero Makefile no sea
compatible de una versión a otra.

PIN
---

Un posible método de compilación es usar los propios ficheros Makefile de los
ejemplos. Así, para compilarlas hay que copiar los ficheros cpp del directorio
DBAs/pin al directorio source/tools/ManualExamples dentro de la instalación de
PIN. Después se edita el fichero Makefile.rules y se añade "bbcuenta icuenta" a
la variable TEST_TOOL_ROOTS. Finalmente con make se compilan y dejan el
resultado en el subdirectorio obj-intel64, si se ha compilado en un sistema de
arquitectura 64 bit, o en obj-ia32 para 32 bit.


DynamoRIO
---------

Para compilarlas hay que copiar los ficheros c del directorio DBAs/dynamorio al
directorio samples dentro de la instalación de DynamoRIO. Después se edita el
fichero CMakeLists.txt añadiendo las siguientes líneas:
add_sample_client(icuenta     "icuenta.c"        "")
add_sample_client(bbcuenta    "bbcuenta.c"       "")

Después se ejecuta cmake CMakeLists.txt y con make se compilan. El resultado se queda
en el subdirectorio samples/bin


Valgrind
--------

Todo que viene a continuación es relativo al directorio donde se haya instalado
Valgrind

1. Crea los directorios icuenta/, icuenta/docs/, icuenta/tests/, bbcuenta/, bbcuenta/docs/, bbcuenta/tests/.
2. Crea los siguientes ficheros vacios 	icuenta/docs/Makefile.am, icuenta/tests/Makefile.am, bbcuenta/docs/Makefile.am y bbcuenta/tests/Makefile.am
3. Copia el fichero none/Makefile.am a icuenta/. Reemplaza las ocurrencias de "none" por "icuenta" y las de "nl_" por "ic".
4. Copia el fichero none/Makefile.am a bbcuenta/. Reemplaza las ocurrencias de "none" por "bbcuenta" y las de "nl_" por "bb"
5. Copia ic_main.c a icuenta/, copia bb_main a bbcuenta/
6. Edita Makefile.am, añadiendo los nuevos directorios icuenta y bbcuenta a las variables TOOLS o EXP_TOOLS
7. Edita configure.in añadiento icuenta/Makefile, icuenta/docs/Makefile y icuenta/tests/Make file a la lista AC_CONFIG_FILES
8. Edita configure.in añadiento bbcuenta/Makefile, bbcuenta/docs/Makefile y bbcuenta/tests/Make file a la lista AC_CONFIG_FILES
9. Ejecuta 

  autogen.sh
  ./configure --prefix=`pwd`
  make install

  Entonces se debería de compilar todo y quedar copias de las librerías en
icuenta y bbcuenta. Las librerías de 32 bit se instalarán en /usr/lib/valgrind
y las de 64 bit en /usr/lib64/valgrind

Licencias
=========

Se recomienda visitar la página web de cada aplicación incluida en este benchmark para visualizar su licencia. benchDBI se distribuye con licencia GNU GPL v3. Esto incluye a las herramientas DBAs para cada framework DBI (Pin, Valgrind y DynamoRIO) así como los scripts de ejecución, monitorización y visualización de gráficas de resultados.