Dê uma olhada no tarefet que permite definir quais núcleos (CPUs) nos quais um processo pode ser executado.
considere a seguinte configuração: system (Ubuntu 14.04 LTS) com 40 núcleos, muita memória RAM. Além disso, um programa que é apenas parcialmente multithreaded. Ou seja, ele alterna constantemente entre vários núcleos por horas e, em seguida, apenas um núcleo (também por horas).
Eu quero maximizar a utilização da CPU dessa máquina executando esse programa em paralelo, digamos, 10 vezes, mas eu realmente gostaria de evitar situações em que
A pergunta é: existem extensões de utilitários / SO que permitem isso? O uso de "renice" não é totalmente o que seria necessário, embora se houvesse um supervisor automático autorizado a renunciar dinamicamente os processos para cima ou para baixo, o que poderia chegar bem perto. Idealmente, funcionaria algo assim: desde que um conjunto de programas não maximize os recursos da CPU, eles podem obter o máximo que quiserem. Mas se eles usarem mais, então o (s) programa (s) com o tempo de execução mais longo (ou o que quer que seja) obtém a maior prioridade para a CPU, eventualmente privando as outras instâncias.
O mais próximo que eu encontrei são Grupos de Controle (cgexec e amigos), mas pelo que eu posso dizer, só podemos definir grupos de programas com taxas fixas de CPU, por exemplo, programas em grupo podem usar no máximo 60% da CPU ( mesmo que os outros 40% não sejam usados) e não há como impedir que todos os processos obtenham algo (novamente, destruindo os caches da CPU).
Dê uma olhada no tarefet que permite definir quais núcleos (CPUs) nos quais um processo pode ser executado.