¿Por qué el tiempo de 'usuario' y 'sys' varía en múltiples ejecuciones?

¿Por qué el tiempo de 'usuario' y 'sys' varía en múltiples ejecuciones?

hay un lindopregunta y respuestaexplicando las relaciones entre 'real', 'usuario' y 'sys'.

Explica las razones por las que "real" puede variar y define "usuario" y "sistema" como los tiempos que el proceso realmente pasó ejecutándose en el procesador.

Ahora ignoremos por completo lo "real". He notado que cuando ejecuto la misma aplicación varias veces, aparece 'sys' y 'usuario' diferentes.

$time dummy_app
user    0m0.032s
sys     0m0.064s

$time dummy_app
user    0m0.020s
sys     0m0.084s

dummy_app es solo un bucle for que cuenta de 0 a 100000.

¿Cuál es la razón por la que la ejecución del mismo binario tardaría diferentes tiempos en el procesador? En otras palabras, ¿por qué "usuario" y "sistema" no son siempre los mismos para la misma aplicación?

Respuesta1

Por qué los tiempos de ejecución del mismo binario difieren en múltiples ejecuciones

El problema clave aquí es el comportamiento no determinista debido a la forma en que funciona la CPU. Las CPU superescalares modernas pueden ejecutar varias instrucciones a la vez o cambiar el orden de los comandos que se ejecutarán (ejecución fuera de orden). Con respecto a su ejemplo, también es posible que se aplique la optimización en el uso de la caché. La RAM es varias magnitudes más lenta que la propia CPU, por eso se utiliza un almacenamiento en caché intensivo. La segunda ejecución de su binario podría ejecutarse en el caché, consumiendo así menos ciclos de CPU (ciclos que la CPU habría esperado para que los datos se recuperaran de la memoria).

Sobre la diferencia entre las estadísticas de tiempo de proceso real, de usuario y del sistema

Una de estas cosas no es igual a la otra. Real se refiere al tiempo real transcurrido; Usuario y Sistema se refieren al tiempo de CPU utilizadosólo por el proceso.

  • Reales la hora del reloj de pared: la hora desde el inicio hasta el final de la llamada. Esto es todo el tiempo transcurrido, incluidos los intervalos de tiempo utilizados por otros procesos y el tiempo que el proceso pasa bloqueado (por ejemplo, si está esperando que se complete la E/S).

  • Usuarioes la cantidad de tiempo de CPU invertidoen modo de usuariocódigo (fuera del kernel)dentroel proceso. Este es solo el tiempo real de CPU utilizado para ejecutar el proceso. Otros procesos y el tiempo que el proceso pasa bloqueado no cuentan para esta cifra.

  • sistemaes la cantidad de tiempo de CPU invertidoen el núcleodentro del proceso. Esto significa ejecutar el tiempo de CPU invertido en llamadas al sistema.dentro del núcleo,a diferencia del código de la biblioteca, que todavía se ejecuta en el espacio del usuario. Al igual que "usuario", esto es solo el tiempo de CPU utilizado por el proceso. Consulte a continuación una breve descripción del modo kernel (también conocido como modo 'supervisor') y el mecanismo de llamada al sistema.

User+Sysle dirá cuánto tiempo de CPU real utilizó su proceso. Tenga en cuenta que esto ocurre en todas las CPU, por lo que si el proceso tiene varios subprocesos, podría exceder el tiempo del reloj de pared informado por Real. Tenga en cuenta que en el resultado estas cifras incluyen la hora Usery Sysla hora de todos los procesos secundarios (y sus descendientes), así como cuándo podrían haber sido recopilados, por ejemplo, por wait(2)o waitpid(2), aunque las llamadas al sistema subyacente devuelven las estadísticas para el proceso y sus hijos por separado.

Fuente

información relacionada