Deseo saber la cantidad de tiempo necesario para la ejecución de un programa bajo Linux en microsegundos (o mejor precisión). Actualmente estoy usando el comando time
, pero me da la precisión máxima de milisegundos. ¿Hay alguna forma de ajustar el comando time
para dar una mayor precisión o hay algún otro comando para el mismo?linux time command microsegundos o mejor precisión
Respuesta
Su pregunta no tiene sentido: no obtendrá mediciones repetidas ni siquiera en milisegundos si informa el tiempo.
Agregar más dígitos solo agregará ruido. También podría extraer los dígitos adicionales del /dev/random
.
Vea si current_kernel_time() es útil para usted en su requisito. Lo he usado y encontré útil ya que da granularidad al nivel de nanosegundos. Más detalles son here.
Estoy de acuerdo con Employed Russian's answer. No tiene mucho sentido querer precisión de microsegundo para tales medidas. Entonces cualquier dígito adicional que tengas no tiene sentido (y es esencialmente aleatorio).
Si tiene el código fuente de la aplicación para medir, puede usar las funciones clock o clock_gettime, pero no espere más de una docena de microsegundos de precisión. También está la instrucción de la máquina RDTSC.
Lea el linux clock howto.
Y no olvide que el tiempo de ejecución es desde el punto de vista de la aplicación, no determinístico y no reproducible (piense en cambios de contexto, fallas en la memoria caché, interrupciones, etc. pasando en un tiempo aleatorio).
Si desea medir el rendimiento de un programa completo, hágalo funcionar durante al menos varios segundos, mida el tiempo varias veces (por ejemplo 8) y tome el promedio (quizás dejando caer el mejor & peor sincronización).
Si se desea medir el tiempo para determinadas funciones, aprender a profile su aplicación (gprof
, oprofile
, etc, etc ...) Véase también this question
No se olvide de leer time(7)
Sé consciente de que en el actual (computadora portátil, computadora de escritorio, servidor) out-of-orderpipelinedsuperscalar procesadores con CPU caches complejos y TLB y branch predictors, el tiempo de ejecución de un pequeño ciclo o secuencia de instrucciones de la máquina i s no reproducible (el recuento de nanosegundos variará de una carrera a la siguiente). Y el sistema operativo también agrega aleatoriedad (scheduling, context switches, interrupts, page cache, copy-on-write, demand-paging ...) por lo que no tiene ningún sentido medir la ejecución de algún comando con más de un milisegundo, o quizás 100μs si tiene suerte- de precisión. Debe comparar su comando varias veces.
Para obtener medidas significativas, debe cambiar la aplicación de referencia para ejecutarse en más de unos pocos segundos (tal vez agregando algún bucle en main
, o ejecute con un conjunto de datos más grande ...), y repita el comando de referencia una docena veces. Eso toma la media (o la peor, o la mejor, dependiendo de lo que busque) de las medidas.
Si el sistema time(1) no es suficiente, puede hacer su propia instalación de medición; ver también getrusage(2); Soy escéptico sobre que obtengas medidas más precisas.
cierto en mis i3770K reciente de GNU/Linux (kernel 4.2, Debian/Sid/x86-64) computadora de escritorio, "sistema" como -calls time(2) o clock_gettime(2) carreras en unos 3 o 4 nanosegundos (gracias a que evitan la vdso(7) carga de un syscall real ...) por lo que podría usarlos dentro de su programa con bastante frecuencia.
Use gettimeofday - da exactitud en microsegundos
- 1. C ¿Obtenga la precisión del sistema a microsegundos en ventanas?
- 2. Linux find command gotcha?
- 3. ¿Por qué MySQL no admite milisegundos/microsegundos de precisión?
- 4. Linux, precisión timerfd
- 5. linux du command código fuente
- 6. ¿Cómo puedo medir el tiempo con microsegundos de precisión en Java?
- 7. Cómo calcular el tiempo de una operación en microsegundos de precisión
- 8. Temporización de precisión de milisegundos en C o C++
- 9. cómo redirigir resultado del comando time Linux a algún archivo
- 10. Precisión del temporizador OpenVMS, mejor que la precisión de milisegundos.
- 11. Almacenamiento de microsegundos en MySQL: ¿qué solución?
- 12. Microsegundo (o mejor) sincronización del proceso en Linux
- 13. ¿Se garantiza gettimeofday() una resolución de microsegundos?
- 14. C# tiempo en microsegundos
- 15. shell de Linux añadir parámetros variables a Command
- 16. ¿Qué significa "O (1) access time"?
- 17. necesitan Linux equivalente a las ventanas "eco fecha%%%% time% COMPUTERNAME%"
- 18. Python, os.system for command-line call (linux) no devuelve lo que debería?
- 19. Android Time vs Java Time
- 20. C Basic Head Command
- 21. reloj() precisión en time.h
- 22. Especificación de precisión en GPX o KML
- 23. ¿Cuál es la biblioteca de números grandes (de precisión arbitraria) estándar (o mejor respaldada) para Lua?
- 24. ¿Mejor algoritmo para evitar la pérdida de precisión?
- 25. ¿Un mejor shell de Linux?
- 26. ¿Puede la precisión de SQL Server 2008 TIME reducirse a solo horas y minutos?
- 27. Bash Command Logger
- 28. log4j ConversionPattern marca de tiempo con microsegundos
- 29. perfilador de microsegundos para el código C
- 30. MySQL create time y update time timestamp
No entiendo su punto. Dije que quiero una precisión mejor que milisegundos, lo cual no es imposible en los procesadores de hoy en día, donde incluso podemos llegar a la precisión de nanosegundos. ¿Cómo agregar más dígitos agrega más ruido? –
@Guidance Porque el código que se ejecuta en un sistema operativo que no es en tiempo real no tiene una ejecución determinística. Todo lo que se necesita es que el sistema operativo procese algunos paquetes IP, u otro proceso arbitario para ejecutar, o un crnie despertando para verificar si debe hacer algo, o el sistema de archivos decide escribir páginas sucias, etc. y el proceso que El cronometraje se suspende durante una (pequeña cantidad de) tiempo y los tiempos están desactivados. Las temporizaciones incorporadas de un SO, como el tiempo de CPU (a diferencia del reloj de pared), generalmente también se cuentan en timeslices que tienen una resolución determinada (a menudo 1 tick del kernel, 1 milisegundo o más) – nos
Pruebas rápidas con 'time/bin/sleep 0.006' parece indicar que el ruido es inferior a 1 milisegundo. Entonces, aunque tales mediciones son definitivamente peligrosas, la solicitud de Guanidene no tiene sentido en sí misma. –