2011-04-16 19 views
67

Estoy usando system.time(expression) para medir el tiempo de ejecución de una función R.¿Qué son los tiempos de 'usuario' y 'sistema' que se miden en R system.time (exp) output?

La salida me pasa por la llamada

system.time(myfunction()) 

es:

user system elapsed 
    117.36 5.65 127.86 

¿Qué 'usuario' y 'sistema' miden?

+1

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

+0

Esta pregunta podría usar un título mejor, como "¿Qué mide el 'usuario' y el 'sistema'?". Esto aclararía la pregunta a las personas que navegan por la lista. – Sharpie

Respuesta

35

Esto se discute en ?proc.time (system.time() devuelve un objeto de la clase "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. 

.... y

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._ 
13

ya que estos son genérico de todos modos, de Wikipedia:

El término 'tiempo de CPU de usuario' puede ser un poco que induce a error a t primero. Para ser claros, el tiempo total (tiempo de CPU real) es la combinación de la cantidad de tiempo que la CPU gasta realizar alguna acción para un programa y la cantidad de tiempo que la CPU gasta realizar llamadas al sistema para el kernel el nombre del programa. Cuando un programa recorre una matriz, está acumulando tiempo de CPU de usuario. Por el contrario, cuando un programa ejecuta una llamada al sistema como exec o fork, está acumulando tiempo de CPU del sistema.

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

34

La explicación más clara que he leído en la diferencia entre user y system tiempo transcurrido fue proporcionado por William Dunlap on [R-help]:

"tiempo de CPU de usuario" da el tiempo de CPU empleado por el proceso actual (es decir, la sesión R actual) y "tiempo de CPU del sistema" da a la CPU el tiempo pasado por el kernel (el sistema operativo) en nombre del proceso actual . El sistema operativo se usa para cosas como abriendo archivos, haciendo entrada o salida, iniciando otros procesos, y mirando el reloj del sistema: operaciones que involucran recursos que deben compartir muchos procesos.

Aunque ?proc.time devuelve algo similar, esta descripción fue mucho más fácil de entender para mí.

0

Dado que esas variables de tiempo se definen por su sistema operativo, puede recuperar información sobre la forma en que se calculan mediante la ejecución de man time en su concha (en Unix):

...Estas estadísticas consisten en (i) el tiempo real transcurrido entre la invocación y la finalización, (ii) el tiempo de CPU del usuario (la suma de los valores tms_utime y en una estructura tms devuelta por los tiempos (2)) y (iii) el el tiempo de CPU del sistema (la suma de los valores tms_stime y tms_cstime en una estructura tms como se devuelve por los tiempos (2)).

La definición de las variables de tiempo mencionados puede ser found here: tiempo de CPU

tms_utime usuario.

tms_stime Tiempo de CPU del sistema.

tms_cutime Tiempo de CPU de usuario de procesos hijo terminados.

tms_cstime Sistema Tiempo de CPU de procesos secundarios terminados.

A una aclaración de las diferencias entre el usuario y el tiempo de sistema se describe en la respuesta de daroczig y elsewhere on SO:

El elemento tms_utime es la cantidad de tiempo dedicado ejecución de su código, o el código de la C biblioteca. El elemento tms_stime es la cantidad de tiempo invertido en el kernel que ejecuta el código en su nombre.

2

Aquí hay algunas explicaciones simples:

tiempo transcurrido es tiempo cargado a la CPU (s) para la expresión.

El tiempo de usuario es el tiempo del reloj de pared. El tiempo que usted, como usuario, experimentó.

Por lo general, las dos ocasiones son relativamente similares. Pero pueden variar en algunas otras situaciones. Por ejemplo:

  • Si tiempo transcurrido> tiempo al usuario, esto significa que la CPU está esperando a que algunas otras operaciones (puede ser externo) por hacer.
  • Si tiempo transcurrido < tiempo al usuario, esto significa que el equipo tiene varios núcleos y es capaz de utilizarlas
Cuestiones relacionadas