Python:如何获得每个jiffy的mili秒数

Mur*_*rgh 13 python linux

我想知道系统的HZ,即Python代码中有多少mili秒.

小智 24

有USER_HZ

>>> import os
>>> os.sysconf_names['SC_CLK_TCK']
2
>>> os.sysconf(2)
100
Run Code Online (Sandbox Code Playgroud)

这是内核用来报告时间的内容/proc.

time(7)手册页:

软件时钟,HZ和Jiffies

设置超时的各种系统调用的准确性(例如,select(2),sigtimedwait(2))和测量CPU时间(例如,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 HZ; NTSC,30 HZ).

时间(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)))
Run Code Online (Sandbox Code Playgroud)

我的笔记本电脑上有250个(听起来很合适),在VM中有10亿个......


Mar*_*rkR 5

sysconf(SC_CLK_TCK)没有给出Linux中定时器中断的频率.它给出了jifies的频率,这对于用户空间是可见的,比如/ proc中各个目录中的计数器

故意将实际频率隐藏在用户空间中.实际上,有些系统使用动态滴答或"无滴答"系统,因此根本没有任何系统.

所有用户空间接口都使用SC_CLK_TCK中的值,据我所知,在Linux下总是100.