2 research outputs found
Profiling tools for Java
Dissertação de mestrado integrado em Informatics EngineeringAtualmente, Java é uma das linguagens de programação mais populares. Esta popularidade é parcialmente
devida à sua portabilidade que advém do facto do código Java ser compilado para bytecode que poderá ser
executado por uma máquina virtual Java (JVM) compatível em qualquer sistema. A JVM pode depois interpretar diretamente ou compilar para código máquina a aplicação Java. No entanto, esta execução sobre uma máquina virtual cria alguns obstáculos à obtenção do perfil de execução de aplicações.
Perfis de execução são valiosos para quem procura compreender o comportamento de uma aplicação pela
recolha de métricas sobre a sua execução. A obtenção de perfis corretos é importante, mas a sua obtenção e
análise pode ser desafiante, particularmente para aplicações paralelas.
Esta dissertação sugere um fluxo de trabalho de otimização a aplicar na procura de aumentos na escalabilidade de aplicações Java paralelas. Este fluxo sugerido foi concebido para facilitar a descoberta dos problemas
de desempenho que afetam uma dada aplicação paralela e sugerir ações a tomar para os investigar a fundo.
O fluxo de trabalho utiliza a noção de possible speedups para quantificar o impacto de problemas de desempenho diferentes. A ideia de possible speedups passa por estimar o speedup que uma aplicação poderia
atingir se um problema de desempenho específico fosse completamente removido. Esta estimativa é calculada
utilizando as métricas recolhidas durante uma análise ao perfil de uma aplicação paralela e de uma versão
sequencial da mesma aplicação.
O conjunto de problemas de desempenho considerados incluem o desequilíbrio da carga de trabalho, sobre carga de paralelismo devido ao aumento no número de instruções executadas, sobrecarga de sincronização,
gargalos de desempenho no acesso à memória e a fração de trabalho sequencial. Estes problemas foram considerados as causas mais comuns de limitações à escalabilidade de aplicações paralelas. Para investigar mais a
fundo o efeito destes problemas numa aplicação paralela, são sugeridos alguns modos de visualização do perfil
de execução de uma aplicação dependendo do problema que mais limita a sua escalabilidade. As visualizações
sugeridas consistem maioritariamente de diferentes tipos de flame graphs do perfil de uma aplicação.
Duas ferramentas foram desenvolvidas para ajudar a aplicar este fluxo de trabalho na otimização de aplicações Java paralelas. Uma destas ferramentas utiliza o async-profiler para recolher perfis de execução de
uma dada aplicação Java. A outra ferramenta utiliza os perfis recolhidos pela primeira ferramenta para estimar
possible speedups e produzir todas as visualizações mencionadas no fluxo de trabalho sugerido.
Por fim, o fluxo de trabalho foi validado com alguns casos de estudo. O caso de estudo principal consistiu
na otimização iterativa de um algoritmo K-means, partindo de uma implementação sequencial e resultando no
aumento gradual da escalabilidade da aplicação. Casos de estudo adicionais também foram apresentados para
ilustrar possibilidades não abordadas no caso de estudo principal.Java is currently one of the most popular programming languages. This popularity is, in part, due to the portability
it offers which comes from the fact that Java source code is compiled into bytecode which can be executed by a
compatible Java Virtual Machine (JVM) in a different system. The JVM can then directly interpret or compile into
machine code the Java application. However, this execution on top of a virtual machine creates some obstacles
to developers looking to profile their applications.
Profilers are precious tools for developers who seek to understand an application’s behaviour by collecting
metrics about its execution. Obtaining accurate profiles of an application is important, but they can also be
challenging to obtain and to analyse, particularly for parallel applications.
This dissertation suggests an optimisation workflow to employ in the pursuit of reducing scalability bottlenecks
of parallel Java applications. The workflow is designed to simplify the discovery of the performance problems
affecting a given parallel application and suggest possible actions to investigate them further.
The suggested workflow relies on possible speedups to quantify the impact of different performance problems.
The idea of possible speedups is to estimate the speedup an application could achieve if a specific performance
problem were to completely disappear. This estimation is performed using metrics collected during the profile of
the parallel application and its sequential version.
The set of performance problems considered include workload imbalance, parallelism overhead due to an
increase in the number of instructions, synchronisation overhead, memory bottlenecks and the fraction of se quential workloads. These were deemed to be the most common causes for scalability issues in parallel appli cations. To further investigate the effect of these problems on a parallel application, some visualisations of the
application’s behaviour are suggested depending on which problem limits scalability the most. The suggested
visualisations mostly consist of different flame graphs of the application’s profile.
Two tools were also developed to help in the application of this optimisation workflow for parallel Java appli cations. One of these tools relies on async-profiler to collect profiles of a given Java application. The other tool
uses the profiles collected by the first tool to estimate possible speedups and also produce all visualisations
mentioned in the suggested workflow.
Finally, the workflow was validated on multiple case studies. The main case study was the iterative optimisation
of a K-means algorithm, starting from a sequential implementation and resulting in the gradual increase of the
application’s scalability. Additional case studies were also presented in order to highlight additional paths not
covered in the main case study