- 主题:Linux应用需要精度1毫秒的定时器,有什么方案?
- rt
 --
 FROM 36.112.69.*
 
- 换操作系统吧
 【 在 wjhtingerx 的大作中提到: 】
 : rt
 --
 FROM 222.71.112.*
 
- 可以这样试试?
 
 用一个线程疯狂轮询读取那个时钟频率寄存器。然后根据频率转换成时间。
 【 在 wjhtingerx 的大作中提到: 】
 : rt
 --
 FROM 121.69.86.*
 
- 没用,linux本身计时器有误差,加上系统本身不是实时的,1ms基本不可能。
 否则用gettimeofday就行,里面有微秒。
 
 【 在 chunhui 的大作中提到: 】
 : 标  题: Re: Linux应用需要精度1毫秒的定时器,有什么方案?
 : 发信站: 水木社区 (Thu Aug 18 10:03:28 2022), 站内
 :
 : 可以这样试试?
 :
 : 用一个线程疯狂轮询读取那个时钟频率寄存器。然后根据频率转换成时间。
 : 【 在 wjhtingerx 的大作中提到: 】
 : : rt
 :
 : --
 : 大街上的灯光 又亮得像白天
 : 那是因为大排档在冒烟烧烤 还有重新亮起招牌的足疗店
 : 关门打(lei)烊最多也就一周 因为无故死了一个青年
 : 生意如往常红火 喝酒撸串儿扯淡
 : 喝酒最特么自由 撸串儿无需尊严 扯淡绝对很安全
 : 39-38/2
 :
 :
 : ※ 来源:·水木社区 mysmth.net·[FROM: 121.69.86.*]
 --
 FROM 112.53.225.*
 
- Linux的任务调度的时间精度是在10ms左右,要1ms的精度通常是不可能的。
 如果要用Linux做实时任务,一般的做法是:
 
 1. 独立出一些CPU核,这要修改grub启动参数。这些被独立出的核一般的进程不能使用。
 2. 有实时任务的进程,绑定到这样的独立核(sched_setaffinity)。如果该进程还有子进程
 或子线程,每个子进程或子线程要绑定到不同的独立核,保证每个独立核上只有一个进程或
 线程。
 3. 设定任务的scheduler为实时(sched_setscheduler)。
 4. 需要等待1ms时,不要用sleep/usleep/nanosleep,而是不停循环来判断有没有到预定时间。
 
 以上除了第4项简单一点,都比较麻烦且坑比较多,我只是参与过项目也说不了很细。
 
 另外,既然有实时性的需求,还是推荐换个实时操作系统,用合适的工具才能事半功倍。
 
 
 【 在 wjhtingerx 的大作中提到: 】
 : rt
 --
 FROM 58.33.81.*
 
- 这个基本可以做到的。用RT Linux kernel, 打开CONFIG_PREEMPT_RT, 用户空间用nanosleep。
 
 https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git/
 或git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git
 
 RT kernel在Intel比较新的处理器上延迟可以小于50us。
 
 【 在 wjhtingerx 的大作中提到: 】
 : rt
 --
 FROM 192.55.54.*
 
- 我没这么试过。如果能接受这个误差不那么大,凑合也可以。
 【 在 liuxueshen 的大作中提到: 】
 : 没用,linux本身计时器有误差,加上系统本身不是实时的,1ms基本不可能。
 : 否则用gettimeofday就行,里面有微秒。
 --
 FROM 121.69.86.*
 
- 我说的就是这个意思。用一个孤立核心上的线程疯狂轮询频率寄存器。。。
 【 在 RunningOn 的大作中提到: 】
 : Linux的任务调度的时间精度是在10ms左右,要1ms的精度通常是不可能的。
 : 如果要用Linux做实时任务,一般的做法是:
 : 1. 独立出一些CPU核,这要修改grub启动参数。这些被独立出的核一般的进程不能使用。
 : ...................
 --
 FROM 121.69.86.*
 
- 没用的。
 
 要解决这个问题上rt kernel,极限可以做到max jitter 4000ns左右,典型可以做到10000ns
 【 在 chunhui 的大作中提到: 】
 : 我说的就是这个意思。用一个孤立核心上的线程疯狂轮询频率寄存器。。。
 --
 FROM 117.136.35.*
 
- 我没试过轮询那种方法。要求不高凑合一下或许可以。真正严格准确定时器肯定要内核才行。
 【 在 lvsoft 的大作中提到: 】
 : 没用的。
 : 要解决这个问题上rt kernel,极限可以做到max jitter 4000ns左右,典型可以做到10000ns
 --
 FROM 121.69.86.*