domingo, 20 de maio de 2012

O que é memória Cachê?

O que é memória Cachê?


     O que é memória Cachê?

Enquanto os processadores tornaram-se quase 10 mil vezes mais rápidos desde o 8088 (o processador usado no XT), a memória RAM, sua principal ferramenta de trabalho pouco evoluiu em performance. Desde o lançamento dos processadores 386 as memórias não eram mais capazes de acompanhar a velocidade do processador, com isso quando era necessário buscar ou gravar um dado na memória o processador tinha que ficar esperando o dado e com a evolução dos processadores esse problema só se agravou.
Para solucionar este problema utilizou-se um tipo ultra-rápido de memória, a memória cache, que serve para armazenar os dados mais frequentemente usados pelo processador evitando desta forma que o processador precise aguardar por dados que estejam na memória RAM. Com essa técnica o desempenho das máquinas melhorou sensivelmente.
Existem três tipos de cache, chamados de cache primário, ou cache L1 (level 1), e cache secundário, ou cache L2 (level 2), e cache L3 (level 3).

      Cache L1

     O cache primário é embutido no próprio processador e é rápido o bastante para acompanhá-lo em velocidade. Sempre que um novo processador é desenvolvido é preciso desenvolver também um tipo mais rápido de memória cache para acompanhá-lo. Como este tipo de memória é extremamente cara (chega a ser algumas centenas de vezes mais cara que a memória RAM convencional) usamos apenas uma pequena quantidade dela. O 486 traz apenas 8 KB, o Pentium traz 16 KB, enquanto o Pentium II e o Pentium III trazem 32 KB, enquanto o Athlon e o Duron da AMD trazem 128 KB.
Em alguns tipos de processadores, como o Pentium 2, o L1 é dividido em dois níveis: dados e instruções (que "dizem" o que fazer com os dados).

      ache L2

     A cache L2 é um tipo um pouco mais lento de memória cache na forma e por ser muito mais barata permite que seja usada uma quantidade muito maior. Ela é mais um caminho para que a informação requisitada não tenha que ser procurada na lenta memória principal.
Nos micros 486 o mais comum é o uso de 128 ou 256 KB de cache L2, enquanto nos micros mais modernos o mais comum é o uso de 512 KB. Dependendo do processador usado, o cache L2 pode vir embutido no próprio processador (como no Pentium II, por exemplo) ou fazer parte da placa mãe (por questões econômicas pois uma cache grande implica num custo grande).
A memória cache L2 é um dos elementos essenciais para um bom rendimento do processador mesmo que tenha um clock baixo. Um clock alto causa muito aquecimento no processador tornando-o instável. Os processadores Intel Celeron apresentam menor desempenho que seus semelhantes pois possuem cache L2 muito pequena. Um outro exemplo é o caso do Intel Xeon (para servidores) que tem apenas 1.4 GHz de clock interno e ganha de longe do atual Intel Extreme pelo fato de possuir uma memória cache de 12Mb.



      Cache L3

     Terceiro nível de cache de memória. Inicialmente utilizado pelo AMD K6-III (por apresentar o cache L2 integrado ao seu núcleo) utilizava o cache externo presente na placa-mãe como uma memória de cache adicional. Ainda é um tipo raro devido à complexidade dos processadores atuais, com suas áreas chegando a milhões de transístores por micrômetros ou picômetros de área.

      Utilização da cache

     A idéia por trás da cache é muito simples: colocar nessa memória os dados e instruções que são mais comumente utilizados pelo processador. É a regra 80/20, ou seja, 20% dos dados/instruções são usados 80% das vezes no micro.

     Assim se estes dados/instruções estiverem no cache, que é muito mais rápido que a memória RAM "normal", o desempenho do micro será muito melhor.

     Sempre que o processador precisar "ler" dados, os procurará primeiro no cache L1. Caso o dado seja encontrado, o processador não perderá tempo, já que o cache primário funciona na mesma frequência que ele. Caso o dado não esteja no cache L1, então o próximo a ser indagado será o cache L2.

     Encontrando o que procura no cache secundário, o processador perderá algum tempo mas não tanto quanto perderia caso precisasse acessar diretamente a memória RAM. Caso também não encontre no cache L2 passa para o cache L3 e assim por diante.

     O usuário não precisa se preocupar em colocar os dados mais utilizados na memória cache. Existe um circuito especifico que faz isso automaticamente chamado Controlador de cache. Este circuito tenta, inclusive, "adivinhar" quais serão os dados solicitados pelo processador.

     Se o processador precisa de uma informação e ela está no cache é ótimo pois a informação é acessada e o desempenho é alto. Quando isso acontece chamamos de cache "hit" ("acerto"), porém se a informação não estiver lá, terá que ser lida da memória RAM "normal", o que é um processo mais lento. Este caso é chamado de cache "miss" ("erro"). A idéia é fazer com que o número de cache hits seja muito maior que o número de cache misses.

     Para exemplificar, imagine que você estivesse escrevendo um e-mail e de repente precisasse de uma informação que você havia anotado em um papel.

     Se o papel estivesse sobre sua mesa, você poderia lê-lo sem perder tempo, se estivesse dentro de uma gaveta da sua mesa seria necessário algum tempo para encontrá-lo enquanto que se ele estivesse perdido em algum lugar de um enorme fichário do outro lado da sala seria preciso um tempo enorme.

     Memória cache nos processadores atuais

     O Pentium Dual Core possui 64 KB de cache L1 (32 KB de dados + 32 KB de instruções) por núcleo. O cache de memória L2 do Pentium Dual Core é de 1 MB (ou 2 MB nos modelos de 45 nm) compartilhado entre os núcleos (a Intel chama esta implementação de cache L2 compartilhado de "Smart Cache", ou "cache inteligente") .

      A título de comparação, os processadores Core 2 Duo possuem pelo menos 2 MB de memória cache L2 com diversos modelos com 4 MB e 6 MB .
