Cosa sono i tempi 'utente' e 'sistema' misurati nell'output R system.time (exp)?


90

Sto usando system.time(expression)per misurare il tempo di esecuzione per una funzione R.

L'output che ricevo per la chiamata

system.time(myfunction())

è:

    user  system elapsed   
  117.36    5.65  127.86

Cosa misurano "utente" e "sistema"?



1
Questa domanda potrebbe utilizzare un titolo migliore, ad esempio "Che cosa misurano i tempi" utente "e" sistema "?". Ciò renderebbe la domanda più chiara alle persone che navigano nell'elenco.
Sharpie

Risposte:


48

Questo è discusso in ?proc.time( system.time()restituisce un oggetto di 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._

45

La spiegazione più chiara che abbia mai letto sulla differenza tra il tempo trascorso usere systemil tempo trascorso è stata fornita da William Dunlap su [R-help] :

"Tempo CPU utente" indica il tempo CPU impiegato dal processo corrente (cioè, la sessione R corrente) e "tempo CPU di sistema" indica il tempo CPU impiegato dal kernel (il sistema operativo) per conto del processo corrente. Il sistema operativo viene utilizzato per cose come aprire file, eseguire input o output, avviare altri processi e osservare l'orologio di sistema: operazioni che coinvolgono risorse che molti processi devono condividere.

Sebbene ?proc.timerestituisca qualcosa di simile, questa descrizione è stata molto più facile da capire per me.


22

Ecco alcune semplici spiegazioni:

Il tempo trascorso è il tempo addebitato alla / e CPU per l'espressione.

L'ora utente è l'ora dell'orologio da parete. Il tempo che hai vissuto come utente.

Di solito entrambi i tempi sono relativamente vicini. Ma possono variare in alcune altre situazioni. Per esempio:

  • Se il tempo trascorso> tempo utente , significa che la CPU è in attesa che vengano eseguite altre operazioni (potrebbero essere esterne).
  • Se il tempo trascorso <tempo utente , significa che la macchina dispone di più core ed è in grado di utilizzarli

18

Poiché questi sono comunque generici, da Wikipedia:

Il termine "tempo CPU utente" può essere un po 'fuorviante all'inizio. Per essere chiari, il tempo totale (tempo reale della CPU) è la combinazione della quantità di tempo che la CPU impiega per eseguire alcune azioni per un programma e la quantità di tempo che la CPU impiega per eseguire le chiamate di sistema per il kernel per conto del programma. Quando un programma esegue il ciclo attraverso un array, accumula il tempo della CPU dell'utente. Al contrario, quando un programma esegue una chiamata di sistema come exec o fork, accumula tempo CPU di sistema.

http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time


2

Poiché quelle variabili temporali sono definite dal tuo sistema operativo, puoi recuperare informazioni su come vengono calcolate eseguendole man timenella tua shell (su Unix):

... Queste statistiche consistono in (i) il tempo reale trascorso tra l'invocazione e la terminazione, (ii) il tempo della CPU dell'utente (la somma dei valori tms_utimee tms_cutimein una struttura tms restituita da volte (2)) e (iii) il tempo della CPU di sistema (la somma dei valori tms_stimee tms_cstimein una struttura tms restituita da times (2)).

La definizione delle variabili temporali menzionate può essere trovata qui :

tms_utime Tempo CPU utente.

tms_stime Tempo CPU di sistema.

tms_cutime Tempo CPU utente dei processi figlio terminati.

tms_cstime Tempo CPU di sistema dei processi figlio terminati.

Un chiarimento delle differenze tra l'utente e l'ora di sistema è descritto nella risposta di daroczig e altrove su SO :

L' tms_utimeelemento è la quantità di tempo impiegata per eseguire il codice o il codice nella libreria C. L' tms_stimeelemento è la quantità di tempo speso nel kernel per eseguire il codice per tuo conto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.