Ao ler esta postagem no blog do Kubernetes sobre o gerenciador de CPU da Intel, ele menciona que você pode evitar o tráfego entre soquetes tendo CPUs allocated on the socket near to the bus which connects to an external device
.
O que significa tráfego entre soquetes e quais problemas ele pode causar? Esses são meus palpites:
- Uma CPU de um soquete precisa acessar um dispositivo conectado a um barramento que só é acessível a CPUs em outro soquete, portanto, as instruções para esse dispositivo devem ser gravadas na memória para serem executadas por uma CPU nesse outro soquete
- Uma CPU de um soquete precisa acessar um dispositivo conectado a um barramento que só é acessível para CPUs em outro soquete, então as instruções para esse dispositivo são enviadas diretamente para uma CPU neste outro soquete para serem encaminhadas ao dispositivo (não tenho certeza se isso é mesmo possível)
Os autores da postagem do blog do Kubernetes apenas falam sem sentido tentando reinventar a roda - mais um PBS (sistema de lote portátil), que eles chamam de "gerenciador de CPU".
Respondendo à pergunta: "O que significa tráfego entre soquetes e quais problemas ele pode causar?" - é necessário dizer primeiro, que se trata de Computadores Multiprocessadores , ou seja, sistemas de computadores com duas ou mais CPUs e soquetes de CPU respectivamente. Os sistemas multiprocessados estão disponíveis em duas arquiteturas diferentes: SMP (multiprocessamento simétrico) e AMP (multiprocessamento assimétrico) .
A maioria dos sistemas multiprocessadores disponíveis no momento são sistemas de arquitetura SMP. Esses sistemas têm a chamada memória compartilhada que é visível para CPUs físicas independentes como memória principal comum. Existem dois tipos de sistemas de acordo com o tipo de interconexão física das CPUs: barramento de sistema e chave de barra transversal.
Diagrama do sistema SMP com interruptor de barra transversal:
Diagrama do sistema SMP com barramento do sistema:
A maioria dos sistemas SMP tem conexão de CPUs do tipo barramento de sistema e a postagem no blog do Kubernets é sobre sistemas desse tipo.
Sistemas SMP com conexão de CPU de barramento de sistema têm vantagens e desvantagens. A desvantagem mais significativa desses sistemas é que eles são sistemas NUMA (acesso não uniforme à memória) . O que isto significa. Cada soquete de CPU associa fisicamente seu próprio banco de memória, mas o kernel do Linux não consegue distinguir essa associação em SMP - os bancos de memória são vistos para o Linux como memória integral única. Mas, apesar desse fato, surge o fenômeno NUMA - a interoperação de uma CPU física com endereços de seu próprio banco de memória física não é tão rápida quanto com banco(s) de memória associado(s) a outro soquete(-s) de CPU. Assim, desejamos naturalmente evitar o uso por uma CPU física de tais endereços na memória principal comum do SMP que pertençam ao banco de memória física conectado a outra CPU física.
A parte "Limitações" da postagem do blog Kubernates refere-se ao fenômeno NUMA como problema de "tráfego entre soquetes" (citação):
A propósito, a incapacidade de atribuir um thread a alguma CPU definida que "está mais próxima" de algo é bastante natural. O kernel do Linux vê todos os núcleos de CPU de CPUs físicas como processadores SMP comuns iguais, pois não consegue distinguir CPUs físicas de computadores SMP. Existem algumas tentativas ruins de evitar o uso de núcleos de CPU que estão "mais distantes" usando sinais de "cache quente" e "cache frio", mas não funciona efetivamente devido à natureza dos sistemas SMP.
Por favor, leia adicionalmente: