Como gravar o tempo real de execução de um programa com outros programas em execução? [duplicado]

3
    

Esta pergunta já tem uma resposta aqui:

    

Ao cronometrar o desempenho do tempo de parede de um programa OpenMP no Linux enquanto outros programas estão sendo executados, como posso obter o tempo de execução real?

    
por Tim 09.04.2014 / 00:26

2 respostas

4

Ligue para o time myprogram .

Isso informa a hora do relógio de parede, a hora do usuário e a hora do sistema. O tempo do usuário é o tempo gasto pelo processo em cálculos. Se o programa é multiencadeado e a máquina possui múltiplos processadores, o tempo gasto em todos os processadores é somado (assim, para um programa suficientemente paralelo, o tempo do usuário pode ser maior que o tempo do relógio de parede). A hora do sistema é o tempo gasto no kernel, ou seja, fazendo entrada / saída.

Isso é o mais perto que você chega do "tempo sem contar a interferência de outros programas em execução". A única maneira de saber quanto tempo de relógio de parede o programa levaria se não houvesse programas concorrentes é executá-lo sem outros programas concorrentes.

    
por 09.04.2014 / 02:34
3

Se você puder obter o pid , que não deve ser difícil com ps , /proc/self ou $! dependendo se você conhece ou não o plano de fundo, poderá encontrar isso em:

/proc/$pid/stat :

          utime %lu   (14) Amount of time that this process has been
                      scheduled in user mode, measured in clock ticks
                      (divide by sysconf(_SC_CLK_TCK)).  This includes
                      guest time, guest_time (time spent running a
                      virtual CPU, see below), so that applications that
                      are not aware of the guest time field do not lose
                      that time from their calculations.

          stime %lu   (15) Amount of time that this process has been
                      scheduled in kernel mode, measured in clock ticks
                      (divide by sysconf(_SC_CLK_TCK)).

          cutime %ld  (16) Amount of time that this process's waited-for
                      children have been scheduled in user mode,
                      measured in clock ticks (divide by
                      sysconf(_SC_CLK_TCK)).  (See also times(2).)  This
                      includes guest time, cguest_time (time spent
                      running a virtual CPU, see below).

          cstime %ld  (17) Amount of time that this process's waited-for
                      children have been scheduled in kernel mode,
                      measured in clock ticks (divide by
                      sysconf(_SC_CLK_TCK)).

Para obter IDs de processo, você pode fazer várias coisas:

prog ./and/args &
pid=$!

{ prog ./and/args & true ; } && ps -C prog

prog ./and/args

CTRL-Z

jobs -l ; fg %1

Existem muitas maneiras.

    
por 09.04.2014 / 00:37