QUATRIX
QUATRIX
Quantitative Analysis Tools for Resource-Intensive Constrained Systems
Funded by MINCyT-INRIA-CNRS grant
Philippe Clauss, Université de Strasbourg
Sergio Yovine, Universidad de Buenos Aires
Objetivos
El interés de este proyecto está en la generación de nuevo conocimiento y herramientas para la inferencia automática de propiedades cuantitativas sobre programas desarrollados en lenguajes imperativos, con orientación a objetos y concurrencia. Conocer este tipo de propiedades permite calcular de antemano los recursos (e.g., memoria dinámica, tamaño de buffers de comunicación) necesarios para desplegar una aplicación sobre una plataforma de ejecución para que pueda ejecutarse sin errores (e.g., out-of-memory, buffer overflow). También permite comparar diferentes implementaciones de la misma especificación funcional de acuerdo a criterios de calidad cuantitativos tales como performance, consumo de memoria, costo de comunicaciones, etc.
Particularmente nos interesa obtener información sobre el consumo de memoria dinámica de programas concurrentes. Este interés se debe a diversas razones.
El desafío de cuantificar el uso de memoria dinámica en programas orientados a objeto concurrentes (como Java, C++ y C#) es doble. Primero, a diferencia de otro tipo de propiedades cuantitativas (por ejemplo: tiempo de ejecución), el consumo de memoria evoluciona de forma no monótona con respecto al tiempo (dado que cierta porción de la memoria puede ser liberada durante la ejecución por el gargabe collector) por lo que su análisis es más complejo. Segundo, la combinación de memoria dinámica con concurrencia es explosiva en cuanto a la complejidad de las técnicas de análisis. Por eso, si bien ya hubo algunos resultados teóricos y prácticos para producir estimaciones de consumo de memoria dinámica, los mismos no son escalables ni usables por una persona inexperta. Es decir, su aplicación está limitada a programas relativamente simples y/o su uso en software complejo es penoso. Por otro lado, no conocemos ninguna técnica de análisis cuantitativo de programas concurrentes.
El objetivo de este plan de trabajo es concebir un conjunto de técnicas de análisis estático (del código fuente) y dinámico (de las ejecuciones) de software concurrente orientado a objetos, que sean escalables y usables, y que permitan la obtención de requisitos cuantitatvos precisos de consumo de memoria. Estas técnicas deben poder soportar aplicaciones de un tamaño mediano a grande. En particular, para la validación experimental de los resultados, pensamos utilizar las mismas para analizar el software de código abierto y libre de derechos Ginga, usado como plataforma middleware de los decodificadores para la Televisión Digital Interactiva de la norma adoptada por el Sistema Argentino de Televisión Digital Terrestre (SATVD-T). Las técnicas que desarrollaremos deben poder ser integrables a las herramientas de desarrollo. Esta integración debe permitir a los programadores la interacción con las técnicas analizando su resultado e incorporando información que permita mejorarlos de manera incremental.
Resultados esperados
Una de las principales debilidades de las técnicas actuales radica en su incapacidad de operar de forma composicional. Este problema obliga a que las técnicas resultantes deban operar con un estado global (por ejemplo requiriendo conocer todas las variables que aparecen en el stack) imposibilitando la escalabilidad. Por otro lado los análisis globales no permiten razonar de forma local ni explotar conocimiento del dominio para proveer anotaciones con información relevante (invariantes locales, consumo de métodos, tiempo de vida de los objetos). El otro problema reside en la falta de precisión de las técnicas basadas en un análisis estático del código fuente.
Para lograr el objetivo propuesto de escalabilidad y usabilidad es necesario desarrollar técnicas modulares de inferencia, que sean capaces de soportar código más complejo en términos de estructuras de datos, tamaño y estructuras de control. Esto implica atacar varios problemas no triviales: diseño de un lengua je de especificación, mecanismos de chequeo e inferencia por análisis estático (de código) y dinámico (de las ejecuciones) de anotaciones de consumo y tiempo de vida de los objetos, y desarrollo de un prototipo de un toolsuite que permita la integración de estas técnicas a un ambiente de programación.
Los resultados esperados son los siguientes.
Investigadores
Argentina
Sergio Yovine, Coordinador
Diego Garbervetsky, Profesor
Gervasio Pérez, Doctorando
Luis Mastrangelo, Tesista de licenciatura
Francia
Philippe Clauss, Coordinador
Alain Ketterlin, Profesor
Vincent Loechner, Profesor
Alexandra Jamborean, Doctorando
Benoit Pradelle, Doctorando