Como atrasar o script bash até que haja núcleos inativos suficientes para executá-lo?

4

Sou um estudante que deseja avaliar um pipeline de NGS, monitorando o desempenho de acordo com quantos núcleos ele alocou para ele e o tamanho do arquivo de entrada. Por esse motivo, escrevi um script bash para chamá-lo várias vezes com diferentes parâmetros nr_of_cores e arquivos de entrada, anotando o tempo de conclusão e outras estatísticas. A coisa toda leva cerca de um dia para percorrer os vários cenários. (Gastar, claro, mais tempo na execução do maior arquivo com um único núcleo, então não é como se eu estivesse bloqueando todo o servidor pela duração)

Eu tenho acesso a um servidor compartilhado de 64 núcleos para executá-lo. O servidor compartilhado, no entanto, varia muito em número de núcleos inativos, dependendo da hora do dia e das pessoas que tentam executar projetos. (O top nr_of_cores que vou testar é 36, com um pequeno arquivo.)

Minha pergunta: Existe uma maneira fácil de fazer meu script esperar até que ele saiba que [X] núcleos estão disponíveis antes de executar um comando? Eu acho que assim, eu conseguiria dados mais confiáveis, eu não atrasaria as pessoas com tarefas mais urgentes a serem executadas, e eu poderia começar o script sempre, em vez de esperar até que eu veja com o htop que é um dia lento .

Obrigado!

    
por Elaborate 06.09.2017 / 16:33

1 resposta

2

Assumindo que você pode dizer ao sistema para executá-lo mais tarde, e o sysadmin é sensível e tem at instalado, você pode usar o seguinte para fazê-lo funcionar quando os níveis de carga estiverem baixos o suficiente (zero por padrão, mas o sysadmin pode definir qualquer valor arbitrário para o limite):

batch << EOF
<command>
EOF

Fora isso, a única maneira de fazer isso é pesquisar a média de carga você mesmo e disparar o comando quando estiver abaixo de algum limite. Se você decidir seguir esse caminho, o que você quer ver é o primeiro campo em /proc/loadavg , que dá a média de 1 minuto.

    
por 07.09.2017 / 14:46