Que tipos de aplicativos de servidor Linux devem ter sua afinidade de CPU definida?

3

Eu estou querendo saber em quais cenários há valor na configuração da afinidade da CPU.

    
por Fantius 24.01.2011 / 15:13

2 respostas

4

Geralmente, a afinidade de CPU é usada para isolamento de processo ou para reduzir a contenção de recursos. Negociação de alta frequência é o aplicativo no qual eu uso conjuntos de CPU e blindagem da CPU , mas eu ' Também vi aplicativos em computação científica / computacional (HPC), aplicativos em tempo real e e-commerce. Aplicativos de áudio profissionais são outro exemplo comum que requer kernels em tempo real e conjuntos de afinidade de CPU.

No nível básico, o comando taskset é usado para atribuir afinidades.

Este é um tutorial para criar grupos de CPUs para aplicativos / processos específicos usando cset, que é um pouco mais organizado que o conjunto de tarefas. link

    
por 24.01.2011 / 15:36
0

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.

    
por 24.01.2011 / 16:23