欧拉os和linux_openEuler欧拉下载

欧拉os和linux_openEuler欧拉下载近期,RISC-V SIG 在欧拉嵌入式操作系统上成功实现了 musl libc 的适配,完成了使用 musl libc 库替换 glibc 库构建镜像的工作。

近期,RISC-V SIG 在欧拉嵌入式操作系统上成功实现了 musl libc 的适配,完成了使用 musl libc 库替换 glibc 库构建镜像的工作。目前,以 musl libc 为基础库编译的镜像已在 Raspberry Pi4 开发板上可用,这一成果推动了 openEuler Embedded 的多态发展。

编译镜像步骤说明:

openeuler.gitee.io/yocto-meta-…

Musl libc 库对比 glibc 库的部分优点

  1. 它是一个专门为嵌入式系统开发的轻量级 libc 库,以简单、轻量和高效为特色;
  2. musl libc 要小得多,因为 musl libc 专注于尽可能减少代码大小和函数调用开销,以提高性能;
  3. musl libc 库的源码相对简单,封装性不强,不像 glibc 的代码一样臃肿,复杂;
  4. musl libc 是 C 语言的一种标准函数库,代码干净且高效,针对静态连接(static linking)设计,适合被用来制作可携的程序,且也很容易进行交叉编译(cross compile),编译出运行在不同系统环境的程序。

Musl libc 库对比 glibc 库的部分缺点

  1. POSIX 标准:musl libc 更加严格地遵循 POSIX 标准,而 glibc 则添加了一些扩展,以提供更多的功能和兼容性。
  2. 错误处理:musl libc 实现的错误处理更严格和更规范,而 glibc 则有更多的错误处理选项,并且支持不同的语言环境。

综上所述,如果你需要一个小巧且速度较快的 C 标准库在 Linux 系统上使用,则可以考虑使用 musl libc;如果你要开发的某个功能的可执行程序需要在不同系统环境下运行,则 musl libc 可满足你的需求;如果你想一次编译出可以在相同 CPU 架构的 Linux 发行版上都运行的程序,musl libc 库将是最优的选择,因为基于 glibc 库已编译好的函数库和运行档在不同的 Linux 上可能会出现无法共用的情况,。

Raspberry Pi 4:musl libc 与 glibc 性能等方面对比

Libc-bench 是 musl 官方提供的测试集,用于时间和内存效率的测试,该测试集中比较了各种 C/POSIX 标准库函数的实现。

UnixBench 是一款开源的测试 unix 系统基本性能的工具,测试系统各个方面的性能,然后将各测试结果和一个基准值进行比较,得到一个索引值,所有测试项目的索引值结合在一起形成一个测试分数值。这个测试分数越高代表此系统性能越好。

为了对比以 musl libc 与 glibc 为标准库的镜像在性能等方面差异,本次测试我们使用 libc-bench、Unixbench 工具对基于 musl libc 和 glibc 编译的树莓派镜像进行了测试,测试结果如下:

Libc-bench 进行内存占用率测试结果如下:

图片

从上述测试输出结果可以得出以下结论:以 musl libc 为标准库编译的镜像在虚拟内存占用、物理内存占用、系统可回收内存方面都是远优于 glibc;

基于 musl libc 库的树莓派系统性能测试数据如下:

图片

基 glibc 库的树莓派系统性能测试数据如下:

图片

综上,基于 glibc 的树莓派系统跑分结果为 146.5 ,基于 musl libc 的树莓派系统跑分结果为 161.6 ;所以基于 musl libc 编译的树莓派镜像在性能上有大于 10%的提升;

进一步挖掘 musl libc 与 openEler Embedded 系统结合在性能和功能方面的潜力

当然,目前基于 musl libc 库编译的镜像在性能和功能方面还是有很大的提升空间。在性能方面,musl 库中 malloc 系列函数和 memcpy 系列函数实现较慢。尤其是 malloc 的性能,在多线程环境下会显著造成瓶颈,原因在于 musl libc 的 malloc 实现在每次 malloc 时都需要对全局变量加锁解锁, 导致严重的竞争现象,后续也需要在类似这方面上进行优化以便提高性能等;

在功能方面,musl libc 在字符集/编码方面的支持没有 glibc 全面;在错误处理方面,glibc 有更多的错误处理选项,并且支持不同的语言环境;POSIX 标准方面,glibc 添加了一些扩展,以提供更多的功能和兼容性等等,musl libc 库在不影响性能等前提下,在这上述能方面进行功能上的填充还是有很大的发掘空间的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13837.html

(0)

相关推荐

  • k8s集群部署方案_docker redis集群

    k8s集群部署方案_docker redis集群作者:颜博 青云科技数据库研发工程师 目前从事 PostgreSQL 产品开发工作,热衷于 PostgreSQL 数据库的学习和研究 上一期我们介绍了 PG 集群复制管理工具 repmgr,能够轻松的

    2023-04-30
    135
  • reader_sl.exe(reader’s)

    reader_sl.exe(reader’s)

    2023-08-28
    130
  • 如何更新pip

    如何更新pippip是Python包管理器,用于安装和升级Python模块和程序。更新pip是保持Python包最新和功能最佳的关键。在本文中,我们将探讨如何更新pip,让您的Python环境始终保持最新。

    2024-06-01
    66
  • Python Launcher:高效管理Python环境的利器

    Python Launcher:高效管理Python环境的利器Python是目前最流行的脚本编程语言之一,大多数的运维、数据分析和机器学习都需要用到它。但是,Python的版本和依赖包管理经常会引发问题,而Python Launcher可以解决这一切,能够让你轻松管理多个Python环境,而无需安装任何其他的工具。

    2024-09-09
    25
  • Python 3字典排序

    Python 3字典排序Python中的字典(Dictionary)是一种非常有用的数据类型,它可以使用键-值(Key-Value)的方式来存储数据。在处理一些特定的问题时,我们有时需要对字典进行排序,以方便后续的操作。本文将介绍Python 3中对字典进行排序的方法。

    2024-05-27
    62
  • centos配置jdk_未安装设备记在建工程吗

    centos配置jdk_未安装设备记在建工程吗简介 由于我比较喜欢使用压缩包来安装,因此此处的示例都是以压缩包来示例的。同理,这并不是一篇正式的文章,所以措辞会显得有点随意且不专业。 准备 到此处选择下图中标注的 JDK 版本: 这里需要注意,因

    2023-04-16
    148
  • SQL-Base 用表组织数据「终于解决」

    SQL-Base 用表组织数据「终于解决」什么是数据完整性? 数据完整性 = 数据准确性 + 数据可靠性 数据完整性如何分类? 1,实体完整性 (行) 2,域完整性 (列) 3,引用完整性 (表与表之间键的关系) 4,自定义完整性

    2023-03-06
    138
  • 文档在线翻译网站汇总

    文档在线翻译网站汇总文章浏览阅读1.4w次,点赞10次,收藏27次。TableofContents1.搜狗文档翻译(免费、多篇论文翻译时最推荐)2.Google文档翻译(不推荐)3.翻译狗(单篇论文/少量花钱时最推荐)4.有道文档翻译(文档翻译不推荐,截图翻译

    2023-11-08
    130

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注