Os processadores Intel Quad-Core possuem 12 MB de memória cache L2.

Técnicas de escrita de dados da cache
  • Write-Back Cache
     Usando esta técnica a CPU escreve dados diretamente na cache, cabendo ao sistema a escrita posterior da informação na memória principal. Como resultado a CPU fica livre mais rapidamente para executar outras operações. Em contrapartida, a latência do controlador pode induzir problemas de consistência de dados na memória principal, em sistemas multiprocessados com memória compartilhada. Esses problemas são tratados por protocolos de consistência da cache.

      Exemplo:
                    A escrita de um endereço é feita inicialmente numa linha da cache, e somente na cache. Quando mais tarde algum novo endereço necessitar desta linha da cache, e esta estiver ocupada, então o endereço inicial é guardado na memória e o novo endereço ocupa-lhe o lugar na respectiva linha da cache.

      Para reduzir a frequência de escrita de blocos de endereços na memória quando da substituição, é usado um bit de estado ("dirty bit"), ou seja, a primeira vez que um endereço é instanciado numa linha da cache, o valor do dirty bit é 0; quando o bloco do endereço é modificado (quando ocorre uma substituição) o valor inicial passa a '1' e diz-se que o bloco do endereço está "dirty".
Vantagens:
  • A escrita ocorre na mesma velocidade da cache;
  • Escritas múltiplas de um endereço requerem apenas uma escrita na memoria;
  • Consome menos largura de banda.
Desvantagens:
  • Difícil de implementar;
  • Nem sempre existe consistência entre os dados existentes na cache e na memoria;
  • Leituras de blocos de endereços na cache podem resultar em escritas de blocos de endereços "dirty" na memoria.
      Write-Through Cache
 
     Quando o sistema escreve para uma zona de memória que está contida na cache, escreve a informação tanto na linha específica da cache como na zona de memória ao mesmo tempo. Este tipo de caching providencia pior desempenho do que Write-Back Cache, mas é mais simples de implementar e tem a vantagem da consistência interna porque a cache nunca está dessíncrona com a memória como acontece com a técnica Write-Back Cache.
Vantagens:
  • Fácil de implementar;
  • Um "cache-miss" nunca resulta em escritas na memoria;
  • A memória tem sempre a informação mais recente.
Desvantagens:
  • A escrita é lenta;
  • Cada escrita necessita de um acesso à memoria;
  • Consequentemente usa mais largura de banda da memoria.
Conclusão

A memória cache é um tipo de memória mais rápida que a memória RAM e que influencia enormemente no desempenho dos processadores.

Bibliografia

ALVES, Abel. Memória - Parte 5.
INTEL. Quad-Core: by popular demand.
INTEL. Tecnologia Intel Dual-core. http://www.intel.com/portugues/business/technologies/dual-core.htm . Acesso em 14/05/2009.
STALLINGS, Williams. Arquitetura e organização de computadores. 5.ed. São Paulo: Pearson, 2005
WIKIPEDIA. Cache.
http://pt.wikipedia.org/wiki/Cache . Acesso em 02/05/2009.

Nenhum comentário:

Postar um comentário