Shell script para verificar comando + rápido.

13. Re: Shell script para verificar comando + rápido.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/07/2023 - 12:36h

Cuidado com este tipo de construção (linha copiada diretamente da postagem orginal).

starter=$((time for ((i;i<5;i++)) ; { eval ${cmd} > /dev/null ; }) 2>&1) 


Ali o comando time está sendo usado para medir um bocado de coisas que serão executadas pelo próprio shell, a saber:

    • o redirecionamento “2>&1”, que felizmente acontece apenas uma vez;

    • o controle do laço de repetição “for ((i;i<5;i++))”, tanto na inicialização quanto em cada iteração;

    • o redirecionamento “> /dev/null”, que implica, em cada iteração do laço de repetição, duplicar a saída padrão (old_fd=dup(STDOUT_FILENO)), abrir o arquivo /dev/null (fd=open("/dev/null", O_WRONLY...), duplicar seu descritor (dup2(fd, STDOUT_FILENO)) e fechar o descritor original (close(fd));

    • o processamento da expressão passada ao comando eval em (“eval $cmd”) em cada iteração do laço de repetição;

    • se a expressão obtida acima for um comando externo, criar um processo filho (fork() ou clone(...)) e, dentro desse processo filho, disparar a execução do comando externo (execp(...); se o comando não for um pathname absoluto, ainda existem as etapas de procurar o comando nos diretórios listados na variável de ambiente PATH);

    • no processo original, desfazer o redirecionamento da saída padrão (dup2(old_fd, STDOUT_FILENO) e close(old_fd)) em cada iteração do laço de repetição;

    • em cada iteração do laço de repetição, esperar a conclusão do processo filho (waitpid() ou wait4()) e possivelmente processar dados da execução.

Se o comando cujo desempenho você quer avaliar for de execução muito rápida, o overhead relativo às operações do shell percebido pelo comando time pode ser bastante significativo. Se a sua necessidade de avaliar o desempenho desse programa requerer precisão, provavelmente você teria, no mínimo, de reduzir a quantidade de operações que ocorrem dentro do laço de repetição, mas muito possivelmente teria conseguir separar os tempos do próprio shell dos tempos do objeto da sua medição. Possivelmente nem mesmo usar o shell, mas construir seu cenário de testes em C.

Eu cheguei a mencionar essas preocupações na sua postagem sobre a cifra de César, lembra?


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


  



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts