You are on page 1of 80

Aula 7 03.11.

2003
Sumrio: Aspectos de desempenho da organizao da memria (continuao). Aspectos de desempenho na organizao do CPU.
Bibliografia: K. Dowd, C. Severance High Performance Computing 2nd Ed OReilly, 1998, 1-56592-312-X
;

Moral sobre as caches


Quanto maior melhor

as caches so cada vez maiores: programas pequenos e com poucos dados colocam tudo nas caches e o desempenho decresce imenso com cdigo e dados maiores (onde j no pode ficar tudo na cache) em 1992, o IBM RS/6000 colocou toda amatriz de 100x100 reais do benchmark LINPACK na cache, conseguindo um resultado equivalente ao de um CRAY. Claro que numa matriz de 1000x1000...

Alargar a ligao cache-RAM at ao tamanho de uma linha da cache (por exemplo 256 bits) Interleaving da memria - memria por bancos: acessos consecutivos so feitos bancos diferentes os acessos so pipelined: comea-se um acesso sem esperar o fim do anterior funciona melhor para acessos regulares. Os processadores RISC ao procurar no esvaziar os pipelines ajudam ...

Aumentar o desempenho da RAM

Nveis na hierarquia de memria


cache Memria virtual

CPU regs

8B

C a c h e

32 B

Memory

4 KB

disk

Register

Cache

Memory

Disk Memory 30 GB 8 ms $0.008/MB

tamanho: 32 B 32 KB-4MB 128 MB velocidade: 3 ns 6 ns 60 ns $/Mbyte: $100/MB $1.25/MB tamanho da 8 B 32 B 4 KB linha: Maior, mais lenta, mais barata

Memria virtual
A maior parte dos computadores modernos utilizam um espao de endereamento linear com a memria fsica dividida en pginas ( 512 a 8K ...)
Endereo virtual n de pgina virtual deslocamento

Tabela de pginas por processo ( composta por vrias pginas ...) endereo base da pgina fsica

endereo fsico

Motivaes para a memria virtual


Usar a RAM como Cache para o Disco
O espao de endereamento do processo pode exceder a dimenso da memria. A soma dos espaos de endereamento dos vrios processos pode exceder o tamanho da memria fsica

Simplificar a gesto de memria


Mltiplos processos residem em memria central cada um com o seu prprio espao de endereamento. S o cdigo e dados activos que esto em RAM; mais RAM pode ser atribuda se necesrio. Fornece proteco - os processos no interferem uns com os outros, porque esto em espaos diferentes e diferentes seces do espao tm permisses diferentes

Sistemas s com memria fsica


Exemplos: a maior parte dos Cray, primeros PCs, quase todos os sistemas embebidos, etc.
Memory

Physical Addresses

0: 1:

CPU

N-1:

Os endereos gerados pelo CPU referem-se directamente memria fsica

Exemplos:

Sistemas com memria virtual


Memory Page Table Virtual Addresses 0: 1: Physical Addresses 0: 1:

workstations, servidores, PCs modernos, etc.

CPU

P-1:

N-1: Disk

Transformao de endereos: Hardware converte endereos virtuais em endereos fsicos atravs de um tabela gerida pelo SO (tabela de pginas)

Tabela de pginas indica que o contedo referenciado pelo endereo virtual no est em RAM invocado um procedimento de excepo para trazer os dados para memria
o proceso corrente suspenso, outros podem retomar o SO tem controlo completo sobre a localizao das pginas

Falta de pgina

Antes das falta


Memory Page Table Virtual Addresses CPU Physical Addresses

Depois da falta
Memory Page Table

Virtual Addresses
CPU

Physical Addresses

Disk

Disk

Atendimento da falta de gina


CPU pede ao controlador

ler bloco de dim. P a partir do end. X e escrever na RAM comeando no end. Y


Ocorre a leitura

(1) Initiate Block Read

Processor
Reg

(3) Read Done

Direct Memory Access (DMA) sob controlo do I/O controller


I / O Controller assinala o fim

Cache

Memory-I/O bus (2) DMA Transfer Memory I/O controller

Interrupo SO passa o processo a READY

disk Disk

disk Disk

