赞
踩
主线Linux是软实时系统,加入实时补丁后将其改造为硬实时系统。RT-LINUX 特点如下:
实现实时内核很重要的特点是可抢占性,就绪的高优先级的任务能够抢占低优先级任务。
Linux内核支持实时进程和非实时进程调度(无PREEMPT_RT补丁支持也是支持实时进程调度,只是软实时,有补丁后就是硬实时)。
对于Linux进程任务来说,Linux 内核实现了多种调度策略。它们分为非实时和实时策略。调度策略已经在主线 Linux 中实现。
非实时策略:
SCHED_OTHER:每个任务都有一个所谓的“nice值”。它是一个介于 -20(最高 nice 值)和 19(最低 nice 值)之间的值。任务执行时间的平均值取决于相关的 nice 值。SCHED_BATCH:此策略源自 SCHED_OTHER 并针对吞吐量进行了优化。SCHED_IDLE:它也是从 SCHED_OTHER 派生的,但它的值比 19 弱。
实时策略:
SCHED_FIFO:任务的优先级介于 1(低)和 99(高)之间。在此策略下运行的任务将被调度,直到它完成或更高优先级的任务抢占它。SCHED_RR:此策略源自 SCHED_FIFO。与 SCHED_FIFO 的区别在于任务在定义的时间片的持续时间内运行(如果它没有被更高优先级的任务抢占)。一旦时间片用完,它可以被具有相同优先级的任务中断。时间片定义在 procfs (/proc/sys/kernel/sched_rr_timeslice_ms) 中导出。SCHED_DEADLINE:此策略实施全局最早deadline优先 (GEDF) 算法。在此策略下调度的任务可以抢占使用 SCHED_FIFO 或 SCHED_RR 调度的任何任务。
高分辨率定时器
中断线程化自旋锁spinlock_t改为互斥锁rt_mutex,要使用自旋锁则使用raw_spinlock_t
打入PREEMPT_RT后内核抢占模型配置则会多了如下两项:
Preemptible Kernel (Basic RT):这种抢占模型类似于“抢占内核(低延迟桌面)”模型。除了上面提到的属性外,线程中断处理程序是强制的(就像使用内核命令行参数时一样threadirqs)。该模型主要用于 PREEMPT_RT 补丁实现的替代机制的测试和调试。
Fully Preemptible Kernel (Real-Time):除了少数选定的关键部分之外,所有内核代码都是可抢占的。线程中断处理程序是强制的。此外,还实现了几种替代机制,如睡眠自旋锁和 rt_mutex,以减少抢占禁用部分。此外,大的抢占禁用部分被单独的锁定结构取代。必须选择这种抢占模型以获得硬实时行为。
hackbench 可用于生成系统负载,同时使用cyclictest测量延迟。
hackbench -l -1 -g 15 -f 25 -P 是用来制作负载的
-l -1: 表示hackbench将以无限循环方式运行,不会自动退出。
-g 15: 定义启动多少组发送者和接受者。
-f 25: 设置每个进程组之间的父子关系的数量为25。这决定了进程组之间的通信方式。
cyclictest -t 4 -p 99 -m -d 0
-t 4: 指定使用1个线程进行测试。每个线程将创建一个周期性负载。
-p 99: 设置线程的优先级为99,这是最高的实时优先级。使用最高优先级可以更好地测试系统的实时性能。
-m: 运行测试前锁定内存。这将防止测试期间的内存分页错误,并提供更一致的测试结果。
-d 0: 禁用延迟输出。这将阻止输出每个线程的详细延迟数据,只显示测试的总体统计信息
可以 看到
T: 0 序号为0的线程 P: 0 线程优先级为0
I: 1000 时间间隔为1000微秒(us) C: 计数器。线程的时间间隔每达到一次,计数器加1。上面的图位5784673us即94分钟。
Min: 最小延时(us) 8 Act: 最近一次的延时(us) 20 Avg:平均延时(us) 22 Max:最大延时(us) 72
得出RT-Linux的实时性:
最大的延迟时间测试到为76us 平均延迟为27us
这个实时性 是 很优越的,跑ethercat 没有压力。
硬件 参数 :G5501 产品详情
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。