Processamento e Análise com QGIS - Aplicação ao Cálculo de ...
Análise de Disco, I/O e Processamento
-
Upload
johnnatan-messias -
Category
Education
-
view
1.453 -
download
0
Transcript of Análise de Disco, I/O e Processamento
Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Biológicas
Departamento de Computação
BCC264 - Sistemas Operacionais
Segundo Trabalho Prático
Johnnatan Messias
Pollyanna Gonçalves
Wellington Dores
Professor - Fabrício Benevenuto
Ouro Preto
18 de abril de 2011
Sumário
1 Introdução 11.1 Considerações iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Análise das práticas propostas . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1 Questão 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.2 Questão 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2.3 Questão 03 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Lista de Figuras
1 Exercício 1.1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Exercício 1.2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Exercício 1.3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Tabela 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Tabela 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Lista de Programas
1 Script em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Código com chamada de script . . . . . . . . . . . . . . . . . . . . . . 63 Código em bash e awk . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Script em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2
1 Introdução
Este trabalho tem como objetivo analisar o uso da CPU alterando o número deprocessos simultâneos em andamento, utilizando de comandos Unix para tal.
1.1 Considerações iniciais
• Sistema Operacional: Ubuntu 10.10
• Processador Intel Core 2 Duo
• Ambiente de desenvolvimento da documentação: TeXnicCenter 1 Editor deLATEX.
1.2 Análise das práticas propostas
1.2.1 Questão 01
Neste exercício vamos utilizar o comando yes do Unix para veri�car políticas deescalonamento do processador.
1. Execute o comando yes em um terminal e o comando top em outro. Observea utilização de CPU do yes. Agora pare a execução do yes e execute yes >/dev/null e observe a utilização de CPU do yes. Procure explicar o que foiobservado.
Resposta) Utilizando o primeiro comando enunciado podemos observar ouso da CPU em torno de 20%, já o segundo comando fez a utilização da CPUchegar a 100% (o uso da memória foi o mesmo nos dois casos). Ambos osprocessos iniciaram com nice 0.1. 1
2. Execute agora duas vezes mais comandos yes > /dev/null do que o número deCPUs que você tem em seu computador. Observe a utilização de CPU com ocomando top. O que acontece com a utilização de CPU? Explique o ocorrido.
Resposta) Executando mais comandos yes do que a quantidade de núcleosexistentes no processador o sistema operacional faz o uso de um escalonador deprocessos para que todos os comandos executados rodem como se houvessemCPU's disponíveis para cada processo. 2
3. Execute novamente duas vezes mais comandos yes > /dev/null do que onúmero de CPUs de sua máquina. Porém utilize diferentes nices. Explique oque se observa sobre o escalonamento desses processos na CPU.
Resposta) Utilizando o comando nice com diferentes prioridades concluimosque, quanto menor o valor passado para o nice, o processo passa a utilizaruma maior porção da CPU. 3
1
Abaixo as �guras representando cada etapa dos comandos executados:
Figura 1: Exercício 1.1)
2
Figura 2: Exercício 1.2)
3
Figura 3: Exercício 1.3)
1.2.2 Questão 02
Neste exercício vamos construir um pequeno monitor de tempo de CPU. A uti-lização de CPU pode ser medida através da seguinte fórmula:
U = (Bf −Bi)/T
Onde Bf −Bi é o tempo em que a CPU �cou ocupada durante um determinadointervalo de tempo T .
1. O comando top calcula a utilização de CPU de tempos em tempos. O intervalode tempo padrão utilizado pelo top é 1 segundo. Este intervalo pode seralterado. Digite mantop e procure entender qual o parâmetro que altera esteintervalo. Altere o valor do intervalo para 10 segundos. Faça a mesma coisa
4
agora utilizando, ao invés do top, o comando vmstat. Indique a utilizaçãode CPU na saída do vmstat ao executar vários comandos yes > /dev/nullsimultaneamente na máquina.
Resposta) No comando vmstat, com atualizações a cada 10 segundos(−n10),os parâmetros alterados são os da coluna US (atualização da CPU) e o dacoluna ID(tempo de ociosidade).
2. No Linux, o /proc contém diversas informações sobre o sistema, incluindo in-formações sobre o tempo de CPU. Construa um código em Perl ou em Pythonque lê o tempo em que a CPU, ou seja o parâmetro B da equação acima. Infor-mações sobre o tempo de CPU podem ser encontradas no arquivo /proc/stat.Explique os campos que você utilizou para contabilizar o tempo de CPU. Paratestar seu código faça o seguinte experimento. Deixe um yes > /dev/nullrodando em background na CPU queserá medida durante um período de 10segundos e computecom seu script o tempo de CPU em dois momentos, antese depois deexecutar o yes. A diferença desses tempos dividida por 10 segundosdeve dar 100% de utilização.
Resposta) O script criado, em Python, está exibido abaixo: 1
i f __name__ == "__main__" :
arq = open ("/proc/ s t a t " ,"r" )s t r = arq . r e ad l i n e ( )
5 s t r = s t r . s p l i t (" " )co l 2 = int ( s t r [ 3 ] ) ; c o l 4 = int ( s t r [ 5 ] )tempo = ( ( co l 2 + co l 4 ) ∗ 0 . 01 )p r i n t tempo
Programa 1: Script em Python
5
O código abaixo chama o script em Python e calcula o tempo de CPU, deacordo com as colunas US e ID que são retornadas no prompt de comando.2
#! / bin / sh
echo " bash"echo ""
5 echo "tempo de cpu em segundos : "echo ""python " t e s t e 2 . py"yes > /dev/ nu l l &yes > /dev/ nu l l &
10 s l e e p 10echo ""python " t e s t e 2 . py"echo ""echo ""
15 k i l l a l l yes
Programa 2: Código com chamada de script
3. Construa agora o mesmo código utilizando apenas bash, awk e sed.
Os programas abaixo representam o código enunciado acima utilizando bashe awk 3
#! / bin / sh
echo " bash"echo ""
5
echo "tempo de cpu em segundos : "echo ""
awk ' $1 == "cpu" { p r i n t f ( ( $3+$5 ) ∗0.01) } ' /proc / s t a t10
yes > /dev/ nu l l &yes > /dev/ nu l l &
s l e e p 1015
echo ""
awk ' $1 == "cpu" { p r i n t f ( ( $3+$5 ) ∗0.01) } ' /proc / s t a t
20 echo ""echo ""
k i l l a l l yes
Programa 3: Código em bash e awk
6
1.2.3 Questão 03
Construa um script para medir utilização de disco a partir do /proc e planeje umaforma inteligente de testar. Explique as principais partes do arquivo do diretório/proc que foi utilizado para medir e os campos que você utilizou para medir autilização de disco.
Resposta) Utilizamos o comando diskstats, a partir de proc, para que o promptimprima na tela informações da utilização do disco. O script, em Python, abaixo 4usa tais dados para calcular a diferença por tempo dos seguintes campos:
• Campo 1: Número de leituras completas.
• Campo 2: Número de leituras mescladas.
• Campo 3: Número de setores lidos.
• Campo 4: Tempo gasto, em milisegundos, para a leitura.
• Campo 5: Número de escritas completas.
• Campo 6: Número de gravações mescladas.
• Campo 7: Número de setores escritos.
• Campo 8: Tempo gasto, em milisegundos, para escrita.
• Campo 9: Número de entradas e saídas em andamento.
• Campo 10: Tempo gasto, em milisegundos, em entradas e saídas.
• Campo 11: Média, em milisegundos, em entradas e saídas.
import os
de f l erArq ( ) :arq = open ("/proc/ d i s k s t a t s " ,"r" )
5 s t r = arq . r e ad l i n e ( )s t r = s t r . s p l i t (" " )while ( s t r [ 1 1 ] != "sda" ) :
s t r = arq . r e ad l i n e ( )s t r = s t r . s p l i t (" " )
10
return s t r
# 3 −> 1415 # 4 −> 15
# 7 −> 18# 8 −> 19
i f __name__ == "__main__" :20
// l e i t u r a i n i c i a l dos parâmetross t r = lerArq ( )wi = int ( s t r [ 1 8 ] )r i = int ( s t r [ 1 4 ] )
7
25 twi = f loat ( s t r [ 1 9 ] )t r i = f loat ( s t r [ 1 5 ] )
// t e s t e de cópia para um arqu ivo qua l querpr in t "Copiando Arquivo"
30 os . system ("cp f i lme f i lmecop iado " )p r i n t "Filme copiado com sucesso "
// l e i t u r a f i n a l dos parâmetross t r = lerArq ( )
35 wf = int ( s t r [ 1 8 ] )r f = int ( s t r [ 1 4 ] )twf = f loat ( s t r [ 1 9 ] )t r f = f loat ( s t r [ 1 5 ] )
40 // c a l c u l o dos ga s t o s en t re l e i t u r a e e s c r i t abytesWrite = f loat ( ( wf − wi ) ∗ 512)bytesRead = f loat ( ( r f −r i ) ∗ 512)
tWrite = ( twf − twi ) ∗ 0 .00145 tRead = ( t r f − t r i ) ∗ 0 .001
txWrite = 0 ; txRead = 0
i f ( tWrite != 0) :50 txWrite = ( bytesWrite / tWrite )
i f ( tRead != 0) :txRead = ( bytesRead / tRead )
55 tTota l = ( tWrite + tRead )
p r i n t "Bytes e s c r i t o s %f " %bytesWritep r i n t "Bytes Lidos %f " %bytesReadpr in t "Taxa de t r an s f e r en c i a de e s c r i t a %f B/s" %txWrite
60 pr in t "Taxa de t r an s f e r en c i a de l e i t u r a %f B/s" %txReadpr in t "Tempo t o t a l t o t a l %d" %tTota l
Programa 4: Script em Python
Note que utilizamos apenas alguns dos dados que é impresso após a execuçãoda linha de comando enunciada acima. As tabelas abaixo nos mostra um teste detransferência de um arquivo de 687mb entre duas mídias, o resultado esperado nasaída do script em Python é o total calculado em cada coluna dessa tabela: 4 5
8
Figura 4: Tabela 1
Figura 5: Tabela 2
1.3 Referências
Esclarecimentos e conhecimentos de alguns dos comandos aqui apresentadosforam retirados dos sites abaixo:
Linux Questions: www.linuxquestions.orgViva o Linux: www.vivaolinux.com.br
9