Biblioteca / Conteúdo preservado

Cache L2

Memórias
O Cache L2

O cachę secundário, que é do que estamos tratando aqui, nada mais é do que uma porçăo de memória RAM estática muito mais veloz que as RAM's dinâmicas que compőem a memória principal.

E porque entăo toda a memória năo é feita desses chips?

Porque săo muitíssimo mais caros, ocupam um grande espaço e porque uma pequena quantidade dessa memória interposta entre a CPU e memória principal já provoca uma extraordinária "aceleraçăo" do sistema. Como essa aceleraçăo é feita é o que veremos agora. O cachę consiste em dois conjuntos de chips de RAM estática (SRAM - Static RAM). O primeiro é aquele que todos conhecemos, săo aqueles "quadrados" presentes nas placas mais modernas ou nos módulos de expansăo de cachę, săo os chips de armazenamento de dados. O segundo conjunto consiste , em geral, de chips em encapsulamento DIPP (Dual In-line Pin Package) chamados de TAG RAM. A funçăo da TAG RAM é armazenar informaçőes sobre os dados contidos nos chips de armazenamento.

O cachę armazena dados em linhas, e cada linha é composta por 16 bytes. O tipo mais simples de cachę é o chamado cachę direto. Nesse cachę a memória é dividida em blocos do mesmo tamanho que o próprio cachę, e cada bloco subdividido em linhas. Assim, numa máquina que tenha 16 MB de RAM e um cachę L2 de 512 kB, a memória principal seria dividida logicamente em 32 blocos de 512 kB cada. Suponhamos agora que seja solicitada a leitura da oitava linha do décimo bloco, năo estando o dado no cachę, desta forma a busca será feita na memória principal e, enquanto os dados săo transferidos para a CPU , o circuito controlador do cachę copia os 16 bytes da linha para os chips de armazenamento de cachę, exatamente na posiçăo correspondente ŕ ocupada pela linha no bloco de onde ela foi lida (ou seja: a cópia vai ocupar a oitava linha do cachę). E depois copia na oitava posiçăo da TAG o número do bloco de onde a linha foi lida, no caso o número DEZ (como pode ver, a TAG cria um "índice", por assim dizer, dos dados contidos nos chips de armazenamento). Depois de algum tempo a TAG está repleta de índices e os chips de armazenamento cheio de linhas, cópias exatas das linhas correspondentes na memória principal. A diferença é que no cachę as linhas podem estar embaralhadas, ou seja, depois da décima linha do quinto bloco da memória principal, pode estar armazenada a décima-primeira linha do vigésimo bloco, e depois dela a décima-segunda linha do terceiro bloco e assim por diante. Năo há confusăo porque a qualquer momento pode-se saber de que bloco veio aquela linha consultando a TAG RAM, que armazena os índices dos blocos de onde cada linha foi copiada.

Agora imagine que o cachę está cheio de dados e a CPU solicita que o conteúdo de um determinado endereço de memória seja lido. Antes que o circuito de controle da memória RAM comece a procurar o dado (e paralelamente a isso), o controlador do cachę intercepta o endereço e verifica a que linha e de que bloco ele pertence. Em seguida, consulta a TAG e verifica se na posiçăo correspondente ŕ linha solicitada está armazenado o número do bloco no qual a CPU solicitou a leitura. Se os números coincidirem, acontece o chamado cachę hit. Significa que o cachę contém uma cópia exata da linha onde está o dado solicitado e este fornece, entăo, o referido dado imediatamente ŕ CPU, numa mínima fraçăo do tempo que seria gasto para lę-lo da memória RAM, e qualquer processo de procura que o controlador da RAM principal tenha iniciado é interrompido. Falando assim parece que um acerto no cachę depende de muita sorte. Mas as aparęncias enganam, isso porque quando se está trabalhando com determinado aplicativo as solicitaçőes ŕ RAM se repetem com muita freqüęncia e o controlador de cachę tem uma atitude proativa, lendo, da RAM principal, adiante dos endereços solicitados pela CPU. Em conseqüęncia disto o cachę vai se enchendo de cópias de dados contidos em endereços muito próximos. Resultado: A probabilidade estatisticamente comprovada de um cachę hit em um sistema com 512 kB de cachę e 16 MB de RAM é da ordem de 98% (e mesmo em sistemas com 64 MB de RAM esse índice é superior aos 90%, ainda que com "apenas" 512 kB de cachę secundário). Ou seja, de cada cem acessos, apenas dois corresponderăo a dados que năo estăo no cachę e, portanto, devem ser lidos na lenta memória RAM. Nos 98 acessos restantes, haverá cópias dos dados no cachę, que serăo fornecidas ŕ CPU muito mais rapidamente. E como, no uso diário, a maior parte do tempo gasto por nossas máquinas é consumida em acessos ŕ memória, seu desempenho melhora consideravelmente.

