Cache Miss – O Que É e Como Reduzir
Apesar do armazenamento em cache ser um dos mecanismos mais vitais na otimização do desempenho de um site, o fenômeno do cache miss pode aumentar o tempo de carregamento dos dados, resultando em altas taxas de rejeição e uma experiência de usuário desagradável.
Este artigo vai te ajudar a entender melhor o que é o cache miss, como isso funciona e como reduzir a ocorrência desse problema. Também vamos conhecer melhor os diferentes tipos de cache miss.
O Que É Cache Miss e Cache Hit?
O cache miss, ou falha de cache, acontece quando o sistema de cache não encontra os dados solicitados armazenados em sua memória. Contrariamente, o cache hit, ou êxito de cache, acontece quando o cache localiza em sua memória os dados requeridos, respondendo à solicitação com sucesso. A taxa de cache hits deve ser maior que a taxa de cache misses para que um sistema de cache seja considerado eficiente. Uma das melhores formas de fazer isso é diminuir e evitar o cache miss.
Taxa de Cache Hit e Penalidades de Cache Miss
O processo envolvendo o uso do cache permite que sistemas de computadores, incluindo sites, aplicativos web e aplicativos móveis, armazenem cópias de arquivos em um local temporário, chamado de cache.
O cache fica próximo da unidade de processamento central (CPU) e da memória principal. Este último elemento serve como uma memória dinâmica de acesso aleatório (DRAM), enquanto o cache serve como uma forma estática de memória de acesso aleatório (SRAM).
A SRAM conta com um tempo de acesso menor, sendo o mecanismo perfeito para melhorar o desempenho de uma página ou aplicação. Isso acontece porque o cache irá automaticamente armazenar a versão estática do conteúdo do site na primeira vez em que um usuário visitar essa página da web.
Sendo assim, a cada vez que o usuário voltar a visitar a página, o dispositivo utilizado por ele não precisará refazer o download de todo conteúdo do site novamente. O cache assume essa função e processa a solicitação de acesso, entregando o conteúdo já armazenado em sua memória — o que é muito mais rápido.
Geralmente há três técnicas de mapeamento de cache que podem ser escolhidas:
- Direct-mapped cache. O cache diretamente mapeado é a técnica mais simples, já que mapeia cada bloco de memória em uma linha específica de cache.
- Fully-associative cache. A técnica de cache totalmente associativa permite que qualquer bloco da memória principal seja armazenado em qualquer linha de cache que esteja disponível no momento do mapeamento.
- Set-associative cache. O mapeamento de cache associativo por conjuntos combina as duas técnicas anteriores. Desse modo, consegue organizar as linhas de cache em conjuntos, ou grupos, aumentando as ocorrências de cache hits.
Para ajudar a garantir um sistema de cache eficiente, os donos e desenvolvedores de sites podem monitorar suas penalidades quanto a ocorrências de cache miss, e as taxas de sucesso conquistadas com cache hits.
Penalidades do Cache Miss
Uma penalidade de cache miss faz referência ao atraso de carregamento da página causado por uma ocorrência de cache miss. Sendo assim, a penalidade indica o tempo extra que o cache precisou utilizar para localizar e carregar as informações a partir da sua memória.
Geralmente, a hierarquia de memória consiste em três níveis, que afetam o quão rápido as informações conseguem ser localizadas e enviadas com sucesso. Abaixo está indicada a hierarquia de memória comumente encontrada em um sistema de cache:
- Cache L1. Apesar de ser o menor em termos de capacidade, o cache primário é o mais fácil e rápido de ser acessado. O L1 armazena conteúdos recentemente acessados, e tem unidades de memória determinadas em cada núcleo da CPU.
- Cache L2. O nível de cache secundário é maior que o L1 mas menor que o L3. De mesmo modo, leva mais tempo para ser acessado quando comparado com o L1, mas carrega mais rapidamente que o L3. Um cache L2 possui uma memória designada em cada núcleo da CPU.
- Cache L3. Geralmente chamado de cache de último nível (LLC – Last-Level Cache) ou de banco de dados principal, o cache de nível L3 é a maior e mais lenta unidade de memória. Todos os núcleos de uma CPU compartilham um L3.
Quando um cache miss acontece, o sistema de cache precisa realizar buscas mais aprofundadas nas unidades de memória da CPU para encontrar a informação desejada. Em outras palavras, se o cache não consegue localizar os dados solicitados no nível L1, ele irá buscar pelo cache de nível dois, o L2.
Quanto mais níveis de cache o sistema precisa verificar, mais tempo ele leva para responder à solicitação do usuário visitante. Isso resulta em um aumento na taxa de cache miss, principalmente quando o sistema precisa buscar os dados armazenados no banco de dados principal (L3).
Agora vamos analisar os quatro tipos de cache miss:
- Compulsory miss. A falha compulsória, também chamada de cache miss de primeira referência ou cold start (começo frio), acontece quando o dono de um site ativa o sistema de cache pela primeira vez. Cache misses são inevitáveis nesses casos, pois os sistemas de cache ainda não possuem nenhum dado armazenado em seus blocos de memória.
- Capacity miss. A falha de capacidade indica que esse tipo de cache miss acontece quando o cache não consegue conter todos os dados solicitados para executar um programa. As causas mais comuns pro cache miss com falha de capacidade incluem blocos de cache completamente ocupados e configurações de funcionamento dos programas maiores do que o tamanho disponível no armazenamento do cache.
- Conflict miss. Esse tipo de cache miss é conhecido como uma falha de conflito, colisão ou interferência. Conflict cache misses acontecem quando um sistema de cache passa por outro sistema de cache com técnicas de mapeamento diferentes. Por exemplo, quando vão de um ambiente de cache fully-associative para set-associative, então para direct-mapped.
- Coherence miss. Casos de cache miss relacionados a falhas de coerência, também conhecido como cache miss de invalidação, acontece quando o acesso de certos dados é feito em linhas de cache inválidas. Isso pode ser resultado de atualizações na memória feitas a partir de processadores externos.
Taxa de Cache Hits
A taxa de cache hits mostra a porcentagem de solicitações encontradas com sucesso no cache. O cálculo dessa taxa é feito através de uma razão, isto é, dividindo o número de cache hits pelo número total de cache hits e cache misses — e então multiplicando o valor final por 100.
Taxa de cache hits = cache hits / (cache hits + cache misses) x 100
Por exemplo, se um site tem 107 cache hits e 16 cache misses, o responsável pela administração do site deve dividir 107 por 123, o que resulta em 0,87. Multiplicando esse valor por 100, chega-se ao resultado de 87% como a razão de cache hits.
Qualquer valor acima de 95% indica uma excelente taxa de cache hits. Dito isso, verifique as configurações de cache do seu site caso esta relação esteja abaixo de 80%.
Apesar do monitoramento da taxa de cache hits ser essencial para todos os sites, fazer o cálculo de seu valor manualmente não é a melhor opção. Graças aos plugins de cache, como o LiteSpeed Cache, WP Rocket, WP Super Cache, e W3 Total Cache, donos e gestores de sites podem automatizar este processo.
Como Reduzir as Ocorrências de Cache Miss?
Problemas com relação a cache hits e cache misses são comuns no mundo do desenvolvimento de sites.
Os casos de cache miss desaceleram sites porque a CPU precisa aguardar certo tempo para que o cache localize e resgate na DRAM as informações solicitadas pelo visitante.
O único inconveniente da taxa de cache hit é que ela não informa ao dono do site os custos de latência e consumo de banda-larga envolvidos nos processos de cache hits. Isso acontece porque uma solicitação respondida com sucesso irá contar como um hit, independente de quanto tempo levou para a informação ser obtida.
Por este motivo, uma alta taxa de cache hits nem sempre indica uma estratégia de cache eficiente. Sabendo como reduzir os casos de cache miss, os donos e desenvolvedores de sites podem entender melhor como seus sistemas de cache realmente funcionam.
Vamos verificar três métodos para reduzir ocorrências de cache misses.
Opção 1. Aumente o Cache Lifespan
Como mencionado anteriormente, um caso de cache miss acontece quando a informação solicitada pelo visitante não pode ser encontrada no cache. Isso acontece por diversos motivos, como por exemplo, a expiração dos dados armazenados.
O cache lifespan é o intervalo de tempo entre a criação de uma cópia do conteúdo em cache até o momento em que é feita a limpeza desse cache. A configuração padrão costuma ser de 10 horas, mas donos e gestores de sites podem alterar esse valor, configurando um tempo de “vencimento” do cache que seja adequado às suas necessidades.
Por exemplo, um site que cuja atualização está agendada para ser feita mensalmente, pode não se beneficiar com um cache lifespan curto, como de um dia ou uma semana. O processo diário ou semanal é desnecessário neste caso, pois o site não terá novas informações para serem exibidas nesse pequeno intervalo de tempo.
Além disso, isso pode desencadear ainda mais ocorrências de cache misses, pois o sistema irá limpar o armazenamento e então precisará recarregar todos os arquivos perdidos novamente. Portanto, é recomendado que o tempo de vencimento, ou cache lifespan, seja calculado e configurado de acordo com o cronograma de atualizações do site.
Se você atualiza seu site duas vezes por semana, configure um cache lifespan diário. Caso você atualize o site a cada poucos minutos, um tempo de expiração de hora em hora pode ser mais adequado.
Utilizando um plugin de cache, a atualização do lifespan exige apenas alguns poucos cliques. Ainda assim, localizar essa configuração pode ser um pouco complexo, pois cada plugin possui uma forma própria de nomear e exibir essa funcionalidade.
Por exemplo, a configuração do cache lifespan no plugin LiteSpeed Cache está localizada na aba Cache, na informação denominada TTL.
Os donos de site podem configurar o tempo de expiração do cache para:
- Páginas públicas. Elas incluem a maior parte das páginas de um site. Os valores possíveis para o TTL (tempo de vida) de páginas públicas são uma hora (3.600 segundos), um dia (86.400 segundos) ou duas semanas (1.209.600 segundos). Como novos conteúdos são raramente enviados a essas páginas, opte por um TTL mais longo.
- Páginas privadas. Esta seção permite que os donos de sites modifiquem o tempo específico para o vencimento do cache de suas páginas privadas. Indicamos configurar o TTL com valores entre 60 e 3.600 segundos para obter o melhor desempenho possível nestes casos.
- Página inicial. Configure o cache lifespan para a página inicial de seu site nesta seção. O valor TTL para esse caso deve ser maior do que 30 segundos.
- Feeds. O feed inclui o blog e as seções de comentários. Sendo assim, os caches do feed ajudam a garantir conteúdos atualizados para os leitores. O valor do TTL para estas páginas deve estar acima dos 30 segundos.
- Representational State Transfer (REST). A seção da Transferência Representacional de Estado permite que o dono do site determine o tempo de validade do cache para solicitações da REST API. Nestes casos, o REST TTL deve ser maior do que 30 segundos.
- Páginas de Erro HTTP. Esta opção define o TTL das páginas de códigos de status HTTP 404, 403 e 505. O valor padrão é de 3.600 segundos. Um cache lifespan curto é bastante adequado para páginas de erro 404, enquanto as páginas de erro HTTP 403 e 505 podem utilizar um período de tempo maior.
Os usuários do plugin WP Super Cache encontram as configurações do cache lifespan na seção avançada, localizando as informações de expiração. Para isso, navegue pelo menu Advanced → Expiry & Garbage Collection → Cache Timeout.
Usuários que utilizam o W3 Total Cache podem verificar as configurações na seção de cache de objetos, basta acessar a aba Object Cache → Default lifetime of cache objects.
Dica do Especialista
O recurso de cache de objetos (LSMCD) reduz grandemente o tempo que o cache leva para localizar e carregar as informações solicitadas, assim melhorando a velocidade das respostas do seu site em até 10%.
No plugin WP Rocket, localize a seção Cache Lifespan contida na aba Cache.
Dica do Especialista
Mantenha o valor do seu cache lifespan entre 10 e 12 horas caso seu site utilize nonces (números arbitrários). Por padrão, nonces são válidas por apenas 12 horas. Sendo assim, a configuração irá acionar o sistema de cache para que ele crie cópias dos arquivos depois de limpar os dados antigos, evitando nonces inválidas.
Opção 2. Otimize as Políticas de Cache
As políticas de cache, ou políticas de substituição, definem as regras quanto à forma do cache remover as cópias dos arquivos armazenadas em sua memória. Indicamos que faça testes com diferentes políticas de cache para encontrar uma que seja ideal para seu site.
First In, First Out (FIFO)
O algoritmo FIFO (primeiro a entrar, primeiro a sair) remove as primeiras entradas de dados que foram adicionadas, independentemente de quantas vezes o sistema de cache tenha acessado essas informações. O esquema FIFO se comporta como uma fila, onde os dados posicionados no topo dela são os primeiros a serem deletados.
Num sistema de cache que contém os itens A, B, C e D, o item A será aquele com dados cuja data de criação é a mais antiga. Se novos dados forem adicionados no armazenamento do cache, a política FIFO irá remover o item A para abrir espaço para os novos dados.
Abaixo exibimos uma ilustração de como esse processo funciona:
A política FIFO é ideal para sistemas em que os padrões de acesso de dados rodam progressivamente ao longo de todo o conjunto de dados. Isso acontece porque essa configuração garante que todas as entradas contidas no cache são novas e possuem mais chances de serem acessadas múltiplas vezes.
Last In, First Out (LIFO)
A política LIFO significa “último a entrar, primeiro a sair”, ou seja, ela remove do cache as entradas de dados que foram adicionadas mais recentemente. Em outras palavras, o esquema LIFO se comporta como uma pilha, ou um amontoado, em que os dados posicionados no final da lista são os primeiros a serem eliminados.
Em sistemas de cache contendo itens A, B, C e D, o item D é a entrada mais recente da lista. Sendo assim, o algoritmo LIFO irá remover os dados de D para acomodar um eventual item E.
Aqui está uma ilustração desse processo:
Com este padrão de comportamento, o LIFO pode ser a política de cache ideal para sites que tendem a acessar o mesmo conjunto de dados repetidamente. Isso porque o LIFO vai garantir que os dados mais frequentemente utilizados estarão sempre disponíveis no armazenamento em cache.
Least Recently Used (LRU)
A política LRU (utilizados menos recentemente) remove do cache os itens que não foram utilizados por mais tempo. Não confunda o LRU com o FIFO, já que o LRU leva em consideração os cache hits antes de remover os dados.
Abaixo indicamos como esta política de substituição de cache funciona:
- Em um cache que contém itens A, B, C e D, o item A é o que foi usado há mais tempo.
- Devido à taxa de cache hits para os itens A e C, a sequência irá alterar a ordem para B, D, A e C.
- Agora o item B indica os dados que foram utilizados há mais tempo. Neste caso, o cache irá remover o item B e criar espaço para armazenar o novo item E.
A política de substituição LRU é ideal para sites que tendem a reutilizar dados recentes em um período de tempo relativamente curto. Esse algoritmo evita substituir os dados mais utilizados ao posicioná-los longe do topo da lista.
Most Recently Used (MRU)
O algoritmo MRU remove os itens acessados mais recentemente, mantendo os itens antigos em cache. De todo modo, o uso dessa política de cache pode ser complicado. Mesmo que um cache hit aconteça em entradas recentes, o MRU irá removê-las da próxima vez em que precisar liberar espaço para novas entradas.
Abaixo você confere como este sistema MRU de substituição de cache funciona:
- Em um sistema de cache contendo os itens A, B, C e D, o item D representa a entrada utilizada mais recentemente. Sendo assim, o MRU irá remover o dado D para acomodar o novo item E.
- Se houver uma solicitação para acessar o item B, o cache irá localizar e responder à solicitação com ele. Consequentemente, a sequência da lista será A, C, E e B, e o item B passa a ser o item utilizado mais recentemente.
- Supondo que um novo item F precise ser adicionado ao sistema, o cache irá remover o item B para inserir o item F no armazenamento.
A ilustração abaixo demonstra o processo:
Dito isto, este algoritmo de “utilizado mais recentemente” desempenha muito bem em certos casos. Por exemplo, o MRU ajuda a remover recomendações depois que clientes compram os produtos ou serviços que foram anteriormente recomendados a eles.
Opção 3. Expanda a Memória RAM
Outra dica para reduzir a ocorrência de cache misses é aumentar a sua memória principal (memória de acesso aleatório – RAM).
A memória do cache funciona através da cópia de dados da memória RAM, onde ficam armazenados os programas utilizados em tempo real pela CPU. Quanto maior a capacidade da memória RAM, mais dados ela consegue alojar.
Além disso, uma memória RAM grande ajuda a garantir que o cache não deixará de armazenar nenhum dado importante, o que resulta em menos ocorrências de falhas de cache.
O principal problema em expandir a memória RAM é o custo. Geralmente esse processo envolve o upgrade do plano de hospedagem web.
Vamos ver os planos cloud da Hostinger como exemplo. O plano Cloud Startup oferece 3 GB de RAM, já o plano Cloud Professional conta com uma memória RAM de 6 GB, enquanto o maior dos planos dessa categoria, o Cloud Enterprise, vem com 12 GB de memória RAM.
Na Hostinger, todos os nossos planos são escaláveis, ou seja, é simples sair de um plano e ir para outro maior. Independente do tipo de hospedagem que você escolher — seja Cloud, VPS ou host WordPress — o processo para ir de um plano para outro é muito rápido. Assim, você não precisa se preocupar com downtimes prolongados que podem tirar seu site do ar.
Descubra mais sobre a alocação de memória RAM do seu plano de hospedagem em nosso site. Além disso, nossa equipe de Sucesso do Cliente ficará feliz em te ajudar a entender mais detalhes sobre nossos planos de hospedagem.
Conclusão
O armazenamento em cache permite que sites e aplicativos web melhorem sua velocidade de carregamento e desempenho. As técnicas set-associative, fully-associative, e direct-mapped são três abordagens de mapeamento que os donos e gestores de sites podem utilizar para aproveitar os benefícios do sistema de cache.
Uma falha de cache, ou cache miss, acontece quando a informação solicitada pelo visitante não é encontrada no cache. Os diferentes tipos de cache miss incluem falhas compulsórias, conflitivas, de coerência e de capacidade.
É vital manter suas ocorrências de cache miss baixas, já que as penalidades tidas com altas taxas de falhas de cache podem prejudicar a experiência dos usuários e aumentar a taxa de rejeição do seu site. Vamos revisar rapidamente as formas de reduzir cache misses:
- Aumente o tempo de vida do cache – cache lifespan. Isso garante que dados importantes sempre estarão armazenados na memória do cache. Combine o lifespan cache com o cronograma de atualizações do site, para ocorrerem quase que simultaneamente, melhorando a eficiência do sistema.
- Otimize as políticas de cache. As políticas de cache definem as regras de remoção de dados do armazenamento em cache. Teste esquemas de algoritmos diferentes até encontrar o que for melhor para o seu sistema de cache.
- Expanda a capacidade da memória RAM. Como a memória do cache se alimenta dos dados contidos na memória RAM, possuir uma capacidade RAM maior ajuda o cache a armazenar mais arquivos.
Esperamos que essas dicas sejam úteis. Mesmo assim, não hesite em deixar um comentário na seção abaixo caso ainda possua alguma questão referente à redução de cache misses.