Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    国产工业CPU平台,米尔基于全志T507-H开发板的实时性分析与测试

    其它全志芯片讨论区
    1
    1
    73
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Z
      zznzzn LV 4 last edited by

      原文链接:https://mp.weixin.qq.com/s/tGGlo9IILN9Yw7J094cmgg

      全志T5系列是一个高性能四核 CortexTM–A53 处理器,适用于新一代汽车市场。T5系列符合汽车 AEC – Q100 测试要求。该芯片集成四核 CortexTM–A53 CPU、G31MP2 GPU、32 位 DDR3/LPDDR3/DDR4/LRDDR4 动态随机存储器。

      MYC-YT507H核心板基于T507-H处理器研制,具有丰富的接口资源, 拥有良好的软件开发环境,内核支持开源操作系统Linux。

      在开发阶段,建议配合核心板配套的评估套件 MYD-YT507H 来加速开发。评估套件的详细信息请访问:http://www.myir-tech.com/product

      02.实时内核设计

      实时补丁我们选择RT-Preempt来实现。

      2.1. 移植补丁

      RT补丁官网 从RT官网下载4.9.170对应补丁

      https://wiki.linuxfoundation.org/realtime/start

      https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.9/older/

      微信图片_20230208113756.png

      把解压后的补丁放到linux4.9目录下,然后用下面命令打包即可

      patch -p1 < ./patch-4.9.170-rt129.patch
      

      微信图片_20230208114225.png

      由于代码有差异,会提示大量不匹配,导致补丁打入失败则用下面命令找出打入失败文件

      find ./ -name "*.rej"
      

      微信图片_20230208114229.png

      手动逐一检查rej文件,逐个修改

      难点:

      zram驱动,sdk中源码引用自5.x版本驱动,需要找5.10左右RT补丁参考

      thread_info.h文件中手动将PREEMPT_LAZY宏改序号、宏名字

      微信图片_20230208114231.png

      **问题点1:**中断上下文中调用抢占api(rt_spin_lock即mutex)导致sched异常。

      分析与解决:

      这个中断是系统核心timer服务,至关重要。其通过request_percpu_irq注册中断isr,并不是常规request_irq或request_thread_irq,无法线程化。

      继续分析崩溃调用栈,在崩溃前最后的操作为cpufreq_cpu_get,通过分析其源码,基本找到__account_system_time函数中调用了cpufreq_acct_update_power,其中又调用了rt_spin_lock函数导致崩溃。

      通过分析cpufreq_acct_update_power函数,发现通过宏定义:CONFIG_CPU_FREQ_TIMES可以屏蔽该函数,进而不调用rt_spin_lock。

      经测试,在menuconfig中,屏蔽CONFIG_CPU_FREQ_TIMES后,系统能正常启动到login环节。

      解决方法:

      drivers/cpufreq/Kconfig中针对CPU_FREQ_TIMES设置与PREEMPT_RT_BASE的互斥。

      config CPU_FREQ_TIMES

      bool "CPU frequency time-in-state statistics"
      
      #    default y
      
         depends on !PREEMPT_RT_BASE
      
         help
      
           This driver exports CPU time-in-state information through procfs file
      
           system.
      
           ! It's incompatable with RT-Preempt scheduler.
      
           If in doubt, say N.
      

      打开RT实时测试工具,进行测试

      在buildroot下面打开相关测试,根据下面描述打开rt-tests工具即可,打开测试工具测试步骤

      2.2. 其他影响性能的配置

      禁用CPU Freq自动调频,并设置主频为最高频率:

      cd /sys/devices/system/cpu/cpufreq/policy0
      echo userspace > scaling_governor
      cat saling_max_freq > scaling_setspeed
      (如不禁用cpufreq调频功能,系统会因动态调频产生极大的偶然延迟)
      

      03.实时性测试

      空载测试

      cyclictest -p 99 -t 1 -d 100 -i 1000 -D 24h -m -a -n
      

      微信图片_20230208114455.png
      CPU&内存满载

      cyclictest -p 99 -t 1 -d 100 -i 1000 -D 24h -m -a -n
      

      增加压力

      stress-ng --cpu 4 --cpu-method all --io 4 --vm 50 -d 5 --fork 4 --timeout 36000s
      

      微信图片_20230208114458.png

      数据对比:

      板卡 MYD-YT507H
      测试时间 120min
      指令 cyclictest &stress-ng
      空载 平均 8us 最大 24us
      满载 平均 13us 最大 136us
      1 Reply Last reply Reply Quote Share 0
      • 1 / 1
      • First post
        Last post

      Copyright © 2022 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策