小智 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亿个......
sysconf(SC_CLK_TCK)没有给出Linux中定时器中断的频率.它给出了jifies的频率,这对于用户空间是可见的,比如/ proc中各个目录中的计数器
故意将实际频率隐藏在用户空间中.实际上,有些系统使用动态滴答或"无滴答"系统,因此根本没有任何系统.
所有用户空间接口都使用SC_CLK_TCK中的值,据我所知,在Linux下总是100.
| 归档时间: |
|
| 查看次数: |
8832 次 |
| 最近记录: |