SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Monitoramento de System Calls
             no OpenSolaris
             PCS2042 – Sistemas Operacionais


                      Paulo Shindi Kuniyoshi
                  Pedro Victor Losada Cavalcante
                      Rafael Barbolo Lopes




Professor Jorge Kinoshita
Introdução
Objetivo:
  Monitorar System Calls no OpenSolaris através do
   DTrace
DTrace
O que é:
  Ferramenta de instrumentação dinâmica de sistemas
    de produção
Quem desenvolveu:
  Sun Microsystems
Plataformas:
  OpenSolaris
  Mac OS X
  Linux
Arquitetura DTrace
Metodologia
Ambiente:
  Sistema Operacional: OpenSolaris 10
  Máquina: VirtualBox 2.2.2
Documentação:
  SUN Docs, Blogs
Scripts básicos:
  Contagem de system calls chamadas
Exemplo de aplicação:
  Benchmarking de processamento de texto
Scripts
Script 1: Monitoramento de processo existente


  #!/usr/sbin/dtrace –s
  syscall:::
  /pid == $1/
  {
    @count_table[execname,probefunc]=count();
  }

  Comando:
  # dtrace –s [nome_script].d –c [numero do id do processo]
Exemplo 1
#include <stdio.h>
#include <stdlib.h>
int main() {
int num;
printf ("PID=%dn", getpid());

sleep(10);

printf ("Digite um numero: ");
scanf("%d", &num);
printf(“O numero e = %d”, num);
}
Terminal 1: Execução
Terminal 2: Monitoramento
Exemplo 2
#include <stdio.h>
#include <stdlib.h>
main() {
         int n,result;
         printf ("Processo Pai Criado PID=%dn", getpid());
         n = fork();
         printf("O valor de n= %dn", n);
         sleep(5);
         if(n==0) {
                   execl("/bin/ls","ls",NULL,NULL);
         }
         else {
                   wait(NULL);
                   printf("Fim do programan");
}
Terminal 1: Execução
Terminal 2: Monitoramento PID Pai
Terminal 3: Monitoramento PID Filho
Exemplo 3

1) Abrir o gedit.
2) Rodar o Dtrace usando o script 1.
3) Digitar e salvar no Gedit.
4) Fechar o gedit.
Script 2: Monitoramento Novo Processo


      #!/usr/sbin/dtrace -s
      syscall:::
      /pid == $target/
      {
        @count_table[probefunc]=count();
      }
Exemplo 4

Monitoramento de system calls a partir de uma linha
de comando.
# dtrace –s dtrace.c –c “[comando]”

Neste Exemplo 4 usamos:
[comando] = ls
Aplicação dos Scripts
Benchmarking com DTrace
“processo de comparação entre dois ou mais sistemas”
Benchmarking com DTrace
  “processo de comparação entre dois ou mais sistemas
  programas de processamento de texto”
Algoritmo
   Ler arquivos de texto e contar ocorrências do caractere
     “a”
   Ser o mais simples possível (não otimizado)
Metodologia
  Utilizar diferentes linguagens de programação (C, Java,
    Perl, Python e Ruby)
  Aplicar o algoritmo a arquivos de 1KB a 400MB
Plataforma de Testes

Host (Windows XP):
  Core 2 Duo – 2GHz
  Memória principal: 2GB
  Disco rígido: 120GB
Guest (OpenSolaris10 no VirtualBox):
  Memória principal: 873MB
  Disco rígido: 7,04GB
Script DTrace
#!/usr/sbin/dtrace -s
dtrace:::BEGIN
{
        printf("Iniciando Dtrace...n");
        self->start = timestamp;
}
syscall:::
/pid == $target/
{
        @count_table[probefunc]=count();
        @total[“Total de chamadas vindas de System Calls”]=sum(1);
}
dtrace:::END
{
        printf(“Tempo: %d segundosn”,(timestamp - self->start)/1000000000);
}
C
#include <stdio.h>
int main() {
       int count = 0;
       FILE *fp;
       char ch;
       fp=fopen("arquivos/arq","r");
       while(1) {
               ch = fgetc(fp);
               if (ch == 'a')
                        count++;
               else if (ch == EOF)
                        break;
       }
       fclose(fp);
       printf("Total de letras 'a': %dn", count);
       return 0;
}

               17 linhas
Java
package leitor;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class Leitor {
       public static void main(String[] args) throws IOException {
               int c;
               int count = 0;
               char a = 'a';
               InputStreamReader isr = new InputStreamReader(new
FileInputStream("arquivos/arq"));
               while ((c = isr.read()) != -1)
                      if (a == ((char)c))
                               count++;
               System.out.println("Total de letras 'a': " + count);
       }
}

                     17 linhas
