11

Análise de Disco, I/O e Processamento

Embed Size (px)

Citation preview

Page 1: 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

Page 2: Análise de Disco, I/O e Processamento

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

Page 3: Análise de Disco, I/O e Processamento

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

Page 4: Análise de Disco, I/O e Processamento

Abaixo as �guras representando cada etapa dos comandos executados:

Figura 1: Exercício 1.1)

2

Page 5: Análise de Disco, I/O e Processamento

Figura 2: Exercício 1.2)

3

Page 6: Análise de Disco, I/O e Processamento

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

Page 7: Análise de Disco, I/O e Processamento

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

Page 8: Análise de Disco, I/O e Processamento

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

Page 9: Análise de Disco, I/O e Processamento

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

Page 10: Análise de Disco, I/O e Processamento

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

Page 11: Análise de Disco, I/O e Processamento

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