Como os threads são distribuídos entre os núcleos em um sistema multiprocessador?

1

No momento, estou verificando os limites de um aplicativo de servidor em um sistema com dois processadores de 12 núcleos, isto é, 24 núcleos. (Hyper-threading atualmente desativado).

Estou executando 12 UDP recebendo instâncias pesadas do mesmo aplicativo nessa caixa e maximiza todos os 12 núcleos de um dos dois soquetes, de acordo com o Gerenciador de Tarefas. Mas o outro soquete está ocioso. Também tentei iniciar uma 13ª instância desse aplicativo, mas ele ainda é executado no primeiro soquete já ocupado.

Por quê? Quais são as regras pelas quais os threads são agendados para os núcleos em um sistema multiprocessador?

Algumas ideias:

  • Poderia ter a ver com RSS (Receive side scaling), que está ativado e estaria envolvido na seleção de núcleos pelo menos para o segmento receptor de nosso aplicativo (mas o aplicativo também tem outros threads de trabalho pesado)? / li>
  • O RSS (ou MSI / MSI-X) está limitado a um soquete?
  • Poderia / será que uma única instância do aplicativo será executada em vários sockets ao mesmo tempo?

Detalhes do sistema:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3
  • Windows 2012 R2
por Eugene Beresovsky 20.05.2015 / 00:47

1 resposta

1

Alguns slots / dispositivos de entrada / saída se comunicam diretamente com um dos processadores (outros slots podem se comunicar com o outro). Há vantagens em fazer o trabalho gerado por esse cartão / dispositivo IO nesse processador.

Por exemplo, o DDIO funciona melhor para o processador conectado para o (s) slot (s) PCI / dispositivo IO.

    
por 20.05.2015 / 04:32