• No results found

The Creation of Credit

Part I Introduction

4.3 The Creation of Credit

Estamos especialmente interesados en el nivel de código fuente de alto nivel ya que nues- tro enfoque apunta a mejorar el consumo de energía a través de la refactorización de có- digo. En esta línea, Sahin et al. [2012] comienza la evaluación en el desarrollo de alto nivel ya que evalúa el consumo de energía de los patrones de diseño en servidores. En Sahin et al. [2012], los autores crearon una nueva herramienta para medir el consumo de ener- gía de una aplicación en ejecución y para generar el mapeo entre el uso de energía y los patrones de diseño. Para mapear patrones de diseño y consumo de energía los autores seleccionaron 15 patrones de diseño, 5 en cada una de las tres categorías: creacional, es- tructural y conductual. Utilizando estos patrones de diseño, los autores concluyeron que el uso de patrones de diseño puede aumentar y disminuir la cantidad de energía consu- mida. Sin embargo, los patrones de diseño dentro de una categoría no afectan el uso de energía de manera similar, y los impactos en el uso de energía no pueden ser estimados artefactos de este nivel.

Con respecto al diseño detallado de la aplicación, Dhaka and Singh [2016] estudia hasta qué punto la corrección de un diseño incorrecto afecta el consumo de energía en función

4http://www.appbrain.com/stats/libraries/details/support_lib/android-support-library

de Code Smells. La investigación muestra que las permutaciones de eliminación de Code Smells producen diferentes niveles de consumo de energía para las versiones de softwa- re resultantes. Dhaka and Singh [2016] analiza el impacto sobre el consumo de energía de la eliminación de tres de los Code Smells más comunes (God Class, Feature Envy y Brain Method), individualmente y secuencialmente. Los resultados muestran tendencias uniformes de energía en todas las aplicaciones cuando se crean versiones refactorizadas eliminando estos Code Smells. También se observa que las versiones refactorizadas gene- radas aplicando God Class, Feature Envy y Brain Method generan un consumo mínimo de energía en comparación con las generadas al aplicar otras secuencias. Debemos des- tacar que el código correcto genera una nueva versión que consume más energía que la versión original. Esto significa que Dhaka and Singh [2016] propone la mejor secuencia para generar el mejor código y consumir la menor cantidad de energía posible, siempre priorizando el diseño sobre el consumo de energía.

En este contexto, hay trabajos que miden, controlan y comparan el consumo de energía de lenguajes, bibliotecas, aplicaciones y algoritmos específicos. Noureddine et al. [2012] pre- senta la arquitectura POWERAPI que, junto con los módulos de energía, permite a los desarrolladores calcular el consumo de energía de procesos y aplicaciones. Los primeros resultados muestran en tiempo de ejecución el consumo de energía de aplicaciones y al- goritmos. Algunos resultados indican que Java, usando las opciones predeterminadas, es bastante eficiente en términos de energía en comparación con otros lenguajes de progra- mación. Los autores también infieren que la eficiencia energética del lenguaje Pascal está en el mismo nivel que C o C++. Sin embargo, otros resultados son más interesantes: Perl es el lenguaje que consume más energía, OCaml es el segundo, luego Python y finalmente Prolog.

Trabajos más específicos evalúan el uso de prácticas comunes al desarrollar aplicaciones. Por ejemplo, Procaccianti et al. [2016] evalúa dos prácticas para el desarrollo de software energéticamente eficiente: el uso de consultas eficientes y poner la aplicación en reposo. Por un lado, la limitación de la utilización de mecanismos de indexación u operaciones de ordenamiento innecesarias (uso de palabras clave ORDER BY) puede aumentar el consu- mo de energía de nuestras consultas. Por otro lado, un uso adecuado de la función Sleep permite que la aplicación reduzca el uso de la CPU y mejore su eficiencia energética. En general, los resultados muestran un impacto significativo y consistente de ambas prác- ticas sobre el aumento de la eficiencia energética de las materias seleccionadas: Apache WebServer y MySQL Database Server.

Otros trabajos interesantes estudian el uso de diferentes estructuras de datos y coleccio- nes. Primero, Hasan et al. [2016] evalúa el consumo de energía de operaciones comunes realizadas en colecciones como Java List, Map y Set (por ejemplo, inserción, iteración, acceso aleatorio). Los resultados muestran que los tipos de datos alternativos para estas abstracciones difieren significativamente en términos de consumo de energía dependien- do de las operaciones. Los autores encontraron que elegir el tipo de colecciones incorrecto puede consumir 300% más de energía que la colección más eficiente. En segundo lugar,

