35
MO801 - Seminário - DynamoRIO DynamoRIO Juliano Moscardini Bernardes MO801/MC972 - Tópicos em Arquitetura e Hardware - Máquinas Virtuais IC - UNICAMP 2012

DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

DynamoRIO

Juliano Moscardini Bernardes

MO801/MC972 - Tópicos em Arquitetura e Hardware - Máquinas VirtuaisIC - UNICAMP

2012

Page 2: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

ÍNDICE

IntroduçãoCode CacheBlocos Básico e TracesTransparênciaPerformanceConclusão

Page 3: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Introdução

Baseado no Dynamo (2001).Parceria entre HP e MIT (Runtime Introspection andOptimization (RIO) group) iniciada em 2001.Determina (2003 - 2007), empresa de segurança fundadapelos desenvolvedores.Comprada pela VMware em 2007.Se torna Open-Source em 2009, com licença BSD.Versão atual: 3.2.0.3

Page 4: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Introdução

Runtime para a manipulação e transformação de código.Otimizações dinâmicas.Provê uma interface para a construção de ferramentas deprofiling, instrumentação, otimização, tradução e outras.Aplicações IA-32/AMD64 para Linux e Windows.

Page 5: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Runtime

Figura: DynamoRIO runtime code manipulation layer.

Page 6: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Algumas Metas

DeployableEficiente

• Abrangente• Prática• Transparente• UniversalCustomizável

Page 7: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Code Cache

Figura: Diagrama do fluxo de execução.

Page 8: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Blocos Básicos

Termina com um desvio.Cada entrada é um novo bloco básico.Salva o estado e o controle, e retorna ao DynamoRIO(context switch).Faz a ligação direta com blocos básicos já existentes.

Figura: Exemplo de BB.

Page 9: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Traces

Única entrada e várias saídas.Oportunidade para maiores otimizações.Alvos de back edges (Trace Head).Saída de um existente Trace (Secondary Trace Head).Criado quando o contador excede um threshold.Geralmente terminado quando encontra uma back edge,ou saída para outro trace.Next Executing Tail (NET)Não considera alvos de back edges de saltos indiretoscomo possíveis Trace Heads.

Page 10: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Incrementar Contador do Trace Head

Figura: Soluções para incrementar.

Page 11: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

De Blocos Básicos para Traces

Figura: Criação de Traces.

Otimizações nos Traces: Constant Propagation andFolding, Dead Code Elimination.

Page 12: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Performance

Figura: Melhorias que cada técnica adiciona.

Page 13: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Algumas Fontes de Overhead

Adição de instruçõesComparação para saltos indiretos.Pesquisa na tabela de saltos indiretos.

Aumento no número de dados.Hashtable.

Modificações no código da aplicação.

Page 14: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Capacidade da Code Cache

Quando chega no limite do tamanho:Buffer circular.FIFO

Dimensionada dinamicamente (Quando um threshold de"blocos regenerados" é atingido).É dividida em unidades.

Page 15: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Cache Layout

Figura: Separação do Layout físico e da lista lógica para o FIFO.

Page 16: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Layout de um Fragmento

Figura: Campos de um fragmento da Code Cache.

Page 17: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Transparência

Evitar interferir na execução do programa.Conseguir tratar caso incomuns.Define 3 regras de transparência.

Page 18: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Transparência

Regra 1: Eliminar conflitos de recursosBibliotecas.

O mau compartilhamento de recursos do sistema podecausar situações de inconsistência.

Heap.Manter a memória do DynamoRIO separada daaplicação.

I/O.O DynamoRIO usa suas próprias rotinas de I/O.

Page 19: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Transparência

Regra 2: Evitar alterar o código da aplicação.Threads.

O DynamoRIO não cria Threads próprias (troca decontexto dentro da thread).

Compatibilidade com executáveisManter o layout dos dados.Conservar a pilha da aplicação.

Page 20: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Transparência

Regra 3: Fingir que a aplicação foi inaltera.Consistência da code cache.

Self-Modifying Code.Espaço de endereçamento.

Manter todas as propriedades que a aplicação espera.Proteger o código do DynamoRIO.

Endereços da aplicação.Mesmo sendo executada na code cache a aplicação devemanipular seus endereços originais.

Page 21: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Transparência

Regra 3: Fingir que a aplicação foi inaltera.Traduzir os contextos.

Deve salvar todos os contextos necessários da aplicação.Erros

Deve ser fiel aos problemas que poderiam ocorrernativamente.

Tempo.Tentar manter uma compatibilidade temporal com aexecução nativa.

Page 22: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Troca de contexto

Desempenho crítico.Otimizada para salvar apenas os registradores depropósito geral (não faz operações com pontosflutuantes), condition codes (registrador eflags) e demaisestados dependentes do sistema.Existem slots especiais para os elementos maisimportantes.Os elementos devem ser salvos em ambos sentidos datroca de contexto.

Page 23: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

System Calls

Precisa monitor dois tipos de chamadas:Que afetam o espaço de endereçamento (e.g., alocaçãode memória).Afetam o fluxo de controle (e.g., capturar e tratar umsinal).

São facilmente descobertas na formação do bloco básico.Quando encontrar chamadas desconhecidas, inserircódigos de instrumentação antes e depois dela.

Page 24: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Self-Modifying Code

SandboxingNão bloqueia a escrita na região do código da aplicação.Armazena uma cópia do código da aplicação.Verificar cada Byte.Se passar pela verificação, cada escrita na memória vaiser monitorada.

Page 25: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Self-Modifying Code

Figura: Impacto no tempo de execução causado pelas verificações.

Page 26: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Self-Modifying Code

Regiões de MemóriaColoca as páginas com características iguais na mesmaregião.A região tem tamanho variável.Se uma pagina é escrita, ela divide a região.Se a instrução de escrita está na mesma página, ela émarcada como auto-modificável.

Page 27: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Gerenciamento de Memória

Não utilizar a heap do aplicativo para armazenarestruturas do DynamoRIO.O DynamoRIO pede pedaços de memória (64K) quandonecessita de expansão (mmap).Threads usam caches privadas, facilitando ogerenciamento.A separação de stubs de saltos diretos gera economia deespaço.

Page 28: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Gerenciamento de Memória

Figura: Redução da memória quando deletamos stubs não usados.

Page 29: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Gerenciamento de Memória

Figura: Principais estruturas de dados usadas (Tamanho em Bytes).

Page 30: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Gerenciamento de Memória

Figura: Ocupação da heap pelo DynamoRIO.

Page 31: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Performance

Figura: Estatísticas para a execução dos benchmarks.

Page 32: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Performance

Figura: Estatísticas para a execução dos benchmarks.

Page 33: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Performance

Figura: Divisão do tempo gasto no código da aplicação e noRuntime (Apenas em Linux benchmarks).

Page 34: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Performance

Figura: Impacto da implementação de otimizações adicionais(Adobe Premiere ).

Page 35: DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 - Seminário - DynamoRIO Introdução BaseadonoDynamo(2001). ParceriaentreHPeMIT(Runtime

MO801 - Seminário - DynamoRIO

Conclusão

É um poderosa ferramenta para explorar característicasdinâmicas de uma aplicação.Presa a arquiteturas e sistemas.