Linux kernel getnstimeofday返回的最大值

Linux kernel getnstimeofday返回的最大值,linux-kernel,kernel,Linux Kernel,Kernel,我正在实现一个内核模块,我需要在其中测量一些事件之间的时间。为此,我使用函数getnstimeofday以纳秒为单位获取当前时间戳。然后我计算两个事件之间的时间,如: nsecs_elapsed = t2 - t1; 然而,当纳秒计数器绕过溢出并从零开始再次计数时,计算是不正确的,在这种情况下,我得到的t2比t1小。如果是这种情况,我想用以下方法计算经过的纳秒数: nsecs_elapsed = (POSSIBLE MAX_VALUE_TV_NSEC - t1) + (++t2); 在可能的

我正在实现一个内核模块,我需要在其中测量一些事件之间的时间。为此,我使用函数getnstimeofday以纳秒为单位获取当前时间戳。然后我计算两个事件之间的时间,如:

nsecs_elapsed = t2 - t1;
然而,当纳秒计数器绕过溢出并从零开始再次计数时,计算是不正确的,在这种情况下,我得到的t2比t1小。如果是这种情况,我想用以下方法计算经过的纳秒数:

nsecs_elapsed = (POSSIBLE MAX_VALUE_TV_NSEC - t1) + (++t2);
在可能的情况下,_MAX_VALUE_TV_NSEC应该是函数getnstimeofday返回的最大可能值

现在,此函数即getnstimeofday将此信息填入struct timespec变量的tv.nsec成员中,该变量的地址必须作为参数传递给函数getnstimeofday。 由于tv.nsec是long I类型,尽管long变量的最大值可能是该函数返回的最大可能值,但根据我的观察,情况并非如此

从这个函数,即getnstimeofday,我总是得到纳秒数作为一个9位数字,所以我假设这个函数返回的最大值可能是99999999,但我想对此进行一些确认。我在任何地方都没有找到这样的信息,当我查看内核代码时,我仍然不清楚这个函数是否返回了一个最大可能值,而不是一个有符号long的最大值

有人知道getnstimeofday的返回值是否由某个最大值分隔吗? 或者您知道我可以在哪里查看这些信息吗?

函数getnstimeofday填充结构中的两个字段:

电视秒,总秒数, 电视与其他纳秒同步 这两个字段不能全部溢出:溢出tv_sec部分需要几百年的时间


由于每秒有10^9纳秒,正如您所猜测的,tv_nsec字段的最大值为99999999。

Wow。。。好啊这真的很简单,完全有道理。。。。从来没想过。谢谢你的回答!