Esta pergunta poderia ter um título melhor - como "O que medem os tempos do 'usuário' e do 'sistema'?". Isso tornaria a questão mais clara para as pessoas que navegam na lista.
Sharpie
Respostas:
46
Isso é discutido em ?proc.time( system.time()retorna um objeto de classe "proc.time"):
Details:
‘proc.time’ returns five elements for backwards compatibility, but
its ‘print’ method prints a named vector of length 3. The first
two entries are the total user and system CPU times of the current
R process and any child processes on which it has waited, and the
third entry is the ‘real’ elapsed time since the process was
started.
....e
Value:
....
The definition of ‘user’ and ‘system’ times is from your OS.
Typically it is something like
_The ‘user time’ is the CPU time charged for the execution of user
instructions of the calling process. The ‘system time’ is the CPU
time charged for execution by the system on behalf of the calling
process._
A explicação mais clara que eu já li sobre a diferença entre usere systemtempo decorrido foi fornecida por William Dunlap em [R-ajuda] :
"Tempo de CPU do usuário" fornece o tempo de CPU gasto pelo processo atual (ou seja, a sessão R atual) e "tempo de CPU do sistema" fornece o tempo de CPU gasto pelo kernel (o sistema operacional) em nome do processo atual. O sistema operacional é usado para coisas como abrir arquivos, fazer entrada ou saída, iniciar outros processos e olhar o relógio do sistema: operações que envolvem recursos que muitos processos devem compartilhar.
Apesar ?proc.time retorne algo semelhante, essa descrição foi muito mais fácil de entender para mim.
Já que eles são genéricos de qualquer maneira, da Wikipedia:
O termo 'tempo de CPU do usuário' pode ser um pouco enganador no início. Para ser claro, o tempo total (tempo real da CPU) é a combinação da quantidade de tempo que a CPU gasta executando alguma ação para um programa e a quantidade de tempo que a CPU gasta executando chamadas do sistema para o kernel em nome do programa. Quando um programa percorre um array, ele está acumulando tempo de CPU do usuário. Por outro lado, quando um programa executa uma chamada de sistema, como exec ou fork, ele está acumulando tempo de CPU do sistema.
Como essas variáveis de tempo são definidas por seu sistema operacional, você pode recuperar informações sobre como são calculadas executando man timeem seu shell (no Unix):
... Essas estatísticas consistem em (i) o tempo real decorrido entre a chamada e o término, (ii) o tempo de CPU do usuário (a soma dos valores tms_utimee tms_cutimeem uma estrutura tms conforme retornado por times (2)) e (iii) o tempo de CPU do sistema (a soma dos valores tms_stimee tms_cstimeem uma estrutura tms conforme retornado por times (2)).
A definição das variáveis de tempo mencionadas pode ser encontrada aqui :
tms_utime Tempo de CPU do usuário.
tms_stime Tempo de CPU do sistema.
tms_cutime Tempo de CPU do usuário de processos filho encerrados.
tms_cstime Tempo de CPU do sistema de processos filho encerrados.
Um esclarecimento das diferenças entre o tempo do usuário e do sistema é descrito na resposta de daroczig e em outras partes do SO :
O tms_utimeelemento é a quantidade de tempo gasto na execução de seu código ou o código na biblioteca C. O tms_stimeelemento é a quantidade de tempo gasto no kernel executando o código em seu nome.
Respostas:
Isso é discutido em
?proc.time
(system.time()
retorna um objeto de classe"proc.time"
):....e
fonte
A explicação mais clara que eu já li sobre a diferença entre
user
esystem
tempo decorrido foi fornecida por William Dunlap em [R-ajuda] :Apesar
?proc.time
retorne algo semelhante, essa descrição foi muito mais fácil de entender para mim.fonte
Aqui estão algumas explicações simples:
Tempo decorrido é o tempo cobrado da (s) CPU (s) pela expressão.
A hora do usuário é a hora do relógio de parede. O tempo que você experimentou como usuário.
Normalmente, os dois momentos são relativamente próximos. Mas eles podem variar em algumas outras situações. Por exemplo:
fonte
Já que eles são genéricos de qualquer maneira, da Wikipedia:
http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time
fonte
Como essas variáveis de tempo são definidas por seu sistema operacional, você pode recuperar informações sobre como são calculadas executando
man time
em seu shell (no Unix):A definição das variáveis de tempo mencionadas pode ser encontrada aqui :
Um esclarecimento das diferenças entre o tempo do usuário e do sistema é descrito na resposta de daroczig e em outras partes do SO :
fonte