correções de linux relacionadas à precisão da medição de tempo?

5

Existe um conjunto de patches para o kernel do Linux que corrigem a precisão do tempo de processo (sistema, em vez do usuário)?

Eu ouvi falar sobre RTLinux, mas eu realmente não preciso das restrições de agendamento em tempo real, só preciso que as medições de tempo sejam precisas. Se o interruptor de processo escorregou por alguns milissegundos, assim seja, mas eu preciso de uma medição precisa do tempo real gasto no processo atual

    
por lurscher 31.08.2011 / 23:13

1 resposta

2

Se o que você tem em mente é o uso de time shell builtin, a precisão de 3 dígitos é a limitação do design - como por man bash :

TIMEFORMAT
          The value of this parameter is used as a format string  specify‐
          ing  how  the timing information for pipelines prefixed with the
          time reserved word should be displayed.  The % character  intro‐
          duces  an  escape  sequence  that is expanded to a time value or
          other information.  The escape sequences and their meanings  are
          as follows; the braces denote optional portions.
          %%        A literal %.
          %[p][l]R  The elapsed time in seconds.
          %[p][l]U  The number of CPU seconds spent in user mode.
          %[p][l]S  The number of CPU seconds spent in system mode.
          %P        The CPU percentage, computed as (%U + %S) / %R.

          The  optional  p is a digit specifying the precision, the number
          of fractional digits after a decimal point.  A value of 0 causes
          no decimal point or fraction to be output.  At most three places
          after the decimal point may be specified; values  of  p  greater
          than  3 are changed to 3.  If p is not specified, the value 3 is
          used.

Para medições mais precisas aparentemente , você pode tentar usar date com formatação de saída personalizada para mostrar nanossegundos:

Tstart=$(date "+%s.%N")
some_command(s)
Tend=$(date "+%s.%N")
echo "Elapsed: $( Tend-Tstart |bc -l) nanoseconds"

No entanto , observe que em ambos os casos ( time e date ), você tem alguma sobrecarga, pois o sistema leva algum tempo para executar os comandos de início / parada. O overhead é menor para time , graças ao fato de ser um builtin. Portanto, o limite de três dígitos existe por um motivo: o resto é apenas lixo aleatório.

Veja também esta pergunta semelhante , embora a resposta aceita contenha um pouco bug atualmente.

    
por 01.09.2011 / 13:38