Reserva e afinidade de CPU usando o parâmetro de kernel taskset e isolcpus com JVM?

1

Precisamos que a JVM reserve um número definido de CPUs. Seguindo minha pesquisa, podemos usar tasksel junto com o parâmetro do kernel isolcpus=<CPU_ID> , para que nenhum outro processo use esta CPU.

Algumas perguntas surgem:

  • o processo precisa ser iniciado com taskset ?
  • a reserva significa que o processo só pode ser executado nessa CPU e, se houver problemas de recursos, pode se expandir para as outras CPUs?
por danidar 26.07.2018 / 17:52

1 resposta

0

Você normalmente usa taskset para restringir um processo depois que ele é iniciado. Você pode usar o pidof java para determinar o que o PID é para seu aplicativo Java e, em seguida, passá-lo para taskset :

$ taskset -p $(pidof java) --cpu-list 0-2,5

OBSERVAÇÃO: Se você tiver 6 CPUs, 0,1,2,5 atribuirá uma afinidade a essas CPUs para o PID da sua JVM.

Tenha em mente que a afinidade não restringe outros processos de usar essas CPUs, taskset se mais uma ferramenta de restringir um processo ou processos específicos a um conjunto específico de CPUs, não restringir a exclusividade.

excerpt a página man do taskset

taskset is used to set or retrieve the CPU affinity of a running process given its PID or to launch a new COMMAND with a given CPU affinity. CPU affinity is a scheduler property that "bonds" a process to a given set of CPUs on the system. The Linux scheduler will honor the given CPU affinity and the process will not run on any other CPUs. Note that the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keep processes on the same CPU as long as practical for performance reasons. Therefore, forcing a specific CPU affinity is useful only in certain applications.

Alternativas

Esse eu respondeu a perguntas e respostas sobre o assunto: Como usar cgroups para limitar todos os processos, exceto whitelist para uma única CPU? abrange o tópico de como fazer isso usando cgroups.

Referências

por 27.07.2018 / 04:32