Manotas et al. [2014] describe un soporte automatizado para optimizar el uso de energía de las aplicaciones mediante refactorings a nivel de código. Manotas et al. [2014] afirma que las muchas capas de abstracción en las aplicaciones y las interacciones entre hard- ware y software sugieren que es difícil predecir cómo los refactorings afectan el consumo de energía, que de hecho es nuestro objetivo en esta tesis para el caso de HPC en CPU. En consecuencia, Manotas et al. [2014] propone un framework que automáticamente a) genera versiones diferentes del mismo código combinando todas las instancias de colec- ciones, b) realiza ejecuciones supervisadas por energía de todas las versiones generadas, c) analiza los resultados, y d) genera una versión optimizada del original código. Sin embargo, el principal problema de este trabajo de investigación es que la recopilación y el procesamiento de muestras de energía puede tomar muchas horas dependiendo del tiempo de ejecución de la serie de pruebas, el número de repeticiones y el espacio de investigación.

3.4.

Resumen

Los trabajos discutidos en este capítulo contribuyen a la introducción de dispositivos mó- viles en entornos computacionales como Grids y Clouds, tradicionalmente compuestos de PC y servidores. En la Sección 3.1 presentamos y analizamos diferentes trabajos cuyo objetivo principal es ofrecer técnicas de Offloading de aplicaciones para ejecutar aplica- ciones intensivas en dispositivos móviles. El uso de Offloading presenta varias ventajas: primero, los usuarios pueden usar sus dispositivos como computadoras que ejecutan aplicaciones de recursos intensivos, mejorando el tiempo de ejecución de la aplicación, la latencia o el consumo de energía; segundo, los científicos pueden aprovechar los sensores y otros recursos en áreas remotas procesando datos en servidores. La principal limitación en esta área es que el procesamiento adicional necesario para determinar qué tareas son candidatas a ser descargadas y cuál de estas tareas debe descargarse agrega tiempo adi- cional de ejecución y consumo de energía. Además, varios enfoques necesitan conocer algunos parámetros, como los recursos necesarios para una tarea o la energía consumida por una tarea para tomar decisiones, pero estos parámetros generalmente son desconoci- dos.

En la Sección siguiente (Sección 3.2) se presentaron diferentes enfoques para programar tareas en Grid móviles. Este tipo de trabajos es una contribución importante para la co- munidad científica, ya que hay miles de millones de dispositivos móviles en todo el mun- do, lo que genera un increíble poder de cómputo. Luego, al enviar tareas pequeñas a dispositivos móviles los científicos pueden ejecutar aplicaciones HPC sin la necesidad de supercomputadoras costosas. Sin embargo, la mayoría de los trabajos en schedulers distribuidos para áreas de dispositivos móviles son adaptaciones de trabajos anteriores realizados para dispositivos fijos. Entonces, estas adaptaciones presentan numerosas li- mitaciones y no consideran las peculiaridades del nuevo entorno relacionado con la falta de fiabilidad de la conexión de los dispositivos móviles a la red, la cantidad limitada de recursos disponibles y el suministro limitado de energía.

Finalmente, la Sección 3.3 muestra varias buenas prácticas para desarrollar aplicaciones móviles. En esa Sección hay numerosos enfoques que investigan cómo reducir el consu-

mo de energía en dispositivos móviles (benchmarking, Code Smells, navegadores web, entre otros). Además, la reducción de energía se puede realizar a nivel de aplicación, ni- vel del sistema operativo y nivel de hardware. Sin embargo, todos estos estudios pueden aplicarse para complementar cualquiera de los otros enfoques presentados anteriormen- te. Esto significa que, teniendo en cuenta estas pautas y las buenas prácticas los desarro- lladores pueden mejorar las técnicas de Offloading o las tácticas del Scheduler además del código de la aplicación. Por ejemplo, al adaptar los sistemas HPC para que sean ami- gables con la energía se puede mejorar la capacidad de un Grid, ejecutando así más tareas con los mismos recursos. Además, saber qué operaciones consumen más energía puede ser esencial para decidir si una tarea se ejecutará en un dispositivo móvil o fijo.

Además, varios intentos centrados en mejorar el consumo de energía de las aplicaciones móviles se detallan en la Sección 3.3. Estos trabajos cubren varios temas y niveles (aplica- ción, sistema operativo, hardware) que muestran la amplitud del área. Las aplicaciones móviles se pueden mejorar teniendo en cuenta el uso de recursos (CPU, RAM, panta- lla, etc.), el uso de la red, las funciones de red o los formatos de representación de los diferentes elementos de la aplicación (imágenes, estilos, etc.). Como resultado, este inci- piente área de investigación es extensa y, como tal, presenta interesantes líneas abiertas de investigación. Como mencionamos anteriormente, las evaluaciones que se muestran en la Sección 3.3 pueden ser útiles para tareas tan diversas como desarrollar aplicaciones móviles, tomar decisiones en entornos computacionales, evaluar el impacto potencial de una aplicación en un entorno de dispositivo móvil, entre otros.