Motivao #2: Gesto de memria


Mltiplos processos em memria. Proteco e eventual partilha

%esp

kernel virtual memory stack

memory invisible to user code

Imagem em memria de um processo Linux/x86

Memory mapped region forshared libraries

the brk ptr runtime heap (via malloc) uninitialized data (.bss) initialized data (.data) program text (.text) forbidden

Transformao de endereos
V = {0, 1, . . . , N1} virtual address space P = {0, 1, . . . , M1} physical address space MAP: V P U {} address mapping function MAP(a) = a' if data at virtual address a is present at physical address a' in P = if data at virtual address a is not present in P page fault Processor Hardware Addr Trans Mechanism a' OS performs this transfer (only if miss) fault handler Main Memory Secondary memory N>M

a virtual address

part of the physical address on-chip memory mgmt unit (MMU)

Transformao de endereos
Parmetros
P = 2p = tamanho da pgina (bytes). N = 2n = limite do endereo virtual M = 2m = limite do endereo fsico
n1 virtual page number p p1 page offset 0 virtual address

address translation

physical address
m1 p p1 physical page number page offset 0

Tabela de pginas
Virtual Page Number

Memory resident page table


(physical page Valid or disk address) 1 1 0 1 1 1 0 1 0 1

Physical Memory

Disk Storage (swap file or regular file system file)

Transformao de endereos usando a tabela de pginas


page table base register VPN acts as table index virtual address n1 p p1 virtual page number (VPN) page offset valid access physical page number (PPN) 0

if valid=0 then page not in memory

m1 p p1 physical page number (PPN) page offset physical address

Integrao da cache e da MV
VA PA Translation Cache miss Main Memory

CPU

hit
data

A maior parte das caches so endereadas pelo endereo fsico


permite que diferentes processos tenham linhas na cache e que partilhem pginas

Transformao de endereos antes do acesso cache, o que pode envolver acesso RAM

TLB: Acelerando a transformao


Translation Lookaside Buffer (TLB)
pequena cache hardware na MMU Corresponde o n pgina virtual em n pgina fsica PTE completa para um pequeno nmero de pginas
VA CPU TLB Lookup miss hit

hit PA
Cache

miss Main Memory

Translation

data

Transformao de endereos com TLB


n1 p p1 0 virtual page number page offset virtual address

valid

tag physical page number

.
=

TLB

TLB hit
physical address

tag
valid tag data

index

byte offset

Cache

cache hit

data

Programa TLB-buster
var x[ 1.. 1000000] of real; for i := 1 to 1000 do for j:= 1 to 1000000 step 10000 do y := x [ j + i ]; 1000 TLB miss Total : 1 000 000 TLB misses

Pelo contrrio var x[ 1.. 1000000] of real; for j:= 1 to 1000000 y := x [ i ];

Consumidores de RAM
Fork e exec
vfork copy on write sticky bit
pginas so carregadas a partir da rea de swap muitos sistemas ignoram este bit, salvo para ficheiros remotos

Cache do sistema de ficheiros

