Estou tentando descobrir detalhes sobre caches (em particular quais caches são compartilhados entre núcleos e quais não são) e me deparei com uma inconsistência.
sudo lshw
diz
*-cache:0
description: L1 cache
physical id: a
slot: Internal Cache
size: 64KiB
capacity: 64KiB
capabilities: synchronous internal write-back
*-cache:1
description: L2 cache
physical id: b
slot: External Cache
size: 8MiB
capabilities: synchronous internal write-back
mas lscpu
afirma
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
Não me preocupo muito com a adição de instruções e cache de dados, mas para onde foi o L2?
Observado em uma máquina rodando Ubuntu 10.10, ou para uname -a
falar:
Linux name 2.6.35-32-generic #66-Ubuntu SMP Mon Feb 13 21:04:32 UTC 2012 x86_64 GNU/Linux
Esta é uma questão geral, mas observe que nem a resposta mais precisaespecificação do fabricantenão consegui encontrar nemWikipédiatenha os detalhes necessários.
Pergunta bônus não relacionada: External Cache
significa que o cache é compartilhado entre os (quatro) núcleos (e Internal Cache
o oposto)?
Responder1
Obrigado por adicionar informações extras sobre o processador à sua pergunta. Ajuda saber que os exemplos que você postou referem-se a umIntel Core i7-920 Processor
.
As informações fornecidas por lscpu
são mais precisas porque incluem todos os três níveis de cache, L1, L2 e L3. Parece que lshw
foi minimamente modificado para refletir a adição de um cache L3 pela Intel às suas CPUs. Em vez de exibir informações sobre todos os três níveis de cache, as informações sobre o tamanho do cache L3 são aparentemente relatadas como cache L2.
Presumo que as especificações que você observou não incluíam cache L1 e L2 porque dentro de uma determinada microarquitetura eles são todos iguais. Por exemplo, para Nehalemisso é"Cache/núcleo L1 de 64 KB (dados L1 de 32 KB + instrução L1 de 32 KB) e cache/núcleo L2 de 256 KB.".
Acredito que dar a cada núcleo seu próprio L1 e L2 com um único L3 comum muito maior foi introduzido pela primeira vez como parte doNehalem (microarquitetura)(em novembro de 2008?).
Não sei por que lshw
usa o termo External Cache
para se referir à L3. Mas isso me parece enganoso, já que o cache L3 está no chip da CPU e não é o que eu considerariaexterno. Novamente, é como tentar usar software antigo para descrever hardware mais recente e, ao mesmo tempo, fazer alterações mínimas no software.
(Provavelmente mais poderia ser aprendido observando o código-fonte real, mas não tive tempo de tentar fazer isso.)
Finalmente, sim, o cache L3 é compartilhado entre os núcleos/threads. A seguinte citação é do artigo da Wikipedia com link acima, "O Hyper-threading é reintroduzido junto com uma redução no L2, que foi incorporado como L3 Cacheque é utilizável por todos os núcleos."