Relação entre linha de cache e página de memória

  1. Se eu estiver correto, uma página em uma memória principal é a menor unidade de unidade para transferência de dados entre a memória principal e um dispositivo de armazenamento externo, como um disco rígido. Uma linha de cache de uma memória principal é a menor unidade para transferência de dados entre a memória principal e os caches de CPU.

  2. Eu me pergunto se um tamanho de página é sempre ou melhor ser um número natural do tamanho da linha do cache? Se o tamanho de uma linha de cache é de 64 bytes e o tamanho de uma página de memória é de 4 KB, então cada página tem 4 KB / 64 bytes == 64 linhas de cache.

  3. Uma página e uma linha de cache são objetos fixos em uma memória? Ou eles são apenas qualquer bloco contíguo de uma memória de um certo tamanho, que pode começar e flutuar em qualquer lugar dentro da memória?

  4. É sempre que uma linha de cache não pode abranger mais do que uma página, ou seja, parte de uma linha de cache está em uma página e a outra parte da linha de cache está em outra página?

Obrigado.

Comentários

  • As respostas às suas perguntas dependem muito da arquitetura da CPU.

Resposta

  1. Uma linha de cache é a menor unidade com a qual você pode tocar na memória física. Ou seja, quando você lê / grava 1 byte, uma linha de cache completa que o contém é lida no cache da CPU e escrita de volta. Observe que mesmo as instruções que ignoram o cache para gravar (instruções de streaming efêmero) gravam em tamanhos de linha de cache. Dependendo da CPU, os tamanhos das linhas de cache são normalmente 32/64/128 bytes. Quando as páginas de memória são gravadas no disco, elas são gravadas por completo. Isso acontecerá quando a pressão da memória estiver muito alta ou com processos de hibernação (e possivelmente para outros usos). Eles também serão lidos inteiros quando necessário novamente. Isso ocorre principalmente porque o kernel não tem como saber se a página está parcial ou totalmente usada. Outras operações de leitura / gravação de armazenamento externo podem ter granularidade arbitrária (por exemplo: fwrite (..)).

  2. O tamanho da página depende da CPU / GPU. Para a maioria das CPUs, os tamanhos de página serão de pelo menos 4 KB e geralmente suportam uma combinação de 4 KB / 64 KB / 2 MB / 4 MB / 16 MB / 1 GB (não necessariamente todos suportados ao mesmo tempo). O tamanho sempre será uma potência de dois.

  3. Tanto uma página quanto uma linha de cache são contíguas e precisam ser alinhadas aos seus respectivos tamanhos. Uma linha de cache de 64 bytes está sempre alinhada a 64 bytes e uma página de 2 MB está sempre alinhada a 2 MB.

  4. Por causa do # 3, uma linha de cache nunca pode abranger 2 páginas, pois os tamanhos de página sempre será maior do que uma linha de cache e sempre será um múltiplo do tamanho de uma linha de cache.

Veja esta excelente fonte para uma riqueza de informações sobre memória: http://lwn.net/Articles/250967/

Comentários

  • É esta resposta ainda é relevante em 2020? Esses tamanhos mudaram?
  • Pelo que eu sei, esses valores continuam relevantes hoje. Todas as CPUs x86 e x64 modernas usam 64 bytes por linha de cache e 4KB continua sendo o tamanho de página mais comum no Windows e no Linux. Para dispositivos embarcados, verifique o manual interno do processador para obter detalhes sobre o que é compatível.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *