Tiempos de ejecución de un proceso
Traducción de What do ‘real’, ‘user’ and ‘sys’ mean in the output of time?
real 0m13.520s
user 0m1.628s
sys 0m1.420s
- Real
- Tiempo real transcurrido desde que el proceso comienza hasta que finaliza. Esto implica el tiempo utilizado por otros procesos ejecutándose al mismo tiempo y el tiempo en que el proceso se encuentra bloquedo (por ejemplo, esperando que una llamada al sistema como I/O se complete).
- User
- Tiempo de CPU empleado por el proceso en modo usuario (fuera del núcleo). El tiempo de CPU de otros procesos y el tiempo de espera de una llamada al sistema no cuentan en este valor.
- Sys
- Tiempo empleado por el núcleo para atender peticiones del proceso. Esto significa tiempo de uso de CPU en llamadas al sistema dentro del núcleo, como por ejemplo I/O.
User+Sys equivale al total de tiempo de CPU usado por el proceso.
Diferencia entre ‘Kernel mode’ y ‘User mode’
En Unix, o cualquier otro sistema operativo de memoria protegida, ‘Kernel’ o ‘Supervisor’ es el modo privilegiado en que la CPU puede operar. Ciertas acciones que pueden afectar la seguridad o estabilidad del sistema solo pueden ser realizadas cuando la CPU funciona en este modo. Estas acciones no están disponibles para aplicaciones de usuario. Un ejemplo de este tipo de acciones podría ser la de manipular la MMU para tener acceso al espacio de direcciones de otro proceso. Normalmente, el código en modo usuario no puede hacer esto, aunque puede solicitar memoria compartida desde el Kernel, la que podría ser leída y escrita por más de un proceso. En este caso la memoria compartida es solicitada explícitamente por el Kernel a través de un mecanismo seguro y los diferentes procesos pueden utilizarla mediante llamadas también explícitas.
El modo privilegiado es generalmente denominado ‘Kernel mode’ debido a que es el núcleo el ejecutado por la CPU cuando se ejecuta en este modo.
Las llamadas al sistema en la librería C (particularmente aquellas que se describen en la sección 2 de las páginas man) tienen un componente en modo usuario, que es el que realmente hace la llamada desde el programa. Una página que describe el sistema de llamadas proporcionadas por el núcleo Linux puede encontrarse aquí.
Aclaración acerca de Sys time
Hay ciertas cosas que el código de usuario no puede hacer. Asignar memoria o acceder a un hardware (HDD, red, etc) solo pueden hacerse bajo supervisión del núcleo, y sólo él puede hacerlo. Algunas operaciones comomallocofread/fwrite, invocarán esta supervisión del núcleo y entonces contarán como ‘Sys time’. Desafortunadamente no es tan sencillo como “cada llamada a malloc será contada como Sys time”. Una llamada a malloc pasa cierto tiempo procesando su componente de modo usuario (entonces contará como ‘User time’), luego invocará la función del núcleo (lo que contará como ‘Sys time’) y finalmente, cuando retome el control luego de la llamada al sistema, usará probablemente algo más de tiempo de usuario (que contará como ‘User time’).





