DynamoRIO - Instituto de Computaçãoedson/disciplinas/mo801/2012... · 2012-12-14 · MO801 -...

Preview:

Citation preview

MO801 - Seminário - DynamoRIO

DynamoRIO

Juliano Moscardini Bernardes

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

2012

MO801 - Seminário - DynamoRIO

ÍNDICE

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

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

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.

MO801 - Seminário - DynamoRIO

Runtime

Figura: DynamoRIO runtime code manipulation layer.

MO801 - Seminário - DynamoRIO

Algumas Metas

DeployableEficiente

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

MO801 - Seminário - DynamoRIO

Code Cache

Figura: Diagrama do fluxo de execução.

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.

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.

MO801 - Seminário - DynamoRIO

Incrementar Contador do Trace Head

Figura: Soluções para incrementar.

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.

MO801 - Seminário - DynamoRIO

Performance

Figura: Melhorias que cada técnica adiciona.

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.

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.

MO801 - Seminário - DynamoRIO

Cache Layout

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

MO801 - Seminário - DynamoRIO

Layout de um Fragmento

Figura: Campos de um fragmento da Code Cache.

MO801 - Seminário - DynamoRIO

Transparência

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

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.

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.

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.

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.

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.

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.

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.

MO801 - Seminário - DynamoRIO

Self-Modifying Code

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

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.

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.

MO801 - Seminário - DynamoRIO

Gerenciamento de Memória

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

MO801 - Seminário - DynamoRIO

Gerenciamento de Memória

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

MO801 - Seminário - DynamoRIO

Gerenciamento de Memória

Figura: Ocupação da heap pelo DynamoRIO.

MO801 - Seminário - DynamoRIO

Performance

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

MO801 - Seminário - DynamoRIO

Performance

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

MO801 - Seminário - DynamoRIO

Performance

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

MO801 - Seminário - DynamoRIO

Performance

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

MO801 - Seminário - DynamoRIO

Conclusão

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

Recommended