como funciona o cache em processadores Intel Xeon com hyperthread

1

Estou executando alguns experimentos em um banco de dados de pesquisa no EC2 usando uma instância c1.xlarge. Tanto quanto eu posso dizer, o c1.xlarge usa 8 CPUs virtuais hyper-threaded. A Amazon também diz que esta instância usa um processador físico da "família Intel Xeon".

Mais uma vez, o sistema tem 8 processadores, 4 funcionários e 4 outros (gerenciador de bloqueio, comunicador, 2 sequenciadores). Portanto, temos um thread de 1 para 1 para a correspondência da CPU. O experimento que está sendo executado está em um ponto de verificação. Estamos criando um segmento 9 para obter um ponto de verificação e avaliar seu efeito na taxa de transferência. Os resultados são previsíveis quando este nono segmento é atribuído a uma das CPUs que contém um dos quatro funcionários ou gerenciador de bloqueio - a taxa de transferência cai. No entanto, quando colocamos esse segmento 9 em um dos processadores restantes, esperamos não ver nenhum efeito, já que esses encadeamentos não são afunilamentos do sistema e não devem afetar os encadeamentos do trabalhador. No entanto, estou vendo queda na taxa de transferência e estou procurando uma explicação.

Eu comecei a suspeitar que pode haver um problema se o thread de verificação gerado em um thread de não-trabalho é de alguma forma invalidando o cache dos threads de trabalho. Eu não tenho uma boa compreensão de como funciona o cache nesta instância EC2 específica ou no processador Intel Xeon e, portanto, estou procurando uma explicação de como esse armazenamento em cache funciona, em particular como ele funciona em um sistema de hyper-threaded. Os dois processadores em um cache de compartilhamento de processador hyperthreaded? Os threads compartilham o cache entre os processadores?

Consegui encontrar um manual da Intel que diz que os processadores Intel Xeon das séries 3000 e 5000 usam um "cache inteligente de segundo nível que permite o compartilhamento de dados entre dois núcleos para reduzir o tráfego de memória". É isso que a instância pode estar usando? Nesse caso, isso significa que todos os 8 vCPUs compartilham o cache?

    
por user2713719 06.12.2013 / 23:20

1 resposta

4

Como existe uma camada de virtualização entre o sistema operacional do servidor e o hardware com o EC2, não há garantia de que todos os 8 threads de suas vCPUs estejam sendo executados na mesma CPU física. Tentar medir coisas como acertos de cache ou padrões de dentro do convidado é um exercício de futilidade. Você não tem visibilidade do hardware real.

Uma vCPU não representa um núcleo de CPU físico e 8 vCPUs não representam uma única CPU física com 8 núcleos lógicos. Certamente, o agendador de CPU para a maioria dos hipervisores tentará agendar threads do mesmo convidado para executar no mesmo núcleo em um sistema com vários processos, mas não há garantia.

    
por 06.12.2013 / 23:32