《1-携手铸造未来:高性能多核RISC-V与RT-Thread 的融合之旅(1)_20240102141012.pdf》由会员分享,可在线阅读,更多相关《1-携手铸造未来:高性能多核RISC-V与RT-Thread 的融合之旅(1)_20240102141012.pdf(20页珍藏版)》请在三个皮匠报告上搜索。
1、RT-Thread 社区技术工程师社区技术工程师王顺王顺 sssOpen and Easy to Use Operating Systemhttps:/www.rt-thread.io单核单核-多核处理器多核处理器 SMPAMPOpen and Easy to Use Operating Systemhttps:/www.rt-thread.ioWhat is SMP?SMP:对称多处理,是一种计算机系统架构,其中两个或更多的处理器(或处理器对称多处理,是一种计算机系统架构,其中两个或更多的处理器(或处理器核心)共享同一主存储器系统和总线结构核心)共享同一主存储器系统和总线结构。Open an
2、d Easy to Use Operating Systemhttps:/www.rt-thread.ioRT-Thread-SMP整体执行一份操作系统程序整体执行一份操作系统程序将期望执行的任务绑定将期望执行的任务绑定在具体的核心在具体的核心运行运行任务可以依据任务可以依据CPUCPU负荷情况迁移到空闲核负荷情况迁移到空闲核兼容单核兼容单核RT-Thread APIRT-Thread API及软件组件、软件包及软件组件、软件包充分利用多核特性提升计算性能,方便多核编程,充分利用多核特性提升计算性能,方便多核编程,可用于多类应用场合可用于多类应用场合人工智能边缘计算多媒体Open and Ea
3、sy to Use Operating Systemhttps:/www.rt-thread.ioLinux与与 RT-Thread 同时运行于异构多核同时运行于异构多核RV64Linux来完成一些复杂的工作,例如来完成一些复杂的工作,例如存储,网络,显示等;存储,网络,显示等;RTOS则可以用于实时控制,这里运则可以用于实时控制,这里运行行RT-Thread开源操作系统。开源操作系统。在在Linux和和RTOS之间,可以通过标之间,可以通过标准的准的OpenAMP框架进行通信,异系框架进行通信,异系统间的数据交互统间的数据交互Open and Easy to Use Operating Sy
4、stemhttps:/www.rt-thread.ioWhy use SMP?01 性能性能可以将不同的线程按需分配给不同的核心,并行处理,提高程序执行效率。02 简化编程模型简化编程模型处理器均可访问同一存储器,开发者不需要考虑数据在不同处理器之间的移动问题03 节约节约成本成本同等需求下,增强单个核心的成本远高于通过增加核心数量来提升处理器的性能的成本。04 提高安全性能提高安全性能 当前核心无法运行某个任务时,通过软件可以将该任务分配到其他核心。Open and Easy to Use Operating System20242024Cortex-A (开源仓库已有开源仓库已有)qemu
5、-vexpress-a9Cortex-A (开源仓库已有开源仓库已有)qemu-virt64-aarch64(开源仓库已有开源仓库已有)K210https:/www.rt-thread.ioTypical BSP Overview玄铁C908,C910Cortex-M (开源仓库已有开源仓库已有)raspberry-pico 主核(通常为核心0)首先启动,完成系统时钟、存储、外设等初始化,在此期间其他核心处于空闲状态01.核心状态核心状态 各核心的私有栈、中断私有部分、系统定时器私有部分等02.私有资源私有资源移植移植SMP的两个明确的两个明确 不可在某个核心中调用其他核心的私有资源,这样可能
6、会触发异常03.资源调用资源调用Open and Easy to Use Operating Systemhttps:/www.rt-thread.io移植移植RT-Thread SMP 框架框架的三部分修改的三部分修改Open and Easy to Use Operating Systemhttps:/www.rt-thread.io010203Open and Easy to Use Operating Systemhttps:/www.rt-thread.ioRISC-V 玄铁玄铁C908内核内核简介简介 C908 的中断控制器(PIC)采用外置式设计,可以支持在多个cluster 之
7、间处理外部中断和局部中断。01.中断中断管理管理 多 cluster 多核系统中共用一个 64 位系统计时器,各个核心拥有私有的计时器比较值寄存器,通过采集系统计时器的数值与软件设置的私有计时器比较值寄存器进行比较,产生计时器信号。02.系统定时器系统定时器03.调试系统调试系统 C908 采用多 cluster 多核单端口调试框架,通过一个共享的 JTAG 接口访问各个 cluster 的调试单元,控制核进出调试模式和访问处理器资源。JTAG 接口和调试单元(DM)支持 RISC-V debug V0.13.2 协议标准。Open and Easy to Use Operating Syst
8、emhttps:/www.rt-thread.ioRISC-V 玄铁玄铁C910内核简介内核简介 C910的中断控制器(PIC)采用外置式设计,可以支持在多个cluster 之间处理外部中断和局部中断。01.中断管理中断管理 多 cluster 多核系统中共用一个 64 位系统计时器,各个核心拥有私有的计时器比较值寄存器,通过采集系统计时器的数值与软件设置的私有计时器比较值寄存器进行比较,产生计时器信号。02.系统定时器系统定时器03.调试系统调试系统 C910MP 支持兼容 IEEE-1149.1 标准的 JTAG 通信协议(通称 JTAG5),可以同已有的 JTAG 部件或独立的 JTAG
9、 控制器集成在一起 Open and Easy to Use Operating System https:/www.rt-thread.io玄铁玄铁C908,C910适配适配RT-Thread SMP框架框架注意事项注意事项 初始时通常关闭当前所有的外部中断的使能03.外部中断使能外部中断使能 对于RT-Thread默认共用主核的系统定时器为系统提供心跳,没有特殊需求时不需要关心其他星跳定时器04.系统定时器系统定时器 多核需要进行核间通讯,所以在所有核心启动后确保软件中断使能05.核间中断核间中断中断栈中断使能系统定时器中断阈值软件中断 不同核心均可以响应中断,所以需要分配各自核心的中断栈
10、用于触发中断时的上下文的保存与加载01.中断栈中断栈 每个核心都可以设置自己的中断阈值,管理触发中断请求的中断源的优先级。初始化时通常将中断阈值设置为0,允许所有外部中断触发02.中断阈值中断阈值Open and Easy to Use Operating Systemhttps:/www.rt-thread.io移植RT-Thread SMP需要关心的API 初始化初始化次级次级CPUCPU,启动启动次级次级CPCPU U调度调度04.secondary_cpu_c_start 检查次级检查次级CPUCPU启动标志入口启动标志入口02.secondary_cpu_entry03.rt_hw_
11、secondary_cpu_up 设置次级设置次级CPUCPU启动标志启动标志 核间中断核间中断07.rt_hw_ipi_send 上锁上锁自旋锁自旋锁05.rt_hw_spin_lock06.rt_hw_spin_unlock 解锁解锁自旋锁自旋锁 次级次级CPUCPU空闲函数空闲函数08.rt_hw_secondary_cpu_idle_exec 获取当前获取当前corecore的的IDID01.rt_hw_cpu_idOpen and Easy to Use Operating Systemhttps:/www.rt-thread.io上下文切换需要做的修改上下文切换需要做的修改Open
12、 and Easy to Use Operating Systemhttps:/www.rt-thread.io 各自核心都拥有自己的中断栈,在执行中断处理函数时需要将中断栈切换为当前各自核心都拥有自己的中断栈,在执行中断处理函数时需要将中断栈切换为当前CPUCPU的中断栈的中断栈01.调整中断栈调整中断栈01.调整中断栈调整中断栈示例程序:示例程序:上下文切换需要做的上下文切换需要做的修改修改Open and Easy to Use Operating Systemhttps:/www.rt-thread.io 获取执行上下文切换的核心,检查在执行中断处理函数过程中是否唤醒了其他线程02.v
13、oid rt_scheduler_do_irq_switch(void*context)上下文切换需要做的修改上下文切换需要做的修改Open and Easy to Use Operating Systemhttps:/www.rt-thread.io 获取执行上下文切换的核心,将当前核心执行的线程绑定为该线程获取执行上下文切换的核心,将当前核心执行的线程绑定为该线程03.void rt_cpus_lock_status_restore(struct rt_thread*thread)示例程序:示例程序:Open and Easy to Use Operating Systemhttps:/w
14、ww.rt-thread.io平台:玄铁平台:玄铁C908 QEMU运行示例运行示例:分别在核:分别在核0 0与核与核1 1运行自运行自己的线程,并输出当前核心的己的线程,并输出当前核心的IDID运行示例:输出运行示例:输出CPUCPU绑定的绑定的线程线程,当前当前CPUCPU运行运行的线程,线程的优先级等信息的线程,线程的优先级等信息应用应用Open and Easy to Use Operating Systemhttps:/www.rt-thread.ioRT-Thread-RISCVHiFive1RV32M1_VEGA GD32V103AB32VG1CH32V103/307.HP600
15、0ESP32-C3芯来Nuclei N200.平头哥T-Head E902、E907、C906.Sifive freedom E310、E24.SMART-EVB for E804/E804F/E804DAndes D45.沁恒QingKeV3、V4PicoRV32Open-HW CV32E40PK210/K230Allwinner D1/D1sQEMU/RISCV64 VIRTBL808RV32RV64CoreRT-Thread Studio all-in-one IDE also provides support for RISC-V chips.Strategic MembersRV32EMCRV32IMACRV64IMABL602/702/616ES32vf2264Open and Easy to Use Operating Systemhttps:/www.rt-thread.io