0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

openEuler Embedded软实时系统的特性说明

openEuler 来源:openEuler 作者:openEuler 2022-05-10 15:22 次阅读

本文主要介绍 openEuler Embedded 软实时系统的特性说明,构建方式和性能测试。

软实时特性介绍

「实时性简介」

实时的诉求通常是事件的响应时间不能超过规定的期限,一个事件的最大响应时间应该是确定的、可以预测的。

「Preempt_RT 补丁简介」

Preempt_RT 补丁(以下简称 RT 补丁)可直接打在内核源码上,并通过内核配置选项 CONFIG_PREEMPT_RT=y 使能软实时功能。RT 补丁实现的核心在于最小化内核中不可抢占部分的代码,从而使高优先级任务就绪时能及时抢占低优先级任务,减少切换时延。除此之外,补丁通过多种降低时延的措施,对锁、驱动等模块也进行了优化。

openEuler Embedded 版本中可使用的 RT 补丁请参考:

  1. QEMU:
  1. patch-5.10.0-60.10.0-rt62.patch
  2. patch-5.10.0-60.10.0-rt62_openeuler_defconfig.patch
  1. raspberrypi
  1. 0000-raspberrypi-kernel.patch(树莓派补丁)
  2. 0001-add-preemptRT-patch.patch
  3. 0002-modifty-bcm2711_defconfig-for-rt-rpi-kernel.patch

「补丁获取地址」

https://gitee.com/src-openeuler/kernel/blob/openEuler-22.03-LTS

「补丁关键功能举例」

  1. 增加中断程序的可抢占性(中断线程化、软中断线程化)
  2. 增加临界区的可抢占性(如自旋锁)
  3. 增加关中断代码的可抢占性
  4. 解决优先级反转问题(优先级继承)

软实时镜像构建指导

具体下载源码和编译流程建议参考容器环境下的快速构建指导:https://openeuler.gitee.io/yocto-meta-openeuler/yocto/quickbuild/container-build.html

「QEMU RT 镜像构建方式」

  • 步骤:

下载源码 --> 修改 bb 文件打入 RT 补丁 --> 手动打开 CONFIG_PREEMPT_RT --> 编译构建

  • 更改 aarch64 镜像内核 bb 文件,使其构建时自动打入 RT 补丁,示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/meta-openeuler/recipes-kernel/linux/

sed -i '/0001-arm64-add-zImage/a    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62.patch \' linux-openeuler.bb

sed -i '/patch-5.10.0-60.10.0-rt62.patch/a    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62_openeuler_defconfig.patch \' linux-openeuler.bb

git diff 输出示例:

diff --git a/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb b/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb
index 77d8717..5a4b2b8 100644
--- a/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb
+++ b/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb
@@ -11,6 +11,8 @@ SRC_URI = "file://kernel-5.10 
 # add patches only for aarch64
 SRC_URI_append_aarch64 += " 
     file://yocto-embedded-tools/patches/${ARCH}/0001-arm64-add-zImage-support-for-arm64.patch 
+    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62.patch 
+    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62_openeuler_defconfig.patch 
 "

 # add patches for OPENEULER_PLATFROM such as aarch64-pro
  • 打开 aarch64 镜像 defconfig 中的 CONFIG_PREEMPT_RT,示例:
cd /usr1/openeuler/src/yocto-embedded-tools/config/arm64/

sed -i 's/CONFIG_PREEMPT=y/CONFIG_PREEMPT_RT=y/g' defconfig-kernel

git diff 输出示例:

diff --git a/config/arm64/defconfig-kernel b/config/arm64/defconfig-kernel
index dece4f7..c4ef7ab 100644
--- a/config/arm64/defconfig-kernel
+++ b/config/arm64/defconfig-kernel
@@ -80,7 +80,7 @@ CONFIG_HIGH_RES_TIMERS=y

 # CONFIG_PREEMPT_NONE is not set
 # CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
+CONFIG_PREEMPT_RT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
  • 编译时选择 aarch64-std 架构,示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/scripts

source compile.sh aarch64-std /usr1/build /usr1/openeuler/gcc/openeuler_gcc_arm64le

bitbake openeuler-image
  • 构建镜像生成目录:

    /usr1/build/output/

  • 二进制介绍:

  1. Image-5.10.0:QEMU RT 内核镜像
  2. openeuler-image-qemu-aarch64-<时间戳>.rootfs.cpio.gz:QEMU 文件系统
  3. openeuler-glibc-x86-64-openeuler-image-aarch64-qemu-aarch64-toolchain-22.03.shSDK 工具链
  4. zImage:QEMU RT 内核的压缩镜像

「树莓派 RT 镜像构建方式」

  • 步骤:

下载源码 --> 修改 bb 文件打入 RT 补丁(补丁已自动打开 CONFIG_PREEMPT_RT) --> 编译构建

  • 更改 raspberrypi 镜像内核 bb 文件,使其构建时自动打入 RT 补丁并打开 CONFIG_PREEMPT_RT,示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/

sed -i '/0000-raspberrypi-kernel.patch/a    file://src-kernel-5.10/0001-add-preemptRT-patch.patch \' linux-openeuler.bbappend

