首页 > 其他分享 >Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展

Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展

时间:2023-05-29 16:01:12浏览次数:45  
标签:Embedded musl libc 适配 glibc Musl 编译 测试 性能

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

编译镜像步骤说明:

https://openeuler.gitee.io/yocto-meta-openeuler/master/features/muslc.html

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 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展_操作系统

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

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

Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展_musl libc_02

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

Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展_musl libc_03

综上,基于 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 库在不影响性能等前提下,在这上述能方面进行功能上的填充还是有很大的发掘空间的。


标签:Embedded,musl,libc,适配,glibc,Musl,编译,测试,性能
From: https://blog.51cto.com/u_14948868/6372101

相关文章

  • 结构型——适配器模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是适配器模式?适配器模式(AdapterPattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立......
  • 【快应用】响应式布局适配横竖屏或折叠屏
    ​ 【关键词】响应式布局、折叠屏、横竖屏 【问题背景】当前开发者在开发快应用时,往往将designWidth设置为设备屏幕的宽度,这时,应用的内容会随着设备宽度的变大而拉伸显示,导致在大屏、横屏、折叠屏展开时显示效果不好。在折叠屏合起和展开的效果如下,可以看出页面各元素尺寸......
  • snmptt使用snmptthandler与snmptthandler-embedded的不同
    由于咱不知的原因,在同样的snmptrap的配置下,两种方法得到的trap信息不同,所以不同的解析方法要使用不同的snmptrap配置:1、当使用traphandledefault/usr/sbin/snmptthandler时,可以不用关心snmptrap的输出格式,似乎snmptt自己会解析原始的数据似的,这时的snmptrapd的配置如下:/usr/s......
  • OpenHarmony支持HDMI接口声卡适配说明
    高清多媒体接口(High Definition Multimedia Interface,HDMI  )是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设备。HDMI可以同时发送音频和视频信号,由于音频和视......
  • OpenHarmony支持HDMI接口声卡适配说明
     高清多媒体接口(High Definition Multimedia Interface,HDMI  )是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设备。HDMI可以同时发送音频和视频信号,由于......
  • 适配器模式改造Servlet
    1. 我们编写一个Servlet类直接实现Servlet接口有什么缺点?  11  - 我们只需要service方法,其他方法大部分情况下是不需要使用的。代码很丑陋。2. 适配器设计模式Adapter   11  - 手机直接插到220V的电压上,手机直接就报废了。怎么办?可以找一个充电器。这个充电器就是一个......
  • pc移动端适配问题
    TL;DR近期在做一个移动端的web网页,当中选用了vw自适应适配方案。然而从设计图标注的px转换到vw是个麻烦事,作为程序员的我很抗拒人工计算,因为那样做CSS代码的可读性会变低,而且编码效率也很低。经过实践我找出了以下几种解决方案,这里列举出来希望对同样患懒癌的你有些许帮助:0.Sas......
  • idea与maven的版本适配问题
    idea对于使用的maven具有兼容性问题如果出现以下错误java.lang.RuntimeException:org.codehaus.plexus.component.repository.exception.ComponentLookupException:com.google.inject.ProvisionException:Unabletoprovision,seethefollowingerrors:1)[Guice/ErrorIn......
  • 聊一聊适配器模式
    接口不能用?行,我帮你适配一、概述适配器模式(Adapter),是23种设计模式中的结构型模式之一;它就像我们电脑上接口不够时,需要用到的拓展坞,起到转接的作用。它可以将新的功能和原先的功能连接起来,使由于需求变动导致不能用的功能,重新利用起来。上图的Mac上,只有两个typec接口,当我们需......
  • 适配器模式
    目录适配器模式概述结构类适配器模式对象适配器模式应用场景JDK源码解析适配器模式概述如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当......