¿Quieres saber cuánto tiempo lleva un proceso y más? El comando de tiempo de Linux devuelve estadísticas de tiempo, lo que le brinda una gran idea de los recursos utilizados por sus programas.
El tiempo tiene muchos parientes
Hay muchas distribuciones de Linux y varios sistemas operativos similares a UNIX. Cada uno de ellos tiene un shell de comando predeterminado. El shell predeterminado más común en las distribuciones modernas de Linux es el shell bash. Pero hay muchos otros, como el Z Shell (ZSH) y el Korn Shell (KSH).
Todos estos proyectiles incluyen su propio comando de tiempo, ya sea como un comando incorporado o como una palabra reservada. Cuando ingrese la hora en una ventana de terminal, el shell ejecutará su propio comando interno en lugar de usar el binario de tiempo GNU que se proporciona como parte de su distribución de Linux.
Queremos usar la versión GNU de Time porque tiene más parámetros y es más flexible.
¿Qué hora se ejecutará?
Puede verificar qué versión se ejecutará usando el comando Tipo. El tipo le dirá si el shell procesará sus instrucciones por su cuenta con sus rutinas internas o la pasará al binario GNU.
En la ventana de la terminal, escriba la palabra de tipo, espacio, luego la palabra «tiempo» y presione Entrar.
tiempo de tipo
Podemos ver que en el caparazón de la fiesta, el tiempo es una palabra reservada. Esto significa que Bash usará sus rutinas de tiempo internas de forma predeterminada.
tiempo de tipo
En el shell Z (ZSH), el tiempo es una palabra reservada, por lo que el valor predeterminado será utilizar los procedimientos internos del shell.
tiempo de tipo
En Korn Shell, el tiempo es una palabra clave. Se utilizará un procedimiento interno en lugar del comando de tiempo GNU.
Ejecutando el comando de tiempo GNU
Si el shell en su sistema Linux tiene una subrutina de tiempo interna, deberá especificar explícitamente si desea utilizar el binario de tiempo GNU. Tú debes:
Especifique el camino completo al binario, como / usr / bin / time. Ejecute el comando qué tiempo para encontrar esta ruta. Use el tiempo de comando. Use una barra de barra, como el tiempo.
Cómo instalar Linux desde un teléfono Android usando DriveDroid
El comando qué tiempo nos da la ruta al archivo binario.
Podemos probar esto usando / usr / bin / time como un comando para ejecutar el binario GNU. Funciona. Recibimos una respuesta del comando de tiempo que dice que no hemos proporcionado ningún parámetros de línea de comando para ejecutar.
Escribir el comando de tiempo también funciona, y de vez en cuando obtenemos la misma información de uso. El comando del comando le dice al shell que ignore el siguiente comando para que se procese fuera del shell.
Usar el símbolo antes del nombre del comando es similar a usar el comando antes del nombre del comando.
La forma más fácil de asegurarse de que está utilizando el binario de GNU Time es usar la opción de barra de inactividad.
tiempo
tiempo
El tiempo llama al shell de tiempo. El tiempo usa el tiempo binario. El tiempo usa el tiempo binario.
Usando el comando de tiempo
Damos tiempo para algunos programas. Usamos dos programas llamados Loop1 y Loop2. Fueron creados a partir de Loop1. C y Loop2. C. No hacen nada útil, excepto para demostrar los efectos de un tipo de ineficiencia de codificación.
Esto es bucle1. c. La longitud de la cuerda se requiere en los dos bucles anidados. La longitud se obtiene de antemano, fuera de los dos bucles anidados.
#include "stdio. h" #include "string. h" #include "stdlib. h" int main (int argc, char* argv [])< int i, j, len, count=0; char szString[]="how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek"; // get length of string once, outside of loops len = strlen( szString ); for (j=0; jEsto es bucle2. c. La longitud de la cadena se obtiene una y otra vez para cada ciclo del bucle exterior. Esta ineficiencia debería aparecer en los tiempos.
#include "stdio. h" #include "string. h" #include "stdlib. h" int main (int argc, char* argv [])< int i, j, count=0; char szString[]="how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek-how-to-geek"; for (j=0; jEncendamos el programa Loop1 y usemos el tiempo para medir su rendimiento.
tiempo ./loop1
Ahora hagamos lo mismo para Loop2.
tiempo ./loop2
Esto nos da dos conjuntos de resultados, pero están en un formato muy feo. Podemos hacer algo al respecto más adelante, pero elegimos algunos bits de información de los resultados.
Cuando ejecuta el programa, hay dos modos de ejecución que cambian. Estos se llaman modo de usuario y modo kernel.
En resumen, un proceso en modo de usuario no puede acceder directamente al hardware o la memoria de referencia fuera de su propia asignación. Para acceder a dichos recursos, un proceso debe hacer solicitudes al kernel. Si el núcleo aprueba la solicitud, el proceso entra en modo kernel hasta que se cumpla la solicitud. El proceso luego vuelve a la ejecución en modo de usuario.
Los resultados para Loop1 nos dicen que Loop1 pasó 0. 09 segundos en modo de usuario. O pasó cero tiempo en modo kernel, o el tiempo en el modo núcleo es demasiado bajo para registrarse después de redondear. El tiempo total dedicado fue de 0. 1 segundos. Loop1 se asignó un promedio de tiempo de CPU del 89% durante el tiempo transcurrido.
El programa ineficiente Loop2 tardó tres veces más en ejecutarse. Su tiempo total consumido es de 0. 3 segundos. El tiempo de procesamiento del modo de usuario es de 0. 29 segundos. No se registra nada para el modo kernel. Loop2 se asignó un promedio del 96% del tiempo de CPU durante su ejecución.
Formato de salida
Puede personalizar la salida de tiempo utilizando una cadena de formato. Una cadena de formato puede contener especificadores de texto y formato. Se puede encontrar una lista de especificadores de formato en la página del manual de tiempo. Cada uno de los especificadores de formato representa una información.
Cuando se imprime una cadena, los especificadores de formato se reemplazan por los valores reales que representan. Por ejemplo, el especificador de formato para la utilización porcentual de CPU es la letra P. para indicar al tiempo que el especificador de formato no es solo una letra regular, agregue un signo porcentual, como% P., usemos esto como ejemplo.
El parámetr o-f (cadena de formato) se usa para decirle a la hora que lo que sigue es una cadena de formato.
Nuestra cadena de formato imprimirá el "programa" de los caracteres: y el nombre del programa (y cualquier parámetros de línea de comandos que pase al programa). El especificador de formato% C significa "los argumentos de nombre y línea de comando del comando que se está sincronizando". N mueve la salida a la siguiente línea.
Hay muchos especificadores de formato, y son sensibles a los minúsculos, así que asegúrese de ingresarlos correctamente cuando lo haga por usted mismo.
Luego vamos a escribir los caracteres "Tiempo total": seguido del valor del tiempo total transcurrido para esta ejecución del programa (representado por% E).
Usaremos N para dar otra nueva línea. Luego vamos a imprimir los caracteres "Modo (s) de usuario" seguido del valor del tiempo de CPU dedicado al modo de usuario, representado por% U.
Usamos N para dar otra nueva cadena. Esta vez nos preparamos para el valor del tiempo del núcleo. Imprimimos los caracteres "Modo (s) del núcleo" seguido del especificador de formato para el tiempo de CPU dedicado en modo núcleo, es decir,% S.
Finalmente, vamos a escribir los caracteres "NCPU:" para obtener una nueva línea y encabezado para este valor de datos. El formato especificador% P dará el porcentaje promedio del tiempo de CPU utilizado por el proceso sincronizado.
Toda la cadena de formato está encerrada en citas. Podríamos incluir algunos caracteres T para colocar pestañas en la salida si nos preocupara por la alineación del valor.
Tiemp o-f "Programa: %CNTOTAL TIEMPO: %MODO (S) DEL ENUSER %MODE (S) UNKERNEL (S) %SNCPU: %P" ./loop1
Enviar salida a un archivo
Para realizar un seguimiento de los horarios de las pruebas que ejecuta, puede enviar los resultados cronometrados a un archivo. Para hacer esto, use el parámetr o-o (salida). La salida de su programa aún se mostrará en la ventana del terminal. Solo la salida del tiempo se redirige a un archivo.
Podemos volver a ejecutar la prueba y guardar el resultado en el archivo test_results. txt de la siguiente manera:
TIM E-O test_results. tx t-f "Programa: %CNTOTAL TIEMPO: %MODE (S) ENUSER %MODE (S) UNKERNEL %SNCPU: %P" ./loop1Cat test_results. txt
La salida del programa Loop1 se muestra en la ventana Terminal, y los resultados finalmente entran en el archivo test_results. txt.
Si desea guardar el siguiente conjunto de resultados en el mismo archivo, debe usar el parámetr o-a (add) de la siguiente manera:
Tiemp o-o test_results. tx t-a -f "Programa: %CNTOTAL TIEMPO: %MODE (S) DEL MODE (S) %MODE (S) UNKERNEL %SNCPU: %P" ./loop2Cat test_results. txt
Ahora debería ser obvio por qué utilizamos el especificador de formato% C para incluir el nombre del programa en la salida de la cadena de formato.
Y no tenemos tiempo
El comando de tiempo es probablemente el comando más útil para que los programadores y desarrolladores ajusten su código, y también es útil para cualquiera que quiera saber un poco más sobre lo que está sucediendo debajo del capó cada vez que ejecuta un programa.