lshw e lscpu discordam sobre caches - o que é certo?

lshw e lscpu discordam sobre caches - o que é certo?

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 lshwdiz

*-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 lscpuafirma

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 -afalar:

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 Cachesignifica que o cache é compartilhado entre os (quatro) núcleos (e Internal Cacheo 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 lscpusão mais precisas porque incluem todos os três níveis de cache, L1, L2 e L3. Parece que lshwfoi 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 lshwusa o termo External Cachepara 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."

informação relacionada