USER_HZ
>>> import os
>>> os.sysconf_names['SC_CLK_TCK']
2
>>> os.sysconf(2)
100
- это то, что ядро использует, чтобы сообщать время в /proc
.
На странице руководства time(7)
:
Программные часы, HZ и Jiffies
Точность различных системных вызовов, которые устанавливают тайм-ауты (например, select (2), sigtimedwait (2)) и измеряют время ЦП (например, getrusage (2)) ограничен разрешением программных часов, часов, поддерживаемых ядром, которое измеряет время в jiffies.Размер jiffy определяется значением константы ядра HZ.
Значение HZ варьируется в зависимости от версии ядра и аппаратных платформ.На i386 ситуация выглядит следующим образом: на ядрах вплоть до 2.4.x включительно HZ равнялся 100, давая значение jiffy 0,01 секунды;начиная с 2.6.0, HZ был повышен до 1000, что дает мгновенный результат в 0,001 секунды.Начиная с ядра 2.6.13, значение HZ является параметром конфигурации ядра и может быть 100, 250 (по умолчанию) или 1000, что дает значение jiffies, соответственно, 0,01, 0,004 или 0,001 секунды.Начиная с ядра 2.6.20, доступна еще одна частота: 300, число, которое делится поровну для общей частоты видеокадров (PAL, 25 Гц; NTSC, 30 Гц).
Время (2)Системный вызов - это особый случай.Он сообщает время с гранулярностью, определенной константой ядра USER_HZ.Приложения в пользовательском пространстве могут определить значение этой константы с помощью sysconf (_SC_CLK_TCK).
Если вам абсолютно необходимо знать 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)))
Дает 250 на моем ноутбуке (что звучито праве) и 1000000000 в ВМ…