Aliasing de contexto de cache de dados Hyper-Threading

Oct 31 2020

no manual da intel, a seção a seguir me confunde:

11.5.6.2 Modo compartilhado No modo compartilhado, o cache de dados L1 é compartilhado de forma competitiva entre os processadores lógicos. Isso é verdadeiro mesmo se os processadores lógicos usarem registros CR3 e modos de paginação idênticos. No modo compartilhado, os endereços lineares no cache de dados L1 podem ter um alias, o que significa que um endereço linear no cache pode apontar para diferentes locais físicos. O mecanismo para resolver o aliasing pode levar ao thrashing. Por esse motivo, IA32_MISC_ENABLE [bit 24] = 0 é a configuração preferida para processadores baseados na microarquitetura Intel NetBurst que suportam a tecnologia Intel Hyper-Threading.

como intel, use VIPT (igual a PIPT) para acessar o cache.

como o aliasing de cache aconteceria?

Respostas

1 PaulA.Clayton Nov 01 2020 at 20:18

Baseado no Intel® 64 e IA-32 Architectures Optimization Reference Manual , novembro de 2009 (248966-020), Seção 2.6.1.3:

A maioria dos recursos em um processador físico é totalmente compartilhada para melhorar a utilização dinâmica do recurso, incluindo caches e todas as unidades de execução. Alguns recursos compartilhados que são endereçados linearmente, como o DTLB, incluem um bit de ID de processador lógico para distinguir se a entrada pertence a um processador lógico ou a outro.

O cache de primeiro nível pode operar em dois modos, dependendo de um bit de ID de contexto:

  • Modo compartilhado: o cache de dados L1 é totalmente compartilhado por dois processadores lógicos.
  • Modo adaptativo: no modo adaptativo, os acessos à memória usando o diretório da página são mapeados de forma idêntica nos processadores lógicos que compartilham o cache de dados L1.

O aliasing é possível porque o bit de ID do processador / ID de contexto (que é apenas um bit indicando de qual processador virtual veio o acesso à memória) seria diferente para diferentes threads e o modo compartilhado usa esse bit. O modo adaptativo simplesmente endereça o cache como seria de se esperar, usando apenas o endereço da memória.

Especificamente como o ID do processador é usado ao indexar o cache no modo compartilhado parece não estar documentado. (XORing com vários bits de endereço forneceria dispersão de índices de tal forma que índices adjacentes para um segmento de hardware mapeariam para índices mais separados para o outro segmento. Selecionar uma ordem de bits diferente para segmentos diferentes é menos provável, pois isso tenderia a aumentar o atraso. Dispersão reduz a frequência de conflito dada a localidade espacial acima da granularidade da linha de cache, mas menos do que a granularidade do tamanho médio.