Quais são os efeitos, se houver, das prioridades e políticas do agendador para threads em um cpuset não suportado?

12

Eu tenho um sistema Linux em que usamos cgroups para criar dois cpusets cpu_exclusive, A e B, e onde migramos todos os threads de usuário e todos os threads de kernel não acoplados para um cgroup conectado ao cpuset A. Os itens em execução no cpuset A têm políticas de agendador variadas prioridades variadas e há muito mais threads em execução no cpuset A do que núcleos no cpuset A.

Também há um pequeno número de processos muito ativos conectados ao cpuset B, em que o número total de threads de usuário nesses processos nunca é maior que o número de núcleos disponíveis exclusivamente no cpuset B. O objetivo é proteger essas tarefas importantes em execução no cpuset B de outras atividades na máquina e para minimizar a latência de processamento.

Nessa configuração, a política / prioridade de agendamento dos threads do usuário em execução no cpuset B tem algum efeito observável? Em outras palavras: alterar a política de agendamento dos encadeamentos cpuset B do padrão SCHED_OTHER para SCHED_FIFO ou SCHED_RR teria alguma consequência, boa ou ruim?

Parece que a resposta deve ser 'não', pois o agendador deve poder atribuir a cada thread em execução no cpuset B seu próprio núcleo dedicado, para que não haja nada para priorizar ou agendar e, portanto, a política e a prioridade relativa do B threads cpuset não importam. Por outro lado, há os tópicos encadernados do kernel e os aspectos 'domínio do planejador' com os quais se preocupar, e provavelmente outras coisas que não considerei.

As políticas de agendamento e as prioridades dos threads em execução em um cpuset exclusivo com excesso de provisionamento são importantes em algum sentido prático?

acm
fonte

Respostas:

4

O intervalo de tempo usado será importante para trabalhos intensivos da CPU que exijam persistência de cache, a menos que você bloqueie um núcleo específico para cada PID. Você pode aumentar o intervalo de tempo com a política do planejador SCHED_BATCH e melhorar o desempenho em até 300% em alguns casos, enquanto reduz a capacidade de resposta interativa. O efeito oposto de intervalos de tempo menores ocorre com SCHED_RR (que reduzirá a taxa de transferência, mas aumentará a capacidade de resposta em tempo real).

Você pode usar o schedtool para definir a política de PIDs específicos para todos os PIDs no conjunto B como um único comando. Também pode ser usado para bloquear PIDs específicos em núcleos específicos, o que seria a solução ideal, pois a persistência do cache não depende mais do intervalo de tempo, mas isso exige mais esforço, pois é necessário executar um comando schedtool separado para cada PID.

Thomas Anantharaman
fonte
1

Se cada processo tiver seu próprio núcleo, não haverá restrições de prioridade.

No entanto, se você agendar um processo que leva 30 minutos para ser executado a cada 15 minutos, será necessário priorizar, pois o processo começará a se sobrepor.

No entanto, não existe uma "melhor" política de programação.

Eles realmente dependem do que você deseja alcançar. Mas no começo, eu deixaria SCHED_OTHER, o padrão, e observaria por algum tempo antes de tentar coisas mais especializadas.

Nicolas de Fontenay
fonte