A afinidade da CPU é importante em dois cenários: o mais comum é simplesmente quando a carga de trabalho se beneficia consideravelmente do cache da CPU e há contenção de recursos suficiente para mover as tarefas pelos núcleos ou CPUs, o que faz com que cada CPU precise invalidar o cache e reconstruí-lo. Uma versão mais extrema disso acontece em sistemas com uma arquitetura de memória não uniforme (NUMA) em que os bancos de RAM estão fisicamente conectados a uma CPU específica, que sempre terá acesso mais rápido a essa memória.
Em geral, para esse tipo de problema, você realmente quer monitorá-lo primeiro para ver se é um problema - não há motivo para mexer no agendamento da CPU se o seu aplicativo estiver com E / S - o que pode ser tão simples quanto executar e observando a coluna da CPU para ver se os trabalhos estão pulando. Há também alguns trabalhos básicos de configuração do sistema, garantindo que qualquer bloco de memória que você acessa pesadamente possa realmente se encaixar na quantidade anexada a qualquer CPU.
Para testar, a maneira mais fácil de definir afinidade é usar o utilitário taskset . Você também pode querer olhar libnuma como numactl fornece controles independentes para alocação de CPU e memória e, mais importante, o A biblioteca libnuma fornece uma maneira programática para seus aplicativos solicitarem alocações favoráveis: por exemplo, você pode querer solicitar que um grupo de encadeamentos que compartilham certas estruturas de dados sejam alocados a outros núcleos no mesmo CPU, em vez de ter que sofrer o impacto de desempenho. sobre uma interconexão.