Arquitetura de Computadores Prof. Mário Anotações sobre E/S e Discos Notas sobre E/S Vejamos um exemplo do impacto do sistema de E/S na performance global de um sistema de computação (computador) Suponha que nós tenhamos um benchmark que executa em 100 segundos de tempo decorrido, onde 90 segundos é tempo de CPU e o resto é tempo de E/S. Se o tempo de CPU melhora em 50% a cada ano pelos próximos 5 anos mas o tempo de E/S não melhora, quão mais rápido o nosso programa irá rodar no fim de 5 anos? Resposta Nós sabemos que: Tempo decorrido = tempo de CPU + tempo de E/S 100 = 90 + tempo de E/S tempo de E/S = 10 segundos Calculando o novo tempo de CPU e tempo decorrido resultante para os próximos 5 anos, temos Após n anos 0 1 2 3 4 5 Tempo de CPU 90 s 90 = 60 s 1.5 60 = 40 s 1.5 40 = 27 s 1.5 27 = 18 s 1.5 18 = 12 s 1.5 Tempo de E/S 10 s 10 s 10 s 10 s 10 s 10 s Tempo Decorrido 100 s 70 s 50 s 37 s 28 s 22 s % tempo de E/S 10% 14% 20% 27% 36% 45% A melhora no desempenho de CPU nos 5 anos é: 90 = 7.5 12 Contudo a melhora no tempo decorrido é apenas: 100 = 4.5 22 e o tempo de E/S aumentou de 10% para 45% do tempo decorrido. c 2001 Mário Olı́mpio de Menezes Página 1/5 Medidas de Performance de E/S - terminologia e unidades A performance do sistema de E/S depende da taxa à qual o sistema transfere dados. A taxa de transferência depende do taxa de clock, que é tipicamente dada em MHz = 106 ciclos por segundo. A taxa de transferência normalmente é quotada em MB/seg. Nos sistemas de E/S, MBs são medidos usando a base 10 (i.e., 1 MB = 106 = 1.000.000 bytes), diferente da memória principal, onde a base 2 é utilizada (i.e.,1 MB = 220 = 1.048.576 bytes). Além disso, para confundir mais ainda, esta diferença introduz a necessidade de se converter entre a base 10 (1K = 1000) e a base 2 (1K = 1024) porque muitos acessos de E/S são para blocos de dados que tem um tamanho que é uma potência de 2. No nosso tratamento, nós não vamos complicar tanto, e vamos tratar as duas medidas como se as unidades fossem idênticas. Isso introduz um pequeno erro, que poderá ser determinado pelo estudante mais aplicado. Discos Para acessar dados, o SO deve direcionar o disco através de um processo de 3 estágios. 1. posicionar a cabeça de leitura no traço certo (“seek time”) 2. esperar pelo setor correto passar sob a cabeça de leitura/gravação (“rotational latency”) 3. transferir os dados em blocos de bits (“transfer time”) Os tempos importantes no acesso a disco, portanto são: seek time, rotational latency time, transfer time. A determinação destes tempos é mostrada a seguir Seek Time - Obtido dos dados do fabricante como average seek time, seu valor varia de 8ns – 20ns. Entretanto, o valor prático utilizado está entre 25% e 33% do valor do fabricante, dependendo da aplicação e do escalonamento dos pedidos de acesso ao disco - localidade de referência a disco. O “seek time” pode ser aproximado pela seguinte fórmula linear: Ts = m × n + s onde: Ts “seek time” estimado n número de trilhas (tracks) atravessadas m constante que depende do dispositivo de disco s tempo de inı́cio (startup time) Para discos em geral (um pouco antigos), podemos fazer as seguintes aproximações: m = 0.3 ms, s = 20 ms; para discos mais modermos, estes tempos são m = 0.1 ms e s = 3 ms. Em geral, o “average seek time” é mais confiavelmente obtido de “data sheets” dos fabricantes. Por exemplo, no site da IBM (http://www.storage.ibm.com) ou da Maxtor (http://www.maxtor.com). c 2001 Mário Olı́mpio de Menezes Página 2/5 Average Rotational Latency - tempo médio necessário para que o setor desejado passe pela cabeça de leitura/gravação. É dado por: 1 2r Tr = onde r é a velocidade de rotação em segundos. Por exemplo, para um disco de 3600 RPM é dado por: 0.5 rotação = 3600 rotação/min 0.5 rotação 3600 rotação/min 60 seg/min = 8.333 ms Para um disco de 7200 RPM é dado por: 0.5 rotação = 7200 rotação/min 0.5 rotação rotação/min 60 seg/min = 4.1667 ms 7200 Transfer Time - o tempo de transferência de ou para o disco depende da velocidade de rotação do disco da seguinte maneira: T = b rN onde: T tempo de transferência b número de bytes a serem transferidos N número de bytes em uma trilha (track) r velocidade de rotação, em revoluções por segundo Total average access time Ta - pode ser expresso como: Ta = Ts + 1 b + 2r rN onde Ts é o “average seek time”. Abaixo está a identificação de um disco, obtido diretamente através do sistema operacional (hdparm -i /dev/hda). Model=QUANTUM FIREBALLP AS30.0, FwRev=A1Y.1300, SerialNo=193036239582 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs } RawCHS=16383/16/63, TrkSize=32256, SectSize=21298, ECCbytes=4 BuffType=DualPortCache, BuffSize=1902kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=58633344 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5 c 2001 Mário Olı́mpio de Menezes Página 3/5 Podemos obter informações sobre o mesmo disco de várias outras maneiras: • através do /proc (/proc/ide/hda/geometry): voabaixo:˜# cat /proc/ide/hda/geometry physical 58168/16/63 logical 3649/255/63 • através do hdparm (hdparm -g /dev/hda) voabaixo:˜# hdparm -g /dev/hda /dev/hda: geometry = 3649/255/63, sectors = 58633344, start = 0 Para este mesmo disco, abaixo estão dois benchmarks, realizados em duas regiões diferentes do disco. (/dev/hda1) --> ˜# bonnie++ -d /tmp -s 512 -r 256 -u 1000 -g 1000 Version 1.01d ------Sequential Output------ --Sequential Input- --Random-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP voabaixo 512M 10036 98 34252 19 6901 6 8376 79 44517 13 164.2 0 ------Sequential Create------ --------Random Create--------Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 843 99 +++++ +++ +++++ +++ 848 99 +++++ +++ 4424 100 (/dev/hda7) ˜# bonnie++ -d /home/mario/tmp -s 512 -r 256 -u 1000 -g 1000 Version 1.01d ------Sequential Output------ --Sequential Input- --Random-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP voabaixo 512M 10015 96 24966 12 7333 6 8090 76 37599 9 168.8 0 ------Sequential Create------ --------Random Create--------Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 857 99 +++++ +++ +++++ +++ 894 99 +++++ +++ 4627 99 Caracterı́sticas de Performance Um arquivo de performance é caracterizado pelos seguintes parâmetros: • Command Overhead • Posicionamento mecânico c 2001 Mário Olı́mpio de Menezes Página 4/5 – Seek Time – Latência • Velocidade de Transferência de Dados • Operação de buferização (look ahead/write cache) Nota: Todos estes parâmetros contribuem para a avaliação de performance. Existem outros parâmetros que contribuem para a performance de um sistema real; esta especificação tenta definir as caracterı́sticas mı́nimas, não a vazão do sistema, que dependerá do sistema e da aplicação. Os valores de “command overhead”, posicionamento mecânico (seek time e latência) são obtidos das especificações dos discos. A velocidade de transferência de dados pode ser dividida em Taxa de transferência instantânea disco-buffer e Taxa de Transferência disco-buffer sustentável. A primeira é dada por (Núm. de Setores em uma Trilha) * 512 * (Revoluções/seg). A Taxa de Transferência Sustentável é dada por: Sustained Transfer Rate = A B+C +D onde: A = (Num. Setores de Dados por Cilindro) * 512 B = ((Num. de Superfı́cie por Cilindro) - 1) * (Tempo de Movim. da Cabeça) C = (Tempo de mudança do cilindro) D = (Num. Superfı́cie) * (Tempo de uma revolução) Para o Deskstar 60GXP modelo de 60GB e para a trilha mais externa, estes valores são: • Num. de Setores de Dados por cilindro = 4680 • Num. de Superfı́cie por Cilindro = 6 • Tempo de Movim. da Cabeça = 1.4ms • Tempo de Mudança do cilindro = 1.8ms e produz uma taxa de transferência sustentável de 40.8MB/s Para o mesmo disco e para a trilha mais interna, estes valores são: • Num. de Setores de Dados por cilindro = 2238 • Num. de Superfı́cie por Cilindro = 6 • Tempo de Movim. da Cabeça = 1.4ms • Tempo de Mudança do cilindro = 1.8ms e produz uma taxa de transferência sustentável de 19.5MB/s c 2001 Mário Olı́mpio de Menezes Página 5/5