Я хотел бы знать HZ системы, то есть сколько миллисекунд - одно jiffy из кода Python.
Python: как получить количество секунд мили за один раз
Ответ 1
Существует USER_HZ
>>> import os
>>> os.sysconf_names['SC_CLK_TCK']
2
>>> os.sysconf(2)
100
что ядро использует для сообщения времени в /proc
.
На странице руководства time(7)
:
Программные часы, HZ и Jiffies
Точность различных системных вызовов, устанавливающих таймауты (например, выберите (2), sigtimedwait (2)) и измерьте время процессора (например, getrusage (2)) ограничено разрешением программных часов, поддерживаемых часов ядром, которое измеряет время в jiffies. Размер jiffy равен определяемый значением постоянной ядра HZ.
Значение HZ зависит от версий ядра и аппаратных платформ. На i386 ситуация складывается так: на ядрах вплоть до 2.4.x, HZ составляло 100, давая значение в 0,01 секунды; начиная с 2.6.0, HZ был увеличен до 1000, что дало бы 0,011 секунды. поскольку ядро 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 в VM...
Ответ 2
sysconf (SC_CLK_TCK) не дает частоты прерываний таймера в Linux. Он дает частоту jiffies, которая видима для пользовательского пространства в таких вещах, как счетчики в разных каталогах в /proc
Фактическая частота скрывается из пользовательского пространства, преднамеренно. Действительно, в некоторых системах используются динамические тики или "бескамерные" системы, поэтому их вообще нет.
Все интерфейсы пользовательского пространства используют значение из SC_CLK_TCK, которое, насколько я могу видеть, всегда находится под Linux.
Ответ 3
Я написал это:
https://github.com/peppelinux/xt_recent_parser
вывод выглядит следующим образом:
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
Я думаю, что это будет легко редактировать, если вам потребуется миллисекундное преобразование, вам нужно только расширить класс python JiffyTimeConverter