Consumidores de RAM
Cache do sistema de ficheiros
% fixa de memria varivel de acordo com a actividade de paginao sistemas mistos (alternam CPU bound com IO bound do-se bem com sistemas varveis algumas aplicaes (por ex. SGBD) no gostam de variaes da dimenso da cache de blocos

Exec()
process-specific data structures (page tables, task and mm structs) same for each process 0xc0 %esp physical memory kernel code/data/stack stack kernel VM demand-zero process VM .data .text

Executar um novo programa no processo corrente:

Memory mapped region for shared libraries brk runtime heap (via malloc) uninitialized data (.bss) initialized data (.data) program text (.text) forbidden

libertar vm_area_structs e page tables antigas. Criar novas vm_area_structs e page tables. stack, bss, data, text, shared libs. text and data suportadas pelo fich executvel . bss and stack initialized to zero. Inicializar PC para o ponto de entrada de .text
Linux carregar as pginas medida que forem precisas.

libc.so
demand-zero .data .text

Para criar um novo processo usando fork:


cpias das mm_struct, vm_area_structs e page tables do pai
nesta altura, os processos partilham todas as pginas. Como conseguir espaos separados sem copiar todas as pginas de um espao para outro?

Fork()

copy-on-write
pginas de reas writabel read-only assinalar estas reas na vm_area_structs como private copy-onwrite. Escritas nestas pginas por qualquer processo originam page faults. O fault handler reconhece o copy-on-write, faz uma cpia da pgina e restaura as permisses de escrita write permissions. As cpias so deferidas at serem absolutamente necessrias (i.e., quando um processo modifica uma pgina partilhada).

Swapping
Quando os nveis de paginao sobem acima de um dado valor, pode-se optar por varrer a totalidade (ou uma percentagem significativa das pginas do processo) o processo continua running e a sua prioridade tende a subir o swapping provoca um impacto muito negativo na performance do sistema e os SO modernos tendem a evit-lo

Alternativas ao swapping
HP-UX tem uma chamada serialize() que uma indicao ao sistema de VM que o processo corrente tem uma imagem muito grande e no deve ser corrrido em conjunto com outros processos com o mesmo atributo (desactivao do processo). Esta indicao s usada quando h escassez de memria

Indicadores de gesto de memria (Linux 2.2)


Memfree: total de memria livre Os indicadores seguintes tm valores default baseados na memria fsica, mas esto sujeitos a tuning
freepages.high (def=786)
se memfree < freepages.high, o sistema comea a reclamar pginas suavemente

freepages.low (def=512)
se memfree < freepages.min, o sistema reclama paginas de forma agressiva

freepages.min (def=256)
s o kernel pode obter pginas

Dimensionamento da rea de swap


Receita antiga: swap area 3 vezes a RAM (mnimo 1x) Com o crescimento da RAM, somar o seguinte:
25% da RAM + shared memory + Num. De utilizadores * memria privada de cada utlizador +

Memria central
Total das imagens residentes Num. De utilizadores * reas privadas 10 a 20 MB para o kernel tamanho da cache fixa de ficheiros, se aplicvel 20 % da RAM para cache de ficheiros 10 % para processos de rede memria para NFS

Mtricas de memria globais


Memria livre (em KB ou pginas) memria virtual activa nos ltimos dezenas de segundos memria disponvel (fsica, kernel, cache de ficheiros) nmero de processos bloqueados em VM page-in; page-out (ritmo e n) swap-in e swap-out nmero de desactivaes nmero de faltas de pgina

Mtricas locais aos processos


VM reads e VM writes page faults (memria; disco) nmero de swaps ou desactivaes

Sintomas de engarrafamento
Memria livre baixa e muitas desactivaes muitos processos boqueados em VM muitos acessos ao disco de paginao os problemas de memria podem parecer problemas de CPU ou disco uso de chamadas ao sistema caras (fork, exec)

Solues
Hardware (mais memria, mais swap discs) Software ( reduzir o tamanho do kernel, da cache de ficheiros, reduzir locks de memria, reorganizar trabalhos, Resource manager, janelas no X, sticky bit) Optimizao da aplicao (evitar fork, exec, mmap, procurar fugas de memria Tuning do sistema: ajustar parmetros dos algoritmos de VM

Desempenho do CPU
Organizao do CPU RISC versus CISC Princpios de desenho de CPUs Paralelismo ao nvel das instrues Previso de saltos Execuo fora de ordem e renomeao de registos Execuo especulativa Microarquitectura do Pentium II

Caminho de dados da arquitectura de Von Neumann

Evoluo dos conjuntos de instrues do CPU


Os primeiros computadores (<1960) tinham conjuntos de instrues muito simples Introduo faseada de instrues mais complexas: FP, ... IBM 360: famlia de CPUs: mais lentos interpretados, mais rpidos hardware ... Interpretao de instrues (micro-cdigo): ROM muito mais rpida que a RAM ... Final dos anos 70: VAX: centenas de instrues, 200 formas diferentes de especificar os operandos Microprocessadores tiveram a mesma evoluo (Motorola 680x0 - microcdigo)

RISC versus CISC


Transpor ideias de S. Cray para mquinas de baixo de gama: IBM 801 RISC:
Patterson/Berkeley/RISC1 -> SPARC Hennessy/Stanford/MIPS -> Silicon Graphics MIPS

"Folha de papel branca"- sem preocupaes de compatibilidade; objectivo: desempenho


Instrues simples para serem executadas rapidamente Reduced Instruction Set Computer (CISC: VAX, IBM 360)

CPU
Processadores RISC tempo para executar um = num. de instrues X n de ciclos X durao de um ciclo programa

depende da tecnologia a relao entre eles clara: existente quanto mais simples as instrues menos demoram a executar e mais so precisas para compilar um programa escrito numa linguagem de alto nvel

Anlise efectuadas a um conjunto de programas

Fortran 1971 * Afectaes If call ** for 51 10 5 9

C 1982 38 43 12 3

Pascal 1982, 1978 45 29 15 5

PL/I 1972 55 17 17 5

goto outras

9 16

3 1

0 6

1 5

* 95 % dos casos expresses com 1 ou 2 operandos ** 90 % dos casos com menos de 3 parmetros Donde se conclui que os programadores escrevem programas compostos por instrues simples. Anlises semelhantes efectudas ao cdigo gerado pelos compiladores permitiram concluir que estes no tiram muito partido das instrues mquinas muito sofisticadas

Metodologia advogada para o desenho do conjunto de instrues de um novo processador: anlise das aplicaes para determinar as operaes fundamentais desenhar o "caminho de dados principal" do processador de forma a optimizar a execuo destas operaes. Obter as instrues mquina correspondentes. no introduzir instrues mquina que faam aumentar o "tempo de ciclo do caminho de dados principal" estender os princpios anteriores a outros componentes do sistema : "cache", gesto de memria, coprocessadores aritmticos

A que tipo de mquinas que a aplicao destes princpios conduziu, relativamente s suas antecessoras:

RISC
instrues simples executadas num nico ciclo de relgio instrues de formato nico a simplicidade da arquitectura permite o uso de "pipeline" na execuo das instrues no h micro-cdigo complexidade no compilador acesso memria "rudimentar" s LOAD/STORE, poucos modos de endereamento Em muitos casos, vrios conjuntos de registos

CISC
instrues de complexidade varivel, executadas em vrios ciclos instrues de formato varivel Uso de "pipeline" limitado

instrues interpretadas pelo micro-cdigo complexidade no micro-cdigo muitos modos de endereamento, todas as operaes podem fazer acesso memria um nico conjunto de registos

Comparao entre dois exemplares de cada abordagem : IBM 370/168 Ano n de instrues tamanho da memria de micro-cdigo (em Bytes) tamanho das instrues (em Bytes) 1973 VAX 11/780 1978 IBM 801 1978 Stanford MIPS 1983 55

208

303

120

54 K

61 K

2-6

2-57

Tipo de reg-reg operandos mem-reg nas intrues mem-mem

reg-reg mem-reg mem-mem

reg-reg

reg-reg

Controvrsia CISC/RISC
RISCs s tm instrues simples: para a memria s LOAD/STORE; muitos registos sobre os quais se fazem as operaes A/L Uma instruo CISC equivalente a 5 instrues RISC, mas executa 10x mais depressa? A diferena de velocidade deve-se ausncia de interpretao A velocidade da RAM e da ROM tinha-se aproximado...

Porque a que a DEC Alpha (RISC) no dominante face ao Pentium (CISC)? Compatibilidade do software Intel incorporou as ideias RISC nos seus CPUs a partir do 486
As instrues mais comuns so executadas directamente As instrues mais "exticas" so interpretadas

Porque que hoje "no h" processadores RISC?

Princpios de desenho de CPUs modernos


O RISC foi a ltima grande revoluo na forma de fazer CPUs. Ficaram consagrados os Princpios RISC Todas as instrues so executadas pelo hardware Maximizar o ritmo a que as instrues comeam a ser executadas Instrues fceis de descodificar

S LOAD e STORE referenciam a memria Muitos registos genricos O resto foi a tecnologia que permitiu aumentar o "clock"

Aumentar a velocidade
Paralelismo ao nvel da instruo
Pipelining Arquitecturas superescalares

Multiprocessadores

Mltiplas instrues por ciclo


Os primeiros processadores RISC executavam uma instruo por ciclo do relgio. Actualmente h vrias tcnicas para executar duas ou mais instrues por ciclo:

processadores superescalares
Estes processadores podem lanar, em tempo de execuo vrias operaes simultaneamente. Para funcionar ben requerem uma boa "mistura" de tipos de operaes. Exemplos: IBM RS/6000, SuperSparc, HP PA7100, DEC AXP 21064

processadores "superpipelined"
Neste caso a execuo de cada uma das fases de uma instruo subdividida em vrias partes: isto permite tornar os circuitos mais simples ( e mais rpidos) e aumentar o nmero de instrues em execuo simultnea Exemplos: MIPS R4000, DEC AXP 21064

processadores VLIW (very long instruction word)


Cada instruo mquina contm vrias instrues que podem ser iniciadas em simultneo no mesmo ciclo de relgio Exemplos: Intel i860, Intel IA-64

Pipeline com 5 andares

Pipelines A execuo de uma instruo pode ser dividida em vrias fases: F1 F2 F3 F4 F5 obteno da instruo ("fetch") descodificao da instruo obteno dos operandos execuo escrita dos resultados

limite terico: n de instrues executadas igual ao nmero de unidades independentes


F1 F2 F3 F4 F5 F5

F1 F2 F1 F2 F1 F2 F1 F2 F1 F2

F3 F4

F5

F3 F4

F5 F1 F2

F3 F4 F5

F3 F4

F5 F1 F2

F3 F4 F5

F3 F4 F5

F5 F1 F2 F1 F2

F3 F4 F5

F3 F4

F3 F4

Se cada fase demora um ciclo de relgio, havendo 5 instrues em simultn pode-se completar uma instruo por cada ciclo de relgio, mesmo que cada instruo leve 5 ciclos a executar

Outras espcies de pipeline


No acesso memria : compiladores reordenam instrues de forma ao CPU fazer coisas teis enquanto espera por um acesso ou o sistema de memria pipelined de forma a poder haver vrios acessos memria em simultneo Nas operaes de vrgula flutuante: estas operaes demoram vrios ciclos, de forma que -o compilador tenta reordenar instrues para ir fazendo enquanto espera pelo resultado - h unidades independentes para cada tipo de operao (soma, multiplicao, )

Pipeline de instrues
Os pipelines de instrues dependem da possibilidade de obter instrues previamente. Isto simples enquanto no ocorrem saltos
Os saltos ocorrem frequentemente ( uma em cada 10 instrues pelo menos) e "esvaziam" o pipeline. Por isso a maior parte dos processadores RISC executam a(s) instruo(es) que est(o) a seguir ao salto ("delayed branch"). da obrigao do compilador colocar l instruo(es) til(eis). ADD R1,R2,R1 SUB R3,R1,R3 JMP ALGURES ZERO R3 <-- esta instruo tambm executada

Pipeline (generalidades)
Nem todas as instrues ocupam todo o pipeline No h conflitos no acesso memria Andares com durao diferente Interrupes Saltos condicionais Dependncias do contedo de registos

Pipeline - caso ideal


6 andares 54 clocks para 14 clocks

Pipeline com salto

A instruo 3 um salto condicional para a instruo 15. S em 7 se decide. Em caso de se efectuar o salto o pipeline esvaziado e s em 8 a instruo 15 entra no pipelin. De 9 a 12 no se completam instrues

Performance do pipeline
K andares O tempo de um ciclo T = MAX(Ti) +d

Ti - tempo de execuo do andar I


d - tempo para movimentar dados de um andar para outro (T>>d)

Com n intrues sem saltos


Total = T(k+(n-1)) 1a instruo: K restantes n-1

Speedup=T1/Tk = nKT/(T*(k+n+1) = nk/(k+n-1) -

Abordagens para tratar os saltos condicionais


Mltiplos pipelines Pr-fetch das instrues nas duas posies Buffer de instrues (cache de instrues) Previso do salto
salta sempre/nunca salta usar o cdigo da operao taken/not taken switch histria dos saltos

Delayed branch

Utilizao do delayed branch

Previso de saltos
Um pipeline de 10 andares funciona bem em cdigo linear. Mas os programas esto cheios de saltos if (i==0) cmp i,0 k = 1; jne Else else Then: mov k,1 k = 2; jmp Next Else: mov k,2 Next:

Delayed branch
Saltos condicionais: "pipeline stalls" Saltos incondicionais
A instruo seguinte ao JMP j entrou no pipeline

Branch prediction
Esttica
Todos os saltos para trs so seguidos (loop) Todos os saltos para a frente no so seguidos (so erros e os erros ocorrem raramente)

Dinmica

Erros na previso
As aces de instrues que entraram no "pipeline" tm de ser desfeitas
Registos "escondidos" do CPU so usados para guardar valores novos/antigos

Previso dinmica
Tabela em hardware (cache) que para cada salto guarda a ltima deciso

Pipeline do 486
Fetch
D1 - Decode 1 D2 - Decode 2

EX - Execute
WB - Write back

Pipelining
Execuo de instrues dividida em vrias fases:
fetch/execute fetch/decode/fetch operand/execute/write result

Arquitecturas superescalares
Dois pipelines no Pentium pipeline-u (qualquer instruo)

Pipeline-v (instrues aritmticas simples inteiras) Pentium ao mesmo relgio era duas vezes mais rpido que o 486 se s fizesse operaes com inteiros

Arquitecturas superescalares
N pipelines completos demasiado dispendioso em hardware Muitas unidades funcionais, vrias ALUs por exemplo Compilador escalona as instrues

Arquitectura super-escalar
Exemplo Pentium II O andar S3 fornece instrues a um ritmo superior ao da execuo do S4 (vrias unidades de FP ...)

Reordenao de instrues e renomeao de registos


Dependncias entre instrues
Instruo necessita de um registo escrito por outra

Compilador, com auxlio do hardware (muitos registos escondidos, tabelas de quais so os visveis/usados)

Execuo especulativa
Programa dividido em blocos sem construes de controlo Alguns blocos comeam a ser executados mesmo sem se saber que vo ser precisos. No exemplo a leitura de evensum pode ser feita no incio do ciclo

MIPS R4000
Baseado no Stanford MIPS Famlia R2000/3000/4000/6000 R4000 (processador+MMU)
64 bits 32 registos de 64 bits 128 KB de cache

Instrues todas com 32 bits (6 bit opcode)


I: r. fonte, r. destino (2x5b); constante (16b) J: Jump endereo: 26 bits R: r.op1, r op2, reg dest (3x5b), 5b shift, 5 bit oper

Simplicidade permite pipeline muito eficaz

Pipeline MIPS 3000/4000

SPARC
Scalable Processor Arquitecture Baseada no MIPS I de Berkeley Janelas de 24 registos 2 a 32 janelas de acordo com a implementao Cada procedimento v 32 registos
Registos R0 a R7 partilhados (variveis globais) ins: R24 a R32 partilhadas com o invocador locals: R16 a R23 no partilhados outs: R8 a R15 partilhados com o invocado

Janelas de registos do SPARC

Formato das instrues


Todas com 32 bits (tipo definido pelos 2 primeiros bits)
call 30 bits de deslocamento branch sethi ( carregamento de valores FP A/L com 3 registos A/L com 2 registos e constante com 13 bits

Branch e delayed branch


A operao branch inclui
4 bits de flag (qq combinao) 1 bit ANNUL - indica se a instruo seguinte ou no executada

Pentium II
7.5 milhes de transstores microinstrues RISC-like superescalar Pentium Pro + MMX

Microarquitectura do Pentium II

Caractersticas
Pool de instrues (ReOrderBuffer) Out of order execution Previso esttica e dinmica de saltos Unidade Fetch-decode um pipeline com 7 nveis Suporta execuo especulativa Capacidade de rollback (falhas nas previses dos saltos)

Unidade fetch/decode

Unidade dispatch/execute

Moral da evoluo dos CPUs


Os princpios do RISC permitiram de 1981 a 2001 um aumento anual de performance de 50 % Recordistas de SPECint
1990 IBM Power 1 1992 HP9000 1996 DEC Alpha 1998 HP9000 2000 Pentium III 10 120 500 800 1600

You might also like