Particularmente, la documentación operativa de Android tiene pautas para desarrollar aplicaciones eficientes para dispositivos móviles, que cubre operaciones comunes tales como getters/setters, loops y tipos de datos. De la misma manera, diferentes autores evalúan el tiempo de ejecución y la mejora energética de la refactorización de algunas malas prácticas bien conocidas llamadas Code Smellss. Sin embargo, estos trabajos tie- nen algunas limitaciones: el primer trabajo solo se evalúa para las microoperaciones en sí; luego, el impacto de aplicar estas pautas en aplicaciones reales no se evalúa; y, el se- gundo no tiene evaluación experimental. Por otro lado, Thiagarajan et al. [2012] evalúa el consumo de energía de los diferentes elementos de una página web individualmente y su impacto en una página web real. Utilizando esa información, los desarrolladores pueden evaluar diferentes intercambios de la aplicación de la guia propuesta. Aunque Thiagara- jan et al. [2012] analiza el impacto de su enfoque en entornos reales, no puede emplearse para el desarrollo de aplicaciones móviles de propósito general, lo cual es una limitación significativa.

Otra área de investigación es HPC con dispositivos móviles. En esta área, una serie de investigaciones evalúa el tiempo de ejecución o el consumo de energía. Una cantidad considerable de trabajos evaluan el tiempo de ejecución de benchmarks conocidos y ope-

raciones de HPC, comparan diferentes lenguajes, pero ninguna evaluación hace experi- mentos para evaluar las mejoras en aplicaciones reales. Por lo tanto, los desarrolladores no pueden aprovechar efectivamente estos resultados al desarrollar aplicaciones. Final- mente, en este contexto, una conclusión es que la mejora energética de diferentes micro- benchmarks, que son parte de núcleos de aplicaciones científicas, junto con su impacto en aplicaciones reales es un área inexplorada. Además, el análisis de refactorización se puede complementar con un análisis de los trade-off de aplicar la refactorización en el diseño de la aplicación contra el esfuerzo del desarrollador para aplicarlas. Además, co- mo resultado secundario, se puede evaluar el impacto en el tiempo de ejecución, ya que el consumo de energía y la ejecución del tiempo no tienen una relación lineal Rodriguez et al. [2016a], Pinto et al. [2014].

Finalmente, este trabajo señala que varios problemas siguen abiertos. Por lo tanto, el uso de dispositivos móviles como parte de un entorno distribuido, teniendo en cuenta el dise- ño y las mejoras del código para mejorar el rendimiento y el consumo de energía, puede aumentar significativamente la cantidad de recursos disponibles. Como resultado, mejo- rar estas tres áreas principales diferentes (Offloading, schedulers distribuidos y modelos de desarrollo de software con eficiencia de energía) y combinarlas es un tema interesante tanto para la ciencia como para la industria.

Cap´ıtulo

4

Micro-benchmarks y aplicaciones

Basado en una de las principales limitaciones para el desarrollo de aplicaciones para dispositivos móviles, es decir, la capacidad limitada de las baterías, el objetivo princi- pal de esta tesis es evaluar el consumo de energía de operaciones comunes en aplica- ciones científicas para dispositivos móviles. Para minimizar el consumo de energía e, indirectamente, el consumo de otros recursos como CPU y RAM, esta tesis busca encon- trar la correspondencia entre las diferentes formas de implementar los mismos micro- benchmarks y su correspondiente consumo de energía. Después de presentar nuestros micro-benchmarks, discutimos el esfuerzo necesario para analizar y refactorizar los códi- gos fuente.

Luego, la frecuencia con la cual los grupos de micro-benchmarks analizados aparecen en aplicaciones reales puede verse en la Tabla 4.2, donde se estudian diferentes aplicacio- nes científicas teniendo en cuenta las diversas operaciones presentes en ellas. Además, se puede observar que estas aplicaciones son de gran importancia para la comunidad cientí- fica ya que la mayoría de ellas se encuentran en un repositorio de aplicaciones de Satin1, cuya utilidad se detallará en la Sección 4.2. Además, la Sección 4.1 explica el concepto de micro-benchmark y sus peculiaridades en Java -el lenguaje de programación de alto nivel de Android- y enumera y analiza cada grupo de micro-benchmarks seleccionados para este trabajo. Como corolario, presentamos cómo los micro-benchmarks evaluados también en aplicaciones científicas implementadas en servidores y qué aplicaciones re- presentativas del usuario final real son particularmente probadas.

1http://gforge.cs.vu.nl/gf/project/ibis/scmsvn/?action=browse&path=%2Fapps%