Até aqui tratamos dos efeitos do cachę sobre a leitura de dados, esclarecerei agora o funcionamento da escrita, fonte da maior parte da confusăo feita por algumas pessoas.

Há dois tipos de cachę: o "write back" e o "write through", as placas-măe modernas e de boa qualidade vęm com o cachę "write back" instalado. O "write through" é um cachę que funciona apenas nas operaçőes de leitura, como descrevi acima, năo interferindo nas operaçőes de escrita. Quando se trata de escrever um dado na memória RAM, isto é feito do modo convencional, ou seja, envolvendo os eventuais estados de espera da RAM principal, mas copiando tb para o cachę (quer dizer: o dado além de ser escrito na RAM principal é escrito ao mesmo tempo no cachę também), uma vez que um dado escrito possui alta probabilidade de ser requisitado em seguida. Assim, no que TANGE Ŕ ESCRITA na memória, a única diferença entre máquinas que usam cachę write through e máquinas que năo usam cachę algum é que nas primeiras, enquanto o dado é escrito na memória RAM, toda a "linha" onde ele foi gravado é copiada no cachę. Logo, se mais adiante for solicitada sua leitura, a cópia já estará no cachę e a leitura será mais rápida. O cachę do tipo "write back" acelera tanto o procedimento de leitura quanto o de escrita. Já que, quando a CPU ordena que um dado seja escrito em um certo endereço da memória RAM, o circuito controlador do cachę intercepta a solicitaçăo e, ao invés de escrever o dado nos lentos chips DRAM da memória principal, o escreve nos rápidos chips SRAM do cachę e segue em frente. Mais adiante, quando a CPU der uma folga nos acessos ŕ memória, a memória principal será atualizada copiando-se nela os dados previamente escritos no cachę.

Evidentemente controlar um sistema "write back" é muito mais complicado, já que o controlador de cachę tem que manter um rigoroso controle do que está no cachę e do que está na memória RAM, pois enquanto a memória RAM năo é atualizada, posiçőes de memória de mesmo endereço no cachę e na memória RAM contęm valores diferentes e năo cópias do mesmo dado. É preciso entăo recorrer a um bit adicional na TAG RAM, o chamado "bit sujo", que tem o funcionamento bastante similar ao de um bit de paridade. Sempre que um dado é escrito apenas no cachę e ainda năo na memória principal, o controlador de cachę faz o "bit sujo" correspondente assumir o valor um. Assim que a memória RAM é atualizada, e o dado é nela copiado, o "bit sujo" reassume o valor zero. Assim, para saber se o mesmo endereço no cachę e na memória RAM contęm dados iguais ou diferentes, basta verificar o "bit sujo": se vale um, os dados săo diferentes e devem ser atualizados. Se zero, săo cópias idęnticas. Cachęs do tipo "write back" săo mais rápidos e eficientes que cachęs "write through". Porém săo mais caros (devido ŕ lógica mais complexa de controle), por isso năo é o tipo de cachę adotado em placa-măe mais baratas. ATENÇĂO: Fabricantes de placas vagabundíssimas por vezes năo incluem cachę algum e ainda tęm a cara-de-pau de colocar no BIOS uma indicaçăo "write back", que aparece na tela de inicializaçăo. Algumas vezes săo tăo safados que incluem cópias de chips (encapsulamentos plásticos vazios) no lugar onde deveriam existir os verdadeiros chips de cachę. Cuidado!

Aurélio



Hard&Cia - 2001
Dúvidas, sugestőes e críticas gerais? Hard&Cia Mail