1. Abstract e Agenda
Comentários sobre o Conceito de Lines
Uso de Múltiplos Níveis de Cache nos Mainframes IBM z196
Quantas Lines serão necessárias, para os Programas terem Boa
Performance?
Qual a influência que se pode esperar dos Sistemas Operacionais z/OS?
O que fazer, então, para Otimizar Programas e Melhorar a Performance?
1 - 11min – Conceitos de Lines
Evolução, desde o /360-85
2 - 6min – Quantas Lines são possíveis?
Caches em diversos Níveis hierárquicos
3 - 4min – Quantas Lines são necessárias?
Locality Effect x Padrão de Referência
4 - 9min – Detalhes no uso de Lines
Influência do Sistema Operacional z/OS
5 - 10min – O que fazer para otimizar?
2min Opções de Compiladores [C/C++]
3min Traces e Opções de DeBugging
5min CPUMF + HIS dão “feed-back”
6 - 5min – Conclusões, Agradecimentos e Perguntas
2. Uso de Lines nos z196
Caches em
Diversos
#1 = Conceitos de Lines Níveis?
#2 = Quantas Lines são possíveis?
#3 = Quantas Lines são necessárias? z/OS?
#4 = Detalhes no uso de Lines
#5 = O que fazer para otimizar?
Traces?
#6 = Conclusões DeBugging?
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
3. Começou no
System/360-85
JOHN LIPTAY
PAK-KIN MAK
CHARLES WEBB
. . .
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
4. Chip de 8 PUs do Power795
L1 I 32KB
L1D 32KB
L2 256KB
L3 32MB
CS 8TB
L3 L3 L3 L3
Até 32 por CEC
256 PUs
L3 L3 L3 L3
3,72 GHz 6Core
4,0 GHz MaxCore
4,25 GHz TurboCore
4,404 GHz z10
5,208 GHz z196
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
5. #1 = Conceitos
de Lines
BOOK
16
384Gb
16
384Gb
Prot.Keys
BUS 16B
LINE 256B
323056GB
323056GB
322288GB
321520GB
32 704GB Proibida cópia ou divulgação sem
HSA 16GB permissão escrita do CMG Brasil.
6. Chip dos SCs dos z196
4 x 24MB = 96MB
em cada Chip SC
2 x SCs = 192MB
em cada Book,
4 Books no CEC
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
7. Chip das 4 PUs dos z196
L1 I 64KB
L1D 128KB
L2 1,5MB
L3 24MB
L4 192MB
CS 3TB
LineSize 256B
6 em cada MCM
24 PU por Book
96 PU por CEC
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
8. #2 = Quantas Lines
são possíveis?
L1 I 64KB
L1D 128KB
L2 1,5MB
L3 24MB BHT
L4 192MB
PHT
BTB 3 4 5
DUPLA
L1 I 256 CACHE D
CACHE I
L1D 512 + TLB1I + TLB1D
DAT DUPLA
LineSize 256B +
TLB2
L2 6.144
L3 98.304/4 Proibida cópia ou divulgação sem
L4 786.432/24? permissão escrita do CMG Brasil.
9. #3 = Quantas Lines
são necessárias?
INICIALIZAÇÃO
POUCO USO MAS
MUITO USO 64KB são 256 Lines: Suficientes???
LOOPS Locality of Effect
Jump Around, Self Modifying Code!
NEVER MIND... Calls, SVCs, LE
VARIÁVEIS +++
128KB são 512 Lines: Suficientes???
Padrão de Referência
Buffers, RENT TLBs!
Cache Unfriendly . . .
VARIÁVEIS ---
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
10. Exemplo de CPUMF em z10
Supervisor% e Problem%
5070%? 3050%?
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
11. Exemplo de CPUMF em z10
Cache Hit%, por Tipo
8090%? 3050%?
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
12. Unidades Funcionais dos z196
demandam ainda mais Lines!
IFB XU IFB Instruction Fetch & Branch prediction
ICM Instruction Cache & Merge
TLB IDU Instruction Decode Unit
ISU Instruction Sequence Unit
FXU FiXed-point Unit
ICM
BFU Binary & Hex Floating-point Unit
DU Decimal Unit
IDU LSU Load-Store Unit for Operands
5 Finished
3 Decoded
XU Translation Unit (DAT)
RU Recovery Unit
ISU
CPUMF
DUPLA DUPLA
RU
13. #4 = Detalhes no
uso de Lines
Dirty bit
Endereço Excl/Shr
Físico L.R.U. 256 Bytes
PKey
“Dirty” bit Algo foi alterado na Line
Excl/Shared A PU requisitou Exclusividade
L.R.U. A Menos Recentemente Usada
Prot. Key Chave de Proteção de Memória
L4? Em qual dos 4 L4 reside a Line (2 bits)
Card? Em qual Central Storage? Local / Other
Endereço? Em qual Endereço Absoluto?
LP? Em qual Partição Lógica?
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
14. #5 = O que fazer
para otimizar?
Aproximar:
Códigos
Variáveis
Reduzir:
Jumps
Calls
SVCs
Eliminar:
Traces
DeBugging
Algoritmos!
PrefetchData?
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
15. 4,54 3,84 20 30cm
#6 - Conclusões:
• Os Limites Físicos impõem restrições
CycleTime ns GHz
z10 0,227 4,404 Freqüência: > 18%
z196 0,192 5,208 Ciclo: < 15%
Capacidade:> 60%
• Opções de Compiladores . . .
• Otimizar Códigos, aproveitando as
vantagens já existentes!
• Objetivar “Desperdício ZERO!”
Proibida cópia ou divulgação sem
permissão escrita do CMG Brasil.
Abstract e Agenda para a Apresentação no CMG Brasil – São Paulo, 14 de Agosto de 2.012 Esta Palestra de 45 minutos procurará apresentar os Conceitos de Lines em Caches de Múltiplos níveis, como nos MainFrames IBM z196, mas não pretende ser um Tutorial. Serão analisadas a Evolução das Lines , suas Possibilidades e Limitações , convergindo para Recomendações que objetivem obter melhor Desempenho nas Máquinas.
Iniciamos mostrando alguns Conceitos de Lines em Caches, sua origem no System/360 Modelo 85 em 1.9 68 e sua Evolução e Estado da Arte em chips modernos, como os das Máquinas IBM Power 795 e z 196 , indicando a sua tendência . Após mostrarmos quantas Lines são possíveis , estimulamos o raciocínio de quantas seriam necessárias , para os Programas terem boa Performance. Recomendações, em linhas gerais, são dadas ao final, objetivando otimizar Programas e Dados.
No Projeto inicial , descrito por John Liptay , a IBM decidiu usar Caches de 16 ou 32KB, divididos em 16 setores e com Lines de 64 bytes, obtendo CacheHits da ordem de 80% . Se apenas a Tecnologia do Mod 75 permitia que fosse de 30 a 80% mais rápido que o Mod 65 , os Caches do Mod 85 permitiam que fosse de 220 a 380% mais rápido! [até 540% , com o Dispositivo Opcional de Multiplicação Rápida] A última coluna da Tabela mostra o que se podia obter graças à adição de Pipelines no Mod 91 , a primeira máquina Super Escalar: de 240 a 1.290% ! Tecnologia muito promissora.
Esta Micro Fotografia do RedBook do Power7 , está aqui apenas a título de comparação , completando a Tendência na Evolução de Lines. São até 8 PUs no Chip, mais seus respectivos Caches: L1 I (32KB), L1 D (32KB), L 2 (256KB) e L 3 (32MB), acessando a Memória de até 8TB. Nela, foram destacadas as áreas ocupadas pelos Cores, com seus respectivos Caches L1 I e L1 D , os Caches externos L2 e, ocupando a maior área, o Cache compartilhado de nível 3 , num CEC de até 32 chips, ou 256 PUs. Mencionamos as Freqüências em que operam estas Máquinas, comparando-as com a z10 e a z196 , descrita detalhadamente, a seguir.
Começamos por exibir um CEC z196 aberto, apenas para localizar os 4 Books, mostrando seus Modelos e respectivos Limites de Memória. No centro, vê-se como os 4 Caches de nível 4 se interligam em estrela , e como se conectam aos Boards de Memória, em cada Book. Detalha que o barramento é de 16 bytes, necessitando 16 Ciclos para transferir cada Line de 256 Bytes e menciona Chaves de Proteção. Ao focalizar o MCM ( M ulti C hip M odule), faremos a seguir um Zoom nos chips de SC ( S torage C ontroller) e PU ( P rocessing U nits).
Cada Book contém um MCM que possui 6 chips quádruplos de Processadores, mais os 2 chips de Storage Controllers, detalhado acima. Em cada SC , o Cache de nível 4 é dividido em 4 partes de 24MB, permitindo acesso simultâneo . Além de servirem os até 24 Processadores do MCM , os SC s também se comunicam com a Memória Local no Book e com os seus semelhantes em outros 3 Books, e atendem toda demanda de Transferência de Dados de I/O, para até 1.024 Canais de Dados. Outras funções importantes também ficam aí, tal como o ETR ( E xternal T imer R eference).
Detalhamento do chip de PU s da máquina z196: Cada PU conta com 64 KB de Cache L1 para Instruções e sua respectiva TLB1 I , mais 128 KB de Cache L1 para Dados e sua respectiva TLB1 D , mais um Cache Unificado Privativo L 2 de 1,5 MB. O grupo de 4 PUs do chip compartilha um Cache L3 de 24 MB, procurando reduzir tráfego externo. Cada um dos 2 Co Processadores de Criptografia e Compressão de Dados tem 2 Caches de 16 KB. Observar a área ocupada pelos Caches: ~80%! Faremos, a seguir, um Zoom para “dentro” dos circuitos das PUs no chip, analisando seus componentes e observando os Caches de Nível 1 .
Nesta MicroFotografia de PU do z196 estão destacadas as várias Unidades Funcionais, seus limites e relacionamentos. Ver Glossário destas Unidades, no Slide 12 . Para manter seu Cycle Time, a Tecnologia atual restringe o Cache de Instruções do Nível 1 a apenas 64KB , ou seja, 256 Lines. Da mesma forma, o Cache de Dados de Nível 1 possui apenas 128KB , ou seja, 512 Lines. Cabe perguntar: Serão suficientes ? [Estes valores são os mesmos para as máquinas z10 , mas ambos tinham 256KB nas máquinas z9 e anteriores de menor Cycle Time]
Analisando um Programa “ normal ”, vemos que: As Rotinas de Inicialização , geralmente, são pequenas e não revisitadas (Datas, Arquivos); A maior parte do Código é de pouco uso, porém, geralmente, revisitada (CALL, PERFORM, BASR); O núcleo do Código, que nos interessa otimizar , geralmente é pequeno e muito usado, envolvendo “Loops” e a parte principal do Algoritmo; Há Códigos com partes que raramente são necessárias (Rotinas de Exceção, ON UNITs); Quanto às Constantes e Variáveis , geralmente há um pequeno grupo muito usado e a grande maioria pouco usada e bem dispersa . Repete-se a pergunta: Serão suficientes ?
Os dados destas Planilhas foram obtidos através das ferramentas CPUMF (disponível nas máquinas z10 e z196 somente) e a STC HIS ( H ardware I nstrumentation S ervices). No primeiro e segundo Exemplos, observamos a máquina executando Funções do Sistema Operacional Servidor, em estado de Supervisor , da ordem de 70% do tempo ativo , de forma que os Códigos dos Usuários foram responsáveis por 30% do uso de CPU. No terceiro exemplo, em Partição Lógica menor e mais otimizada, vemos que o estado de Supervisor e de Problema praticamente se equilibram em 50% . Estima-se que a “disputa” por Lines seja proporcional a estas percentagens.
Observando agora em relação aos Caches+TLBs: No primeiro Exemplo vemos o impacto , no Código Executável , nos Dados e TLB s, pelo uso de PUs dedicadas e compartilhadas , pois menos de 10% dos dados vieram dos Caches e as Traduções de TLBs usaram mais de mil Ciclos! No segundo Exemplo, 99% das Instruções e mais de 50% dos Dados provém dos Caches. Nos demais Exemplos, focamos as Lines que foram “ Changed ”, nos Caches L1 I e L1 D , ajudando a entender os impactos negativos dos Códigos Auto Alteráveis. Daí decorre que as Lines são usadas menos do que o que foi antecipado anteriormente.
Observar que a parte de cima é feita “ In Order”, enquanto que a parte de baixo, após a ISU , é feita “ Out Of Order”, se possível . Decidido pela IFB o que “fetchar”, as Instruções na ICM migram do Cache L1 I para a IDU via buffers, de onde são Decodificadas e entregues à ISU , que detecta dependências e, sendo possível , as entrega a uma das duas LSU , ou uma das duas FXU , ou à BFU ou à DU (além de Ponto Flutuante, as duas últimas Unidades também executam Multiplicação e Divisão de Ponto Fixo e Decimal, respectivamente). Todo Operando é manipulado pela LSU , onde se encontra o Cache L1 D , e é Traduzido pela XU+TLB . Estas Funções dos PipeLines demandam mais Lines!
Sugerimos as TAGs (ou Atributos!) que precisam ser anexadas a cada Line: Se foi alterada , necessitando ser copiada prá Memória, ou não; [PU In validation Broadcast!] Se foi solicitada com Exclusividade por uma PU, ou pode ser compartilhada por outras PUs; Se se trata da menos recentemente usada, indicando que poderá ser substituída no Cache; Para facilitar a conferência com a PSW Key, cada Line “carrega” consigo a Protection Key; Todos os componentes necessários para diferenciar o Endereço fisicamente no CEC.
Para obter vantagens , devemos escolher as melhores Opções dos Compiladores e: Aproximar : Códigos e Variáveis Reduzir : Jumps, Calls e SVCs Eliminar : Traces e Opções de DeBugging Além de implementar os melhores Algoritmos! As Opções de PrefetchData devem ser estudadas com muito cuidado, devido à possibilidade de que os dados PreFetched venham a desabrigar Lines ainda úteis, nos Caches cada vez menores , considerando a sempre crescente vazão das PUs.
Como o limite desta Tecnologia se aproxima rapidamente , é aconselhável que alguns Analistas iniciem uma “Caça ao Desperdício”, para eliminar , ou pelo menos reduzir , todo consumo in desejável e des necessário! Compiladores, como o C/C++, já oferecem a possibilidade de gerar Código específico para a Arquitetura de uma dada máquina, otimizando a execução deste mesmo Código. Outras facilidades já estão disponíveis há tempos nas novas Máquinas, aguardando serem ativadas em benefício dos Usuários.
Agradecemos a oportunidade, oferecida pelo CMG Brasil , de trazer este assunto e seus Conceitos à consideração da Comunidade Acadêmica e dos Profissionais responsáveis pelas disciplinas de Análise de Performance e Plan ejamento de Cap acidade. À disposição para Perguntas e eventuais esclarecimentos adicionais, obrigado. Se desejar maiores detalhes e/ou quiser trocar informações, favor contatar : [email_address]
Detalhes de uma Apresentação sobre o percentual de uso das Lines de Caches por Códigos conhecidos (BenchMark). Como nem todo byte das Lines são usados pelos Códigos, o resultado é baixa eficiência. Daí decorre a recomendação de juntar o mais possivelmente, tanto Códigos quanto Dados .