2010-11-15 18 views
12

Me gustaría saber la HZ del sistema, es decir, cuántos milisegundos hay un jiffy del código de Python.Python: cómo obtener el número de mili segundos por jiffy

+0

¿qué es un jiffy? – knitti

+2

el intervalo de interrupción del temporizador, que determina la precisión de todas las operaciones de espera del hilo, etc. –

+0

@knitti, "Voy a conseguir eso para ti en un santiamén". Creo que es igual a "muy rápido". – jlafay

Respuesta

22

No es USER_HZ

>>> import os 
>>> os.sysconf_names['SC_CLK_TCK'] 
2 
>>> os.sysconf(2) 
100 

que es el que utiliza el kernel para informar del tiempo en /proc.

Desde el time(7) página del manual:

El software de reloj, HZ, y jiffies

La precisión de diversas llamadas al sistema que establecen los tiempos de espera, (por ejemplo, select (2), sigtimedwait (2)) y medir el tiempo de CPU (por ejemplo, getrusage (2)) está limitado por la resolución del reloj del software, un reloj mantenido por el kernel que mide el tiempo en jiffies. El tamaño de un jiffy es determinado por el valor de la constante de kernel HZ.

El valor de HZ varía según las versiones del núcleo y las plataformas de hardware. En i386 la situación es la siguiente: en kernels hasta e incluyendo 2.4.x, HZ era 100, dando un valor de jit de 0.01 segundos; comenzando con 2.6.0, HZ se elevó a 1000, dando un jiffy de 0.001 segundos. Desde kernel 2.6.13, el valor HZ es un parámetro de configuración del kernel y puede ser 100, 250 (valor predeterminado) o 1000, produciendo un valor de jiffies de, respec- activa, 0.01, 0.004 o 0.001 segundos. Desde kernel 2.6.20, hay disponible una frecuencia adicional de : 300, un número que se divide de manera uniforme para las velocidades de cuadro de video com (PAL, 25 HZ; NTSC, 30 HZ).

La llamada al sistema times (2) es un caso especial. Informa los tiempos con una granularidad definida por la constante de kernel USER_HZ. Aplicación de espacio de usuario: ciones puede determinar el valor de esta constante usando sysconf (_SC_CLK_TCK).

Si es absolutamente necesario saber SYSTEM_HZ:

>>> from ctypes import * 
>>> rt = CDLL('librt.so') 
>>> CLOCK_REALTIME = 0 
>>> class timespec(Structure): 
...  _fields_ = [("tv_sec", c_long), ("tv_nsec", c_long)] 
... 
>>> res = timespec() 
>>> rt.clock_getres(CLOCK_REALTIME, byref(res)) 
0 
>>> res.tv_sec, res.tv_nsec 
(0, 4000250) 
>>> SYSTEM_HZ = round(1/(res.tv_sec + (res.tv_nsec/10.0**9))) 

Da 250 en mi portátil (que suena bastante bien) y 1000 millones en una máquina virtual ...

+0

Estoy tratando de calcular algunas cosas basadas en jiffies que realmente deberían estar en ms. Entonces, si conoce el equivalente de HZ, entonces jiffies * 1000/os.sysconf (2) = ms. Al menos eso pienso. – Murgh

+0

¿De dónde vienen tus jiffies? también, tu ecuación es extraña. – hop

+0

jiffies provienen de stime, utime y otras propiedades relacionadas con el tiempo que se encuentran en/proc/stat y archivos similares. La ecuación proviene de unixtop.org. elapsed = timediff.tv_sec * HZ + (timediff.tv_usec * HZ)/1000000; Como HZ no está disponible en Python, estaba buscando la alternativa. – Murgh

5

sysconf (SC_CLK_TCK) no da la frecuencia del temporizador interrumpe en Linux. Da la frecuencia de jiffies que es visible para el espacio de usuario en cosas como los contadores en varios directorios en/proc

La frecuencia real está oculta del espacio de usuario, deliberadamente. De hecho, algunos sistemas usan tics dinámicos o sistemas "tickless", por lo que no hay realmente ninguno.

Todas las interfaces del espacio de usuario usan el valor de SC_CLK_TCK, que, por lo que puedo ver, siempre es 100 en Linux.

+0

no, creo que el valor depende de la arquitectura – hop

+0

Sí, depende de la arquitectura y está codificado en 100 en la mayoría de las arquitecturas (aunque quizás no todas) en kernels recientes. – MarkR

+0

OK, deja que guarden sus secretos. Solo quería saber por qué necesito multiplicar los valores de '/ proc/stat' y'/proc//stat' para obtener tiempos de CPU. Supongo que 10 ms es suficiente precisión para eso ... –

0

me escribió esto:

https://github.com/peppelinux/xt_recent_parser

salida es la siguiente:

python3 xt_recent_parser.py 
XT_RECENT python parser 
<[email protected]> 


114.241.108.160, last seen: 2017-03-25 18:21:42 after 13 Connections 
46.165.210.17, last seen: 2017-03-25 13:07:54 after 10 Connections 
61.53.219.162, last seen: 2017-03-25 17:39:17 after 20 Connections 
179.37.141.232, last seen: 2017-03-25 18:08:23 after 2 Connections 
114.42.117.39, last seen: 2017-03-25 13:22:14 after 18 Connections 
177.12.84.234, last seen: 2017-03-25 16:22:14 after 17 Connections 

creo que será fácil de editar si es necesario la conversión milisegundo, es suficiente para extender JiffyTimeConverter Python clase

Cuestiones relacionadas