Perl

open(FILE,"arquivos/arq");
$count=0;
while(<FILE>) {
       $count += ($_ =~ tr/a//);
}
close(FILE);
print("Total de letras 'a': ",$count,"n");




            7 linhas
Python

print "Total de letras 'a': %d " % (open("arquivos/arq").read().count("a"))




                           1 linha
Ruby

print "Total de letras 'a': ",File.read("arquivos/arq").scan("a").size




                        1 linha
Resultados
Tempo de Execução
Tempo de Execução
                                   Tempo de execução
            500
            450
            400
            350
Tempo (s)




            300
                                                                    C
            250
                                                                    Java
            200
            150                                                     Perl
            100                                                     Python
            50                                                      Ruby
             0
                  1KB   10KB 100KB 1MB   10MB 100MB 200MB 300MB 400MB

                                   Tamanho do Arquivo
Tempo de Execução
                                 Tempo de execução (sem java e ruby)
           18


           16


           14


           12
Tempo(s)




           10
                                                                                    C
            8                                                                       Perl
                                                                                    Python
            6


            4


            2


            0
                1KB   10KB   100KB   1MB    10MB   100MB    200MB   300MB   400MB

                                       Tamanho do Arquivo
Chamadas de Sistema
Quantidade de Chamadas (entry
                                         Chamadas de Sistema
                                                            Chamadas de Sistema
                                900000

                                800000

                                700000

                                600000

                                500000
                                                                                                 C
                                400000                                                           Java
                                300000                                                           Perl
                                200000                                                           Python
                                100000                                                           Ruby
                                     0
                                         1KB   10KB 100KB   1MB   10MB 100MB 200MB 300MB 400MB



                                                            Tamanho do Arquivo
Quantidade de Chamadas (entr
                                      Chamadas de Sistema
                                                    Chamadas de Sistema (sem java e rub
                               8000

                               7000

                               6000

                               5000

                               4000                                                             C
                               3000                                                             Perl

                               2000                                                             Python

                               1000

                                  0
                                      1KB   10KB   100KB   1MB   10MB 100MB 200MB 300MB 400MB


                                                           Tamanho do Arquivo
Conclusão do Teste

...quanto mais System Calls,
maior o tempo de execução!


     Alto desempenho para processar texto




 C                 Perl                     Python
Obrigado

Weitere ähnliche Inhalte

Was ist angesagt?

Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Introdução às Redes Neurais com PHP
Introdução às Redes Neurais com PHPIntrodução às Redes Neurais com PHP
Introdução às Redes Neurais com PHPOtávio Calaça Xavier
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2Wilson Júnior
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesDevCamp Campinas
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework GrailsBruno Catão
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelAndrews Medina
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoWilson Júnior
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsHelder da Rocha
 
Spock Framework
Spock FrameworkSpock Framework
Spock FrameworkIsmael
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em JavaDevmedia
 

Was ist angesagt? (20)

Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
servlet-respostas
servlet-respostasservlet-respostas
servlet-respostas
 
Introdução às Redes Neurais com PHP
Introdução às Redes Neurais com PHPIntrodução às Redes Neurais com PHP
Introdução às Redes Neurais com PHP
 
Python
PythonPython
Python
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Threads e sockets java
Threads e sockets javaThreads e sockets java
Threads e sockets java
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework Grails
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornado
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 
String e IO
String e IOString e IO
String e IO
 
Redes Neurais com PHP
Redes Neurais com PHPRedes Neurais com PHP
Redes Neurais com PHP
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 

Ähnlich wie Monitoramento de System Calls com DTrace

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Otimização holistica de ambiente computacional
Otimização holistica de ambiente computacionalOtimização holistica de ambiente computacional
Otimização holistica de ambiente computacionalRodrigo Campos
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVMCaelum
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestEdson Celio
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonBruno Rocha
 
Otimização de Aplicações Android
Otimização de Aplicações AndroidOtimização de Aplicações Android
Otimização de Aplicações AndroidPeslPinguim
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com pythonUFPA
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Conceitos Básicos TRT 4 - 2015
Conceitos Básicos TRT 4 - 2015Conceitos Básicos TRT 4 - 2015
Conceitos Básicos TRT 4 - 2015Veonaprovalogo
 
Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveisFernando Mercês
 
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...Vale Security Conference
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesPlanejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesJoao Galdino Mello de Souza
 

Ähnlich wie Monitoramento de System Calls com DTrace (20)

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Otimização holistica de ambiente computacional
Otimização holistica de ambiente computacionalOtimização holistica de ambiente computacional
Otimização holistica de ambiente computacional
 
dnad12
dnad12dnad12
dnad12
 
threads e-sockets-em-java
 threads e-sockets-em-java threads e-sockets-em-java
threads e-sockets-em-java
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVM
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentest
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
 
Otimização de Aplicações Android
Otimização de Aplicações AndroidOtimização de Aplicações Android
Otimização de Aplicações Android
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com python
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Conceitos Básicos TRT 4 - 2015
Conceitos Básicos TRT 4 - 2015Conceitos Básicos TRT 4 - 2015
Conceitos Básicos TRT 4 - 2015
 
Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveis
 
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
Vale Security Conference - 2011 - 11 - Fernando Mercês [Octane Labs] [Coding ...
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesPlanejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
 
Ficheiros em JAVA
Ficheiros em JAVAFicheiros em JAVA
Ficheiros em JAVA
 

Mehr von Rafael Barbolo

Sistemas de recomendação
Sistemas de recomendaçãoSistemas de recomendação
Sistemas de recomendaçãoRafael Barbolo
 
Aleph - Sistema de Monitoramento Visual de Pessoas
Aleph - Sistema de Monitoramento Visual de PessoasAleph - Sistema de Monitoramento Visual de Pessoas
Aleph - Sistema de Monitoramento Visual de PessoasRafael Barbolo
 
Robôs, CN e CNC - Automação de manufatura
Robôs, CN e CNC - Automação de manufaturaRobôs, CN e CNC - Automação de manufatura
Robôs, CN e CNC - Automação de manufaturaRafael Barbolo
 
Dependabilidade e Segurança
Dependabilidade e SegurançaDependabilidade e Segurança
Dependabilidade e SegurançaRafael Barbolo
 
Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)Rafael Barbolo
 
Arquitetura de Cluster do Google
Arquitetura de Cluster do GoogleArquitetura de Cluster do Google
Arquitetura de Cluster do GoogleRafael Barbolo
 
Privilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisPrivilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisRafael Barbolo
 
Projeto de Banco De Dados - Upcoming Events
Projeto de Banco De Dados - Upcoming EventsProjeto de Banco De Dados - Upcoming Events
Projeto de Banco De Dados - Upcoming EventsRafael Barbolo
 

Mehr von Rafael Barbolo (9)

Sistemas de recomendação
Sistemas de recomendaçãoSistemas de recomendação
Sistemas de recomendação
 
Aleph - Sistema de Monitoramento Visual de Pessoas
Aleph - Sistema de Monitoramento Visual de PessoasAleph - Sistema de Monitoramento Visual de Pessoas
Aleph - Sistema de Monitoramento Visual de Pessoas
 
Computação em Nuvem
Computação em NuvemComputação em Nuvem
Computação em Nuvem
 
Robôs, CN e CNC - Automação de manufatura
Robôs, CN e CNC - Automação de manufaturaRobôs, CN e CNC - Automação de manufatura
Robôs, CN e CNC - Automação de manufatura
 
Dependabilidade e Segurança
Dependabilidade e SegurançaDependabilidade e Segurança
Dependabilidade e Segurança
 
Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)
 
Arquitetura de Cluster do Google
Arquitetura de Cluster do GoogleArquitetura de Cluster do Google
Arquitetura de Cluster do Google
 
Privilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisPrivilégios de processos no OpenSolaris
Privilégios de processos no OpenSolaris
 
Projeto de Banco De Dados - Upcoming Events
Projeto de Banco De Dados - Upcoming EventsProjeto de Banco De Dados - Upcoming Events
Projeto de Banco De Dados - Upcoming Events
 

Monitoramento de System Calls com DTrace

  • 1. Monitoramento de System Calls no OpenSolaris PCS2042 – Sistemas Operacionais Paulo Shindi Kuniyoshi Pedro Victor Losada Cavalcante Rafael Barbolo Lopes Professor Jorge Kinoshita
  • 2. Introdução Objetivo: Monitorar System Calls no OpenSolaris através do DTrace
  • 3. DTrace O que é: Ferramenta de instrumentação dinâmica de sistemas de produção Quem desenvolveu: Sun Microsystems Plataformas: OpenSolaris Mac OS X Linux
  • 5. Metodologia Ambiente: Sistema Operacional: OpenSolaris 10 Máquina: VirtualBox 2.2.2 Documentação: SUN Docs, Blogs Scripts básicos: Contagem de system calls chamadas Exemplo de aplicação: Benchmarking de processamento de texto
  • 7. Script 1: Monitoramento de processo existente #!/usr/sbin/dtrace –s syscall::: /pid == $1/ { @count_table[execname,probefunc]=count(); } Comando: # dtrace –s [nome_script].d –c [numero do id do processo]
  • 8. Exemplo 1 #include <stdio.h> #include <stdlib.h> int main() { int num; printf ("PID=%dn", getpid()); sleep(10); printf ("Digite um numero: "); scanf("%d", &num); printf(“O numero e = %d”, num); }
  • 11. Exemplo 2 #include <stdio.h> #include <stdlib.h> main() { int n,result; printf ("Processo Pai Criado PID=%dn", getpid()); n = fork(); printf("O valor de n= %dn", n); sleep(5); if(n==0) { execl("/bin/ls","ls",NULL,NULL); } else { wait(NULL); printf("Fim do programan"); }
  • 15. Exemplo 3 1) Abrir o gedit. 2) Rodar o Dtrace usando o script 1. 3) Digitar e salvar no Gedit. 4) Fechar o gedit.
  • 16.
  • 17. Script 2: Monitoramento Novo Processo #!/usr/sbin/dtrace -s syscall::: /pid == $target/ { @count_table[probefunc]=count(); }
  • 18. Exemplo 4 Monitoramento de system calls a partir de uma linha de comando. # dtrace –s dtrace.c –c “[comando]” Neste Exemplo 4 usamos: [comando] = ls
  • 19.
  • 21. Benchmarking com DTrace “processo de comparação entre dois ou mais sistemas”
  • 22. Benchmarking com DTrace “processo de comparação entre dois ou mais sistemas programas de processamento de texto” Algoritmo Ler arquivos de texto e contar ocorrências do caractere “a” Ser o mais simples possível (não otimizado) Metodologia Utilizar diferentes linguagens de programação (C, Java, Perl, Python e Ruby) Aplicar o algoritmo a arquivos de 1KB a 400MB
  • 23. Plataforma de Testes Host (Windows XP): Core 2 Duo – 2GHz Memória principal: 2GB Disco rígido: 120GB Guest (OpenSolaris10 no VirtualBox): Memória principal: 873MB Disco rígido: 7,04GB
  • 24. Script DTrace #!/usr/sbin/dtrace -s dtrace:::BEGIN { printf("Iniciando Dtrace...n"); self->start = timestamp; } syscall::: /pid == $target/ { @count_table[probefunc]=count(); @total[“Total de chamadas vindas de System Calls”]=sum(1); } dtrace:::END { printf(“Tempo: %d segundosn”,(timestamp - self->start)/1000000000); }
  • 25. C #include <stdio.h> int main() { int count = 0; FILE *fp; char ch; fp=fopen("arquivos/arq","r"); while(1) { ch = fgetc(fp); if (ch == 'a') count++; else if (ch == EOF) break; } fclose(fp); printf("Total de letras 'a': %dn", count); return 0; } 17 linhas
  • 26. Java package leitor; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class Leitor { public static void main(String[] args) throws IOException { int c; int count = 0; char a = 'a'; InputStreamReader isr = new InputStreamReader(new FileInputStream("arquivos/arq")); while ((c = isr.read()) != -1) if (a == ((char)c)) count++; System.out.println("Total de letras 'a': " + count); } } 17 linhas
  • 27. Perl open(FILE,"arquivos/arq"); $count=0; while(<FILE>) { $count += ($_ =~ tr/a//); } close(FILE); print("Total de letras 'a': ",$count,"n"); 7 linhas
  • 28. Python print "Total de letras 'a': %d " % (open("arquivos/arq").read().count("a")) 1 linha
  • 29. Ruby print "Total de letras 'a': ",File.read("arquivos/arq").scan("a").size 1 linha
  • 32. Tempo de Execução Tempo de execução 500 450 400 350 Tempo (s) 300 C 250 Java 200 150 Perl 100 Python 50 Ruby 0 1KB 10KB 100KB 1MB 10MB 100MB 200MB 300MB 400MB Tamanho do Arquivo
  • 33. Tempo de Execução Tempo de execução (sem java e ruby) 18 16 14 12 Tempo(s) 10 C 8 Perl Python 6 4 2 0 1KB 10KB 100KB 1MB 10MB 100MB 200MB 300MB 400MB Tamanho do Arquivo
  • 35. Quantidade de Chamadas (entry Chamadas de Sistema Chamadas de Sistema 900000 800000 700000 600000 500000 C 400000 Java 300000 Perl 200000 Python 100000 Ruby 0 1KB 10KB 100KB 1MB 10MB 100MB 200MB 300MB 400MB Tamanho do Arquivo
  • 36. Quantidade de Chamadas (entr Chamadas de Sistema Chamadas de Sistema (sem java e rub 8000 7000 6000 5000 4000 C 3000 Perl 2000 Python 1000 0 1KB 10KB 100KB 1MB 10MB 100MB 200MB 300MB 400MB Tamanho do Arquivo
  • 37. Conclusão do Teste ...quanto mais System Calls, maior o tempo de execução! Alto desempenho para processar texto C Perl Python