Evitando que o agendador use certos núcleos no FreeBSD

2

Parece ser possível fixar um processo em um núcleo específico por meio do utilitário cpuset(1) . É possível dizer ao agendador para evitar esse núcleo específico com todos os outros processos (atuais e futuros)?

    
por Daniel Lovasko 01.05.2017 / 22:02

1 resposta

1

Você pode ler o agendador antigo no processo Gerenciamento no Sistema Operacional do FreeBSD

O "novo" planejador ULE foi introduzido no FreeBSD 5, mas não foi habilitado por padrão até a versão 7.1. Você pode encontrar um documento descrevendo aqui . Isso dará uma boa compreensão de como o agendador funciona.

DICA: Ao jogar com a afinidade da CPU, é bom conhecer a topologia da CPU:

  $ sysctl kern.sched.topology_spec

DICA: procstat com o sinalizador -S também é útil para visão geral dos cpusets usados:

 $ procstat -a -S

E sim - você pode dizer ao agendador para "evitar" os núcleos gerenciando os "cpusets". Dê uma olhada nos exemplos da página man do cpuset (1) . Cpuset 1 é o conjunto padrão. Você simplesmente modifica esse conjunto.

Na página homem :

Modify the cpuset all threads are in by default to contain only the first 4 CPUs, leaving the rest idle:

cpuset -l 0-3 -s 1

Se imaginarmos que temos 8 CPUs, agora movemos todos os threads no cpuset padrão para o primeiro 4. À medida que modificamos o conjunto padrão (Por padrão, os processos são iniciados no conjunto 1) isso evita os núcleos restantes que são deixado ocioso.

Você pode criar um novo cpuset (ou seja, número 2) para as CPUs restantes que você atribui quando quiser usá-las.

    
por 05.05.2017 / 16:15