C linux内核将滴答声/滴答声更改为高于1000赫兹
在linux中,是否可以更改它的计时速率以获得更高的时间分辨率 在我的系统中,默认分辨率设置为1000hz,这意味着我的最小延迟为1ms,我需要一个延迟为1us甚至1ns的percise系统,但我不知道是否有可能将其更改为1000hz以上 如果可以改变,在哪里/如何实现C linux内核将滴答声/滴答声更改为高于1000赫兹,c,linux,C,Linux,在linux中,是否可以更改它的计时速率以获得更高的时间分辨率 在我的系统中,默认分辨率设置为1000hz,这意味着我的最小延迟为1ms,我需要一个延迟为1us甚至1ns的percise系统,但我不知道是否有可能将其更改为1000hz以上 如果可以改变,在哪里/如何实现 考虑到我写一个c脚本,还有其他的解决方法吗?当然,这取决于硬件(如果是特定的嵌入式)和内核版本,但是在现代Linux中,睡眠时间不受Jiffies的控制。2.6.24以上的Linux内核可以使用高精度事件计时器(HPET)来触发
考虑到我写一个c脚本,还有其他的解决方法吗?当然,这取决于硬件(如果是特定的嵌入式)和内核版本,但是在现代Linux中,睡眠时间不受Jiffies的控制。2.6.24以上的Linux内核可以使用高精度事件计时器(HPET)来触发某些事件 它与应用程序睡眠无关。如果您想睡眠1ms或更短,则无需设置
CONFIG_HZ_1000
在Linux中,可以使用函数usleep()
和nanosleep()
。在运行Ubuntu的台式PC上,时钟分辨率已经达到1ns。然而,这并不意味着在非实时系统中完全睡眠几纳秒是可能的
检查此示例(使用gcc clock.c-O3-Wall-lrt-o clock编译):
在这种情况下,我的误差可以小于20美元
在对clock\u gettime
的后续调用之间没有任何睡眠功能,我可以看到范围200-900 ns
的延迟。因此,可以通过忙循环以usec
精度测量睡眠:
clock_gettime(CLOCK_MONOTONIC, &tp1);
clock_gettime(CLOCK_MONOTONIC, &tp2);
while (get_diff(&tp1, &tp2) < ns_time_to_sleep)
clock_gettime(CLOCK_MONOTONIC, &tp2);
clock\u gettime(clock\u单调,&tp1);
时钟获取时间(时钟单调,&tp2);
while(获取差异(&tp1和&tp2)
如果您只是在寻找更高的计时器分辨率,如纳秒,您可以使用,而不是乱搞jiffies。更多细节可以看出这一点。您的系统是否需要更高分辨率的调度程序才能更具反应性,或者您是否需要更高分辨率的时间测量?这是为了更好的反应时间,能够睡眠x us和/或执行每个x us,您可能会进入一个负载过重的系统。在这种情况下,你不会得到想要的效果。为什么不使用由clock\u gettime(2)
syscall提供的高分辨率时钟?它使用的cpu滴答计数器比时钟滴答给出的0.001s
分辨率更高。
sudo chrt --rr 99 ./clock
clock_gettime(CLOCK_MONOTONIC, &tp1);
clock_gettime(CLOCK_MONOTONIC, &tp2);
while (get_diff(&tp1, &tp2) < ns_time_to_sleep)
clock_gettime(CLOCK_MONOTONIC, &tp2);