我试图测量内核和用户空间之间的延迟,每1秒触发一次周期性计时器,并将事件通知用户空间(使用ioctl和wake_up_interruptible
)。
为此,我创建了一个使用hrtimer的内核模块和一个等待事件的用户空间测试。内核模块正在使用
在内核中:getnstimeofday()
为了获得时间,并且用户空间正在使用:
在用户空间:clock_gettime()
。
但令人惊奇的是,我看到了来自用户空间和内核的结果时间不同步!
第一届赛事:
用户空间:8866秒896197992nsec;内核:1388251190秒442706727nsec
第二届赛事:
用户空间:8867秒896151470nsec;内核:1388251191秒442690693nsec
您可以看到内核和用户空间时钟不同步,所以我不能真正测量内核和用户空间事件之间的延迟,对吗?
谢谢你的任何想法,Ran
发布于 2017-01-03 15:57:45
从您的测试结果来看,这两个API之间似乎只有一个“偏移”,但是这两个事件的增量(1秒差)来自http://lxr.free-electrons.com/source/kernel/time/timekeeping.c?v=2.6.37#L101的http://lxr.free-electrons.com/source/kernel/time/timekeeping.c?v=2.6.37#L101是正确的,后者是内核time“从上一个update_wall_time开始计算增量”。所以他们实际上没有相同的时间系统。(用户空间是获取系统定时器)。我认为,您可以使用名为Ftrace的Linux内核来度量这种延迟。
https://stackoverflow.com/questions/41447121
复制相似问题