Quanta memória RAM, espaço em disco e tempo de CPU são usados por um script

3

Meu problema

Eu preciso descobrir quantos recursos são necessários para um script bash que eu escrevi. Estou interessado principalmente no seguinte:

  • RAM

  • uso de disco de pico (espaço em disco)

  • Tempo de CPU: enquanto aqui não tenho certeza do que isso se refere exatamente ao tempo de execução em toda a CPU (incluindo núcleos físicos + virtuais?) ou apenas nos núcleos que foram usados. Por exemplo, como eu sei quanto tempo de CPU é necessário em uma CPU com um número diferente de núcleos?

  • usado número de núcleos

A razão para isso é que eu enviarei trabalhos para um cluster. Onde cada trabalho executa meu script com parâmetros ligeiramente alterados.

Meu plano é o seguinte, executo o script no meu pc para obter os valores de pico dos recursos acima e, em seguida, certifique-se de que apenas os nós do cluster sejam usados com a quantidade necessária de recursos prontos.

Ou melhor ainda durante a execução do script, escrevo as coisas desejadas em algum arquivo.

Tentativa de solução

O que eu fiz até agora:

RAM: mediu o pico de RAM do programa chamado no meu script, do qual imaginei que ele tenha o máximo de uso de RAM. (Este foi um Mathematica Script onde eu usei o comando MaxMemoryUsed[] que depois eu extraio do arquivo de log)

Espaço em disco: basicamente, sovo todos os arquivos / pastas usando du -sb . Além disso, eu também uso df antes e depois do script.

Tempo de CPU: no início do script, eu defino SECONDS=0 e echo ${SECONDS} no final (Como o script é a única coisa que estou executando, isso deve corresponder ao tempo de CPU ?!). Eu também usei date para obter uma estimativa aproximada.

Sou grato por todas as sugestões, comentários e indicações de ferramentas e possíveis soluções para o meu problema.

Editar

Também ouvi falar sobre valgrind . Alguém tem alguma experiência com isso? É possível usar isso para meus propósitos?

    
por Stefan 20.12.2016 / 17:25

1 resposta

4

Você pode fazer isso executando o comando dentro do GNU time . Por padrão, a hora mostra os itens de dados real (relógio de parede), user (CPU-segundos usados no modo de usuário) e sys (CPU-segundos usados no modo kernel). No entanto, você também pode pedir para medir outras coisas, como RAM e uso do disco:

/usr/bin/time -f "File system outputs: %O\nMaximum RSS size: %M\nCPU percentage used: %P" <command>

onde <command> é substituído pelo comando que você deseja executar. A saída será algo como:

File system outputs: 18992
Maximum RSS size: 40056
CPU percentage used: 367%

onde "percentual de CPU usado" é uma porcentagem e mostra aqui que 3.6 núcleos foram usados, "Tamanho máximo de RSS" é o mais próximo de "memória máxima usada" e é expresso em kilobytes e "Saídas do sistema de arquivos" é expresso em número de operações (isto é, não diz quantos dados são gravados). Os comandos du e df que você deu devem ajudar lá.

Nota: você precisa de usar /usr/bin/time em vez de apenas time , já que muitos shells têm isso como internos, o que não necessariamente suporta a opção -f .

Para mais informações, consulte man time

    
por 20.12.2016 / 18:33