Existem métodos (opções de kernel do Linux, configurações de sysctl ou módulos de agendador configuráveis) que podem fazer com que um processo / thread de alta prioridade seja executado em um núcleo de processador físico com o segundo núcleo virtual (hyper-threading) não programado para maximizar desempenho de thread (evitando situações competitivas, não compartilhando o cache L1 e o possível uso do clock máximo da cpu - Turbo Boost), enquanto executa processos / threads de baixa prioridade em ambos os núcleos virtuais de outros núcleos físicos com clock cpu menor para maximizar o rendimento total do sistema?
Em outras palavras: é possível desativar o hyper-threading dinamicamente com base na prioridade?
Caso haja alguma CPU usando a prioridade de processo / encadeamento para decidir qual dos dois encadeamentos em um núcleo de encadeamento ativo pode progredir primeiro em uma situação competitiva, o kernel do linux pode programar processos / encadeamentos de alta prioridade? de tal forma que eles compartilham o núcleo físico apenas com processos / threads de prioridade muito baixa, a fim de minimizar seu efeito sobre o outro segmento?
Enquanto o processo de alta prioridade está inativo, os núcleos virtuais de seu antigo núcleo físico devem se tornar novamente disponíveis para processos de prioridade mais baixa, o que torna inadequado usar taskset
para excluir um núcleo físico da máscara de afinidade de CPU de todos os outros processos.
Tags hyperthreading scheduling