Time 时钟和内核2.6

Time 时钟和内核2.6,time,kernel,resolution,clock,Time,Kernel,Resolution,Clock,我现在正在使用Ubuntu11.04,并使用v2lin将我的程序从vxWorks移植到Linux。我对时钟有问题 使用此代码: struct timespec res; clock_getres(CLOCK_REALTIME, &res); 我有res.tv\u nsec=1,这有点不正确 正如这家伙所展示的:,内核2.4和2.6之间存在差异 那么内核2.6中时钟分辨率的正确值应该是多少呢 谢谢试着从procfs那里得到它 cat/proc/timer\u list为什么您认为它不正确

我现在正在使用Ubuntu11.04,并使用v2lin将我的程序从vxWorks移植到Linux。我对时钟有问题

使用此代码:

struct timespec res;
clock_getres(CLOCK_REALTIME, &res);
我有res.tv\u nsec=1,这有点不正确

正如这家伙所展示的:,内核2.4和2.6之间存在差异

那么内核2.6中时钟分辨率的正确值应该是多少呢


谢谢

试着从procfs那里得到它


cat/proc/timer\u list

为什么您认为它不正确

例如,在现代x86 CPU上,内核使用TSC来提供高分辨率时钟-任何运行频率高于1Ghz的CPU都有一个TSC,其滴答声超过每纳秒一滴答声,因此纳秒分辨率非常常见。

根据内核源文件中的“include/linux/hrtimer.h”文件,
clock\u getres()
对于高分辨率计时器(如果系统中有此类计时器),将始终返回1ns(一纳秒)。该值是硬编码的,它意味着:“计时器的值将被四舍五入”

对于低分辨率计时器(如果没有hrtimer硬件,对于单调和实时时钟),linux将返回1/HZ(典型的HZ为100到1000;因此值将为1到10毫秒):

来自低分辨率计时器的值可能被舍入到如此低的精度(实际上它们就像linux内核的“滴答声”)


PS:据我所知,这篇文章比较了未启用(实现)HRTimer的2.4Linux和可用HRTimer的2.6内核。所以所有的值都是正确的。

是什么让你认为它是错误的?
269 /*
270  * The resolution of the clocks. The resolution value is returned in
271  * the clock_getres() system call to give application programmers an
272  * idea of the (in)accuracy of timers. Timer values are rounded up to
273  * this resolution values.
274  */
275 # define HIGH_RES_NSEC          1
276 # define KTIME_HIGH_RES         (ktime_t) { .tv64 = HIGH_RES_NSEC }
277 # define MONOTONIC_RES_NSEC     HIGH_RES_NSEC
278 # define KTIME_MONOTONIC_RES    KTIME_HIGH_RES
321 #define LOW_RES_NSEC            TICK_NSEC
322 #define KTIME_LOW_RES           (ktime_t){ .tv64 = LOW_RES_NSEC }