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

116次阅读

共计 1739 个字符,预计需要花费 5 分钟才能阅读完成。

近期,RISC-V SIG 在欧拉嵌入式操作系统上胜利实现了 musl libc 的适配,实现了应用 musl libc 库替换 glibc 库构建镜像的工作。目前,以 musl libc 为根底库编译的镜像已在 Raspberry Pi4 开发板上可用,这一成绩推动了 openEuler Embedded 的多态倒退。

编译镜像步骤阐明:

https://openeuler.gitee.io/yocto-meta-openeuler/master/featur…

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

正文完
 0