If you can't read please download the document
Upload
rafael-barbolo
View
2.279
Download
0
Embed Size (px)
Citation preview
Slide 1
Monitoramento de System Calls no OpenSolaris
PCS2042 Sistemas Operacionais
Professor Jorge Kinoshita
Paulo Shindi KuniyoshiPedro Victor Losada CavalcanteRafael Barbolo Lopes
Introduo
Objetivo:Monitorar System Calls no OpenSolaris atravs do DTrace
DTrace
O que :Ferramenta de instrumentao dinmica de sistemas de produo
Quem desenvolveu:Sun Microsystems
Plataformas:OpenSolaris
Mac OS X
Linux
Arquitetura DTrace
Metodologia
Ambiente:
Sistema Operacional: OpenSolaris 10
Mquina: VirtualBox 2.2.2
Documentao:
SUN Docs, Blogs
Scripts bsicos:
Contagem de system calls chamadas
Exemplo de aplicao:
Benchmarking de processamento de texto
Scripts
O paulo mostrou vrios scripts que fizemos.Ns pudemos rod-los e ver vrias system calls sendo chamadas.Mas qual aplicao poderamos fazer disso?
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
#include
int main() {
int num;
printf ("PID=%d\n", getpid());
sleep(10);
printf ("Digite um numero: ");
scanf("%d", &num);printf(O numero e = %d, num);
}
Terminal 1: Execuo
Terminal 2: Monitoramento
Exemplo 2
#include
#include
main() {
int n,result;
printf ("Processo Pai Criado PID=%d\n", getpid());
n = fork();
printf("O valor de n= %d\n", n);
sleep(5);
if(n==0) {
execl("/bin/ls","ls",NULL,NULL);
}
else {
wait(NULL);
printf("Fim do programa\n");
}
Terminal 1: Execuo
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
Aplicao dos Scripts
O paulo mostrou vrios scripts que fizemos.Ns pudemos rod-los e ver vrias system calls sendo chamadas.Mas qual aplicao poderamos fazer disso?
Benchmarking com DTrace
processo de comparao entre dois ou mais sistemas
Benchmarking com DTrace
Algoritmo
Ler arquivos de texto e contar ocorrncias do caractere a
Ser o mais simples possvel (no otimizado)
processo de comparao entre dois ou mais sistemas programas de processamento de texto
Metodologia
Utilizar diferentes linguagens de programao (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
Memria principal: 2GB
Disco rgido: 120GB
Guest (OpenSolaris10 no VirtualBox):Memria principal: 873MB
Disco rgido: 7,04GB
Script DTrace
#!/usr/sbin/dtrace -sdtrace:::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 segundos\n,(timestamp - self->start)/1000000000);}
C
17 linhas
#include 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': %d\n", count);return 0;}
Java
17 linhas
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);}}
Perl
7 linhas
open(FILE,"arquivos/arq");$count=0;while() {$count += ($_ =~ tr/a//);}close(FILE);print("Total de letras 'a': ",$count,"\n");
Python
1 linha
print "Total de letras 'a': %d " % (open("arquivos/arq").read().count("a"))
Ruby
1 linha
print "Total de letras 'a': ",File.read("arquivos/arq").scan("a").size
Resultados
O paulo mostrou vrios scripts que fizemos.Ns pudemos rod-los e ver vrias system calls sendo chamadas.Mas qual aplicao poderamos fazer disso?
Tempo de Execuo
O paulo mostrou vrios scripts que fizemos.Ns pudemos rod-los e ver vrias system calls sendo chamadas.Mas qual aplicao poderamos fazer disso?
Tempo de Execuo
Tempo de Execuo
Chamadas de Sistema
O paulo mostrou vrios scripts que fizemos.Ns pudemos rod-los e ver vrias system calls sendo chamadas.Mas qual aplicao poderamos fazer disso?
Chamadas de Sistema
Chamadas de Sistema
Concluso do Teste
Alto desempenho para processar textoCPerlPython...quanto mais System Calls, maior o tempo de execuo!
Obrigado
O paulo mostrou vrios scripts que fizemos.Ns pudemos rod-los e ver vrias system calls sendo chamadas.Mas qual aplicao poderamos fazer disso?
Tempo de execuoTamanho do ArquivoTempo (s)CJavaPerlPythonRuby
1KB02000
10KB02010
100KB12001
1MB02000
10MB05012
100MB4304527
200MB6448885
300MB10671413247
400MB14911715447
Tempo de execuo (sem java e ruby)Tamanho do ArquivoTempo(s)CPerlPython
1KB000
10KB001
100KB100
1MB000
10MB001
100MB445
200MB688
300MB101413
400MB141715
Chamadas de SistemaTamanho do ArquivoQuantidade de Chamadas (entry+return)CJavaPerlPythonRuby
1KB4143961791195239
10KB4144721871199265
100KB4145061871203469
1MB55567820112172433
10MB19914139345136121777
100MB16399955117852801214865
200MB323919662633854401426693
300MB483929105049856001639837
400MB643938005365857601856159
Chamadas de Sistema (sem java e ruby)Tamanho do ArquivoQuantidade de Chamadas (entry + return)CPerlPython
1KB411791195
10KB411871199
100KB411871203
1MB552011217
10MB1993451361
100MB163917852801
200MB323933854401
300MB483949856001
400MB643965857601