• rk3568 RT-LINUX 测试


    G5501 产品详情

    主线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,以减少抢占禁用部分。此外,大的抢占禁用部分被单独的锁定结构取代。必须选择这种抢占模型以获得硬实时行为。

    图片

    图片

    G5501 测试

    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 产品详情

  • 相关阅读:
    【web-攻击验证机制】(3.2.4)验证机制设计缺陷:非唯一性用户名、可预测的用户名、可预测的初始密码、证书分配不安全
    mvn打包:依赖包和启动包分离
    Vue(三)——组件化编程
    【Unity】【VR】如何让Distance Grab抓取物品时限制物品的Rotation
    机器学习入门三
    .net----结构和枚举
    【pen200-lab】10.11.1.14
    ubuntu 22.04 编译 aosp 13 源码
    如何快速找到华为手机中下载的文档
    在Ubuntu上安装CUDA和cuDNN以及验证安装步骤
  • 原文地址:https://blog.csdn.net/peixiuhui/article/details/133821890