- 主题:Linux应用需要精度1毫秒的定时器,有什么方案?
可以这样试试?
用一个线程疯狂轮询读取那个时钟频率寄存器。然后根据频率转换成时间。
【 在 wjhtingerx 的大作中提到: 】
: rt
--
FROM 121.69.86.*
我没这么试过。如果能接受这个误差不那么大,凑合也可以。
【 在 liuxueshen 的大作中提到: 】
: 没用,linux本身计时器有误差,加上系统本身不是实时的,1ms基本不可能。
: 否则用gettimeofday就行,里面有微秒。
--
FROM 121.69.86.*
我说的就是这个意思。用一个孤立核心上的线程疯狂轮询频率寄存器。。。
【 在 RunningOn 的大作中提到: 】
: Linux的任务调度的时间精度是在10ms左右,要1ms的精度通常是不可能的。
: 如果要用Linux做实时任务,一般的做法是:
: 1. 独立出一些CPU核,这要修改grub启动参数。这些被独立出的核一般的进程不能使用。
: ...................
--
FROM 121.69.86.*
我没试过轮询那种方法。要求不高凑合一下或许可以。真正严格准确定时器肯定要内核才行。
【 在 lvsoft 的大作中提到: 】
: 没用的。
: 要解决这个问题上rt kernel,极限可以做到max jitter 4000ns左右,典型可以做到10000ns
--
FROM 121.69.86.*
把那个核心孤立出来只给它一个线程用。关键还是看对实时性要求到底有多严格。是不是要命的场景。
【 在 hgoldfish 的大作中提到: 】
: 只要会进入内核态,在非实时的 linux 里面就有可能卡很久。
--
FROM 121.69.86.*
这个我不懂。我还没见过一万台pc。。
【 在 lipp 的大作中提到: 】
: 要命的应用不放PLC放PC里?
: 流行的思路是上微服务,堆一万台PC保高可用,但不保实时性。
--
FROM 121.69.86.*
孤立核心为啥不行?是被执行那个过程会被调度?
不是放内核里,我是说实时内核。也做不到?
【 在 lvsoft 的大作中提到: 】
: 孤立一个核心出来也没用。
--
修改:chunhui FROM 121.69.86.*
FROM 121.69.86.*
不是说靠这个办法达到真正的实时。是说如果要求不严格,可以用这个简单办法。
问题是,这种办法大概能达到什么程度?不知道有人用过没有,或者大概范围。
【 在 lvsoft 的大作中提到: 】
: 跟调度没关系,这个是linux内核+x86系统的双重复杂性因素导致的。
: 如果只是内核态独立一个核心出来就能解决问题,那你觉得rt kernel还有啥价值嘛。
: 所以说了,直接上rt kernel。rt不是这么简单的东西,至少里面很多坑都已经被人踩过了。
: ...................
--
FROM 121.69.86.*
能否大致估算一下,那种疯狂轮询的方法能不能达到1ms的要求?
【 在 lipp 的大作中提到: 】
: CPU是1.6G的CortexA8时,运行裁剪后的近实时的Linux时,Jitter-timer可以到10微秒左右,循环周期可以到0.1微秒。
--
FROM 121.69.86.*
那就是另一个问题了。如果定时任务只是非常简单的事,比如更新一个变量什么的。可以直接在轮训线程里做完就可以了。要看具体什么要求。要求不高的定时器这种办法肯定可以。
【 在 hongyan2022 的大作中提到: 】
: 即使 某个线程 或 进程 能够非常精准的 准时触发
: 操作系统也不保证能立刻调度起响应程序吧 ?
:
--
FROM 114.254.2.*