sed -i '/0001-add-preemptRT-patch.patch/a    file://src-kernel-5.10/0002-modifty-bcm2711_defconfig-for-rt-rpi-kernel.patch \' linux-openeuler.bbappend

git diff 输出示例:

diff --git a/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend
index ad6ebab..cf52b3d 100644
--- a/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend
+++ b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend
@@ -1,5 +1,7 @@
 SRC_URI += "
     file://src-kernel-5.10/0000-raspberrypi-kernel.patch 
+    file://src-kernel-5.10/0001-add-preemptRT-patch.patch 
+    file://src-kernel-5.10/0002-modifty-bcm2711_defconfig-for-rt-rpi-kernel.patch 
 "
 OPENEULER_KERNEL_CONFIG = "${S}/arch/${ARCH}/configs/bcm2711_defconfig"
 do_configure_prepend() {
  • 编译时选择 raspberrypi4-64 架构,示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/scripts

source compile.sh raspberrypi4-64 /usr1/build /usr1/openeuler/gcc/openeuler_gcc_arm64le

bitbake openeuler-image
  • 构建镜像生成目录:

    /usr1/build/output/

  • 二进制介绍:

  1. Image:树莓派 RT 内核镜像
  2. openeuler-image-raspberrypi4-64-<时间戳>.rootfs.rpi-sdimg:树莓派 RT 支持 SD 卡镜像
  3. openeuler-glibc-x86-64-openeuler-image-cortexa72-raspberrypi4-64-toolchain-22.03.sh:SDK 工具链

树莓派 4B 的具体使用方法后期会详细介绍。

「说明」

  • 如果开发人员使用的内核配置不是 RT 补丁中修改的 defconfig(QEMU:arch/arm64/configs/openeuler\_defconfig,树莓派:arch/arm64/configs/bcm2711\_defconfig),则需要在自己的 defconfig 中开启内核配置选项CONFIG_PREEMPT_RT,例如上面 QEMU 构建方式中的 yocto-embedded-tools/config/arm64/defconfig-kernel
  • openEuler Embedded 软实时特性当前仅支持 arm64 架构

验证环境的软实时是否使能

  • 查看系统是否有 PREEMPT_RT 字样:

输入示例:

uname -a

输出示例:

Linux openeuler 5.10.0-rt62-v8 #1 SMP PREEMPT_RT Fri Mar 25 0322 UTC 2022 aarch64 GNU/Linux

软实时性能测试

「软实时相关测试」

参考 RT-Tests 指导

https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/rt-tests

进行软实时相关测试,用例包括但不限于:

  1. cyclictest 时延性能测试
  2. pi_stress 优先级继承测试
  3. hackbench 负载构造工具

下面以 cyclictest 时延性能测试为例进行说明。

「cyclictest 时延性能测试」

  1. 准备开发环境

安装 SDK,准备编译环境,示例:

sh openeuler-glibc-x86_64-openeuler-image-aarch64-qemu-aarch64-toolchain-22.03.sh

. /path/to/sdk/environment-setup-aarch64-openeuler-linux
  1. 编译用例
git clone https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git

cd rt-tests

git checkout stable/v1.0

make all
  1. 执行用例

编译完成后生成二进制 cyclictest,传入单板环境后可查看执行 cyclictest 时可配置的参数

./cyclictest --help

cyclictest 有多种参数配置方法,用例具体的入参设计可参考 test-design

https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/test-design

输入示例:

./cyclictest -p 90 -m -i 100 -n -h 100 -l 10000000

输出示例:

# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 2.32 1.99 1.58 1/95 311

T: 0 (  311) P:90 I:100 C:10000000 Min:      7 Act:    9 Avg:    8 Max:      16

即用例循环 1000 万次后,平均时延为 8us,最坏时延为 16us(该数据仅为示例,具体以环境实测为准)。

「说明:」

如果树莓派 4B 的空载情况下,平均时延较差(如超过 20us),可查看使用的树莓派固件是否将 CPU 频率配置为了节能模式,并根据需要将 CPU 频率配置为最高运行频率。如无 cpufreq 相关接口,则不涉及。

输入示例:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

输出示例:

powersave

如上结果表示 CPU 频率为节能模式。

配置 CPU 最高运行频率,输入示例:

echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2477

    浏览量

    46518
  • 源码
    +关注

    关注

    8

    文章

    572

    浏览量

    28583
  • openEuler
    +关注

    关注

    2

    文章

    289

    浏览量

    5660

原文标题:openEuler Embedded 软实时系统介绍

文章出处:【微信号:openEulercommunity,微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    支持开源欧拉openEuler!米尔基于海思Hi3093核心板上市!

        新品播报!米尔电子发布了基于海思Hi3093高性能MPU的 MYC-LHi3093核心板及开发板 , 此款核心板支持openEuler embedded OS欧拉系统,丰富生态,可实现100
    的头像 发表于 03-23 16:52 1872次阅读
    支持开源欧拉<b class='flag-5'>openEuler</b>!米尔基于海思Hi3093核心板上市!

    超云信创服务器与openEuler开源操作系统完成互认证

    日前,超云 C86 平台服务器 R3215、R3216 成功完成了与 openEuler 开源操作系统的兼容性适配工作。测试结果表明:openEuler 22.03 LTS SP3 版本的开源
    的头像 发表于 03-12 16:08 454次阅读
    超云信创服务器与<b class='flag-5'>openEuler</b>开源操作<b class='flag-5'>系统</b>完成互认证

    openEuler Code Camp 圆满举办

    在推动生态系统迅速发展方面的成功经验分享。大会期间,openEuler 社区与参会者深入探讨了社区在生态和技术进步方面的当前成就与未来展望。 openEuler 社区运营总监
    的头像 发表于 12-22 10:41 352次阅读
    <b class='flag-5'>openEuler</b> Code Camp 圆满举办

    openEuler Code Camp圆满举办

    12月17日,2023开放原子开发者大会openEuler Code Camp在无锡成功举办。此次盛会吸引了众多行 业领袖、前沿开发者和用户共襄盛举,共同聆听openEuler在推动生态系统迅速发展
    的头像 发表于 12-20 09:45 117次阅读

    睿思芯科正式加入openEuler社区

    P系列SoC与openEuler操作系统的适配工作,在安全启动、数据存储等应用场景中提供高匹配度的优化,以实现性能的突破。此后,睿
    的头像 发表于 11-11 11:05 745次阅读

    openEuler为各种场景和应用提供强大的操作系统支持

    2023年9月19日,全球顶级开源峰会 OSSUMMIT EU 2023 在西班牙-毕尔巴鄂正式开场。openEuler 作为钻石级别赞助参会。这是 openEuler 继去年正式亮相后的第二次全面
    的头像 发表于 09-21 10:24 551次阅读

    润和软件上榜openEuler社区创新项目贡献企业名录

    近日,OpenAtom openEuler(以下简称“openEuler”)社区发布《操作系统技术白皮书(创新项目总览)》。 江苏润和软件股份有限公司(以下简称“润和软件”)凭借分布式软总线等开源
    的头像 发表于 07-28 10:10 551次阅读

    RocketMQ on openEuler提供高性能消息队列的稳定性解决方案

    RocketMQ on openEuler,是一种将 RocketMQ 消息中间件通过容器化的方式部署在 openEuler 操作系统上运行,借助 openEuler
    的头像 发表于 06-28 10:57 355次阅读
    RocketMQ on <b class='flag-5'>openEuler</b>提供高性能消息队列的稳定性解决方案

    openEuler Call for X 计划”正式启动

    openEuler最具价值专家, openEuler Valuable Professional,是openEuler社区颁发给技术专家的一项荣誉认证,以此表彰他们热衷实践、乐于分享的布道精神,为
    的头像 发表于 06-21 14:36 396次阅读
    “<b class='flag-5'>openEuler</b> Call for X 计划”正式启动

    实时系统Preempt RT与Xenomai之争!谁更主流,谁更实时

    在以往项目中的经验以及实时Linux系统专家Jan Altenberg 2015年在Embedded Linux会议上的讲演,我们整理出此文。希望可以帮助大家理解实时性,同时对在Pre
    发表于 06-15 16:42

    openEuler 开源汇智赢未来|2023开放原子全球开源峰会OpenAtom openEuler 论坛成功召开

    6月12日,2023开放原子全球开源峰会OpenAtom openEuler分论坛在北京成功召开。 分论坛以“openEuler汇众智,奔涌向前赢未来”为主题,展示了openEuler社区的最新成果
    的头像 发表于 06-13 22:45 370次阅读

    openEuler开源开放的发展模式

    2023年6月12日,开放原子全球开源峰会OpenAtom openEuler论坛成功召开。论坛以“openEuler汇众智,奔涌向前赢未来”为主题,众多openEuler社区成员、重磅开发者用户
    的头像 发表于 06-13 15:37 445次阅读

    Arm NN成功适配openEuler Embedded,提供高性能神经网络推理能力

    openEuler Embedded 是基于 openEuler 社区面向嵌入式场景的 Linux 版本,由于嵌入式系统应用受到多个因素的约束,如资源、功耗、多样性等, 所以通过嵌入式
    的头像 发表于 06-01 15:15 374次阅读
    Arm NN成功适配<b class='flag-5'>openEuler</b> <b class='flag-5'>Embedded</b>,提供高性能神经网络推理能力

    openEuler RISC-V 成功适配 LicheePi 4A 开发板

    近期,RISC-V SIG 在 LicheePi 4A 开发板上成功实现了欧拉操作系统的适配。目前,最新版本的 openEuler RISC-V 23.03 V1 镜像已在 LicheePi 4A
    发表于 05-04 22:22

    openEuler携手超图软件共筑GIS生态圈

    早在2019年,openEuler便与超图软件结缘。其 SuperMap GIS平台正式通过基于鲲鹏处理器的 TaiShan 服务器和openEuler操作系统技术兼容性证明,2021 年 3 月,SuperMap GIS 平台
    的头像 发表于 04-27 16:32 746次阅读
    <b class='flag-5'>openEuler</b>携手超图软件共筑GIS生态圈