O documento descreve o Adaptive Optimization System (AOS) implementado na máquina virtual Java Jikes RVM. O AOS realiza otimizações seletivas identificando regiões de código quentes e direciona inlining com base em perfil de execução. O sistema coleta estatísticas em tempo de execução para guiar decisões de otimização de forma dinâmica e autônoma.
[Hind oopsla00] resumo do artigo "Adaptive Optimization in the Jikes RVM"
1. Jan 2012
Adaptive Optimization in the Jalapeño JVM
Matthew Arnold* Stephen Fink David Grove Michael Hind Peter F. Sweeney
IBM T.J. Watson Research Center *Rutgers University
{sjfink, groved, hindm, pfs} @ us.ibm.com marnold@cs.rugters.edu
Resumo realizado por Marcio Machado Pereira – RA 780681
• Nível 0 consiste principalmente num conjunto de
otimizações realizadas on-the-fly durante as transformações
I. INTRODUÇÃO dos bytecodes na representação intermediária. São elas,
N o artigo[1], os autores descrevem o projeto e
implementação de um mecanismo denominado
Adaptive Optimization System – AOS, na máquina virtual
constant, type, non-null e copy propagation; constant folding
e arithmetic simplification; unreachable code elimination;
elimination of redundant nullchecks; checkcasts e array store
Java Jikes RVM[2]. Trata-se de uma arquitetura geral e checks.
extensível que suporta otimizações mais agressivas, i.e., • Nível 1 incrementa o nível 0 com otimizações
otimizações que exploram informações coletadas em tempo locais adicionais como common subexpression elimination,
de execução. Os resultados experimentais demonstram que array bound check elimination e redundant load elimination.
estas otimizações trazem melhoras substancias no Este também adiciona inlining optimization baseado em
desempenho das aplicações quando comparadas com os heurísticas no tamanho estático, global flow-insensitive copy
métodos tradicionais Just-in-Time (JIT) e HotSpot. and constant propagation, global flow-insensitive dead
assignment elimination, string-buffer synchronization
Para um melhor entendimento do leitor, a seção 2 apresenta optimization, scalar replacement of aggregates and short
de forma sucinta as caracteristicas da máquina virtual arrays.
• Nível 2 incrementa o nível 1 com otimizações
utilizada, Jikes RVM. As seções seguintes descrevem a
sensíveis a fluxo baseadas no SSA (SSA-based flow-sensitive
arquitetura AOS bem como as técnicas empregadas de
optimization). Em adição às otimizações tradicionais de SSA
otimização seletiva (Selective Optimization) e a em variáveis escalares o sistema também usa uma versão
transformação “em linha” dirigida por profile (Profile- extendida de Array SSA para realizar redundant load
Directed Inlining). elimination e array bounds check elimination.
Jikes RVM multiplexa as threads Java em processadores
II. JIKES RVM virtuais JVM que são mapeados em pthreads no Sistema
O Jikes RVM emprega uma estratégia de “somente Operacional. O sistema suporta escalonamento das threads
compilação”, i.e., este compila todos os métodos para código num modelo de quase-preempção. Os compiladores geram
nativo antes de executá-los. Atualmente o sistema inclui dois pontos de cessão ou interrupção (yield points) que são pontos
compiladores completamente operacionais: no programa onde a thread que está em execução verifica um
bit dedicado no registro de controle da máquina para
• Baseline Compiler transforma os bytecodes em determinar se a mesma irá ceder o processador virtual. No
código nativo simulando uma pilha de operandos em Jikes RVM, os compiladores inserem estes pontos de cessão
Java. O compilador não realiza alocação de nas entradas e saída dos métodos e nos pontos de retorno de
registradores, portanto o código nativo gerado tem um laços (loop back edges). Usando um mecanismo de
desempenho somente um pouco melhor do que o interrupção de tempo, um tratador desta interrupção
código interpretado. (interrupt handler) periodicamente “liga” o bit em todos os
processadores virtuais. Quando a thread em execução alcança
• Optimizing Compiler [3] transforma os bytecodes em o próximo ponto de cessão, a verificação do bit irá resultar em
uma representação intermediária na qual este possa uma chamada ao escalonador.
realizar uma série de otimizações. O compilador usa
uma técnica de alocação de registradores eficiente e
efetiva conhecida por Linear Scan. III.ADAPTIVE OPTIMIZATION SYSTEM
A implementação do Jikes RVM AOS utiliza um número de
As otimizações são agrupadas em três níveis: threads Java: As threads Organizer, pertencentes ao
subsistema de medidas em tempo de execução (runtime
measurements component), a thread Controler, e as threads
do subsistema de compilação. As várias threads são
O trabalho em referência foi apresentado na conferência OOPSLA’00 fracamente acopladas, comunicando entre si através de filas
realizado na cidade de Minneapolis, MN, USA. O resumo é parte do trabalho de (queues) compartilhadas ou estruturas de dados em memória.
pesquisa de doutorado do Instituto de Computação da UNICAMP (IC-Unicamp)
e foi elaborado por Pereira, M. M. (e-mail: mpereira@ic.unicamp.br ). Todas as filas no sistema são filas com prioridade e
2. Jan 2012
bloqueantes. Se uma thread realiza uma operação de V. PROFILE-DIRECTED INLINING
consumo (dequeue) quando a fila estiver vazia, a thread é Profile-directed inlining procura identificar as arestas no
suspensa até que uma outra thread produza a informação grafo de chamadas (call graph), grafo este que representa as
desejada (i.e., realiza uma operação enqueue). relações chamador-chamado, e que são frequentemente
percorridas para determinar se há benefício em recompilar o
O sistema AOS executa duas tarefas principais: otimização método chamador para permitir que se realize a otimização
seletiva (Selective Optimization) e a transformação “em “em linha” (inlining optimization) dos métodos chamados.
linha” dirigida por profile (Profile-Directed Inlining).
O sistema coleta amostras estatísticas de chamadas de
métodos durante a execução da aplicação e mantém uma
IV. SELECTIVE OPTIMIZATION representação dinâmica aproximada do grafo de chamadas
O objetivo da otimização seletiva é identificar regiões de com base nestes dados. Para isto, o sistema instala um
código em que a aplicação gasta tempo significativo de listener que amostra as arestas de chamada (call edges) nos
execução (frequentemente chamado de HotSpot), determinar pontos de cessão (yield points) na entrada e saída dos
se o desempenho geral da aplicação irá melhorar se métodos. Na amostragem, o listener coleta o id dos métodos
otimizações forem aplicadas em um ou mais HotSpots e, se chamado e chamador, bem como o offset da instrução de
for o caso, compilá-los com as otimizações selecionadas e chamada no código do chamador. Quando o buffer estiver
instalar o código otimizado na máquina virtual (VM). cheio, a janela de amostragem termina.
No Jikes RVM, a unidade de otimização é o método. Então, O listener então “acorda” a thread Organizer para atualizar o
para realizar a otimização seletiva, o subsistema de medidas grafo dinâmico de chamadas com os novos dados coletados. O
em tempo de execução precisa identificar os métodos oráculo de otimização “em linha” faz uso então do grafo para
candidatos (Hot methods). Para isto, o subsistema instala um guiar suas decisões de otimização. Maiores detalhes são
listener que periodicamente amostra o método em execução encontradas em [4].
corrente nos pontos de interrupção da thread (yield points).
Os yield points ocorrem nas entradas e saídas dos métodos e
nas arestas de retorno dos laços (loop back edges). Quando VI. CONCLUSÕES
for o momento de coletar uma amostra o listener inspeciona a Este resumo teve como objetivo descrever a arquitetura do
pilha de chamada da thread (call stack) e grava a sistema AOS tão somente, porisso não foi apresentado a
identificação do método corrente. Se a interrupção ocorre no metodologia usada na experimentação bem como os
prólogo do método o listener adicionamente registra o resultados experimentais. Os autores demonstram no artigo
identificador do método chamador (caller method). que o sistema AOS introduz um overhead de menos de 10%
enquanto proporciona um desempenho total na aplicação
Quando o buffer de amostragem fica cheio, a janela de competitivo com as melhores estratégias comerciais
amostragem termina. O organizador de métodos quentes (Hot utilizadas. Além disso, pode-se observar que o sistema AOS
Methods Organizer) processa o buffer atualizando os dados provê uma infraestrutura flexível de tal forma que futuras
de amostragem dos métodos (Method Sample Data). Esta pesquisas possam ser realizadas no campo de otimizações
estrutura de dados mantém para cada método o número total online.
de vezes que este foi amostrado. Após atualizar a estrutura de
dados, a thread Organizer cria um evento para cada método VII. REFERENCIAS
que foi amostrado nesta janela e adiciona o mesmo na fila da [1] Matthew Arnold , Stephen Fink , David Grove , Michael Hind , Peter F.
thread Controller usando o valor de sua amostragem como Sweeney, Adaptive optimization in the Jalapeño JVM, Proceedings of the 15th
sua prioridade. ACM SIGPLAN conference on Object-oriented programming, systems,
languages, and applications, p.47-65, October 2000, Minneapolis, Minnesota,
United States.
Quando a fila com prioridades entrega um evento ao
Controller este consome o evento aplicando uma politica de [2] B. Alpern , C. R. Attanasio , J. J. Barton , M. G. Burke , P. Cheng , J.-D.
recompilação dirigida por modelo (model-driven Choi , A. Cocchi , S. J. Fink , D. Grove , M. Hind , S. F. Hummel , D. Lieber ,
recompilation policy) para determinar que ação (se for o V. Litvinov , M. F. Mergen , T. Ngo , J. R. Russell , V. Sarkar , M. J. Serrano ,
caso) deverá ser aplicada ao método indicado. Se o Controller J. C. Shepherd , S. E. Smith , V. C. Sreedhar , H. Srinivasan , J. Whaley, The
Jalapeño virtual machine, IBM Systems Journal, v.39 n.1, p.211-238, January
decidir por recompilar o método, este cria um evento de 2000.
recompilação descrevendo o método a ser compilado e o
plano de otimização que derverá ser usado e coloca-o na fila [3] Michael G. Burke , Jong-Deok Choi , Stephen Fink , David Grove , Michael
de recompilação. Esta fila prioriza os eventos baseado em Hind , Vivek Sarkar , Mauricio J. Serrano , V. C. Sreedhar , Harini Srinivasan ,
uma estimativa de custo-benefício da computação futura do John Whaley, The Jalapeño dynamic optimizing compiler for Java, Proceedings
of the ACM 1999 conference on Java Grande, p.129-141, June 12-14, 1999,
método. San Francisco, California, United States.
Quando um evento está disponível na fila de recompilação, a [4] M. Arnold, S. Fink, D. Grove, M. Hind, and P. F. Sweeney. Architecture and
thread de recompilação remove o mesmo e realiza a atividade policy for adaptive optimization in virtual machines. Technical Report 23429,
IBM Research, Nov. 2004.
de compilação especificada pelo evento, instalando o
resultado do método compilado na VM.