近期,RISC-V SIG 在歐拉嵌入式操作系統(tǒng)上成功實(shí)現(xiàn)了 musl libc 的適配,完成了使用 musl libc 庫替換 glibc 庫構(gòu)建鏡像的工作。目前,以 musl libc 為基礎(chǔ)庫編譯的鏡像已在 Raspberry Pi4 開發(fā)板上可用,這一成果推動(dòng)了 openEuler Embedded 的多態(tài)發(fā)展。
編譯鏡像步驟說明:
https://openeuler.gitee.io/yocto-meta-openeuler/master/features/muslc.html
Musl libc 庫對(duì)比 glibc 庫的部分優(yōu)點(diǎn)
它是一個(gè)專門為嵌入式系統(tǒng)開發(fā)的輕量級(jí) libc 庫,以簡單、輕量和高效為特色;
musl libc 要小得多,因?yàn)?musl libc 專注于盡可能減少代碼大小和函數(shù)調(diào)用開銷,以提高性能;
musl libc 庫的源碼相對(duì)簡單,封裝性不強(qiáng),不像 glibc 的代碼一樣臃腫,復(fù)雜;
musl libc 是 C 語言的一種標(biāo)準(zhǔn)函數(shù)庫,代碼干凈且高效,針對(duì)靜態(tài)連接(static linking)設(shè)計(jì),適合被用來制作可攜的程序,且也很容易進(jìn)行交叉編譯(cross compile),編譯出運(yùn)行在不同系統(tǒng)環(huán)境的程序。
Musl libc 庫對(duì)比 glibc 庫的部分缺點(diǎn)
POSIX 標(biāo)準(zhǔn):musl libc 更加嚴(yán)格地遵循 POSIX 標(biāo)準(zhǔn),而 glibc 則添加了一些擴(kuò)展,以提供更多的功能和兼容性。
錯(cuò)誤處理:musl libc 實(shí)現(xiàn)的錯(cuò)誤處理更嚴(yán)格和更規(guī)范,而 glibc 則有更多的錯(cuò)誤處理選項(xiàng),并且支持不同的語言環(huán)境。
綜上所述,如果你需要一個(gè)小巧且速度較快的 C 標(biāo)準(zhǔn)庫在 Linux 系統(tǒng)上使用,則可以考慮使用 musl libc;如果你要開發(fā)的某個(gè)功能的可執(zhí)行程序需要在不同系統(tǒng)環(huán)境下運(yùn)行,則 musl libc 可滿足你的需求;如果你想一次編譯出可以在相同 CPU 架構(gòu)的 Linux 發(fā)行版上都運(yùn)行的程序,musl libc 庫將是最優(yōu)的選擇,因?yàn)榛?glibc 庫已編譯好的函數(shù)庫和運(yùn)行檔在不同的 Linux 上可能會(huì)出現(xiàn)無法共用的情況,。
Raspberry Pi 4:musl libc 與 glibc 性能等方面對(duì)比
Libc-bench 是 musl 官方提供的測試集,用于時(shí)間和內(nèi)存效率的測試,該測試集中比較了各種 C/POSIX 標(biāo)準(zhǔn)庫函數(shù)的實(shí)現(xiàn)。
UnixBench 是一款開源的測試 unix 系統(tǒng)基本性能的工具,測試系統(tǒng)各個(gè)方面的性能,然后將各測試結(jié)果和一個(gè)基準(zhǔn)值進(jìn)行比較,得到一個(gè)索引值,所有測試項(xiàng)目的索引值結(jié)合在一起形成一個(gè)測試分?jǐn)?shù)值。這個(gè)測試分?jǐn)?shù)越高代表此系統(tǒng)性能越好。
為了對(duì)比以 musl libc 與 glibc 為標(biāo)準(zhǔn)庫的鏡像在性能等方面差異,本次測試我們使用 libc-bench、Unixbench 工具對(duì)基于 musl libc 和 glibc 編譯的樹莓派鏡像進(jìn)行了測試,測試結(jié)果如下:
Libc-bench 進(jìn)行內(nèi)存占用率測試結(jié)果如下:
從上述測試輸出結(jié)果可以得出以下結(jié)論:以 musl libc 為標(biāo)準(zhǔn)庫編譯的鏡像在虛擬內(nèi)存占用、物理內(nèi)存占用、系統(tǒng)可回收內(nèi)存方面都是遠(yuǎn)優(yōu)于 glibc;
基于 musl libc 庫的樹莓派系統(tǒng)性能測試數(shù)據(jù)如下:
基 glibc 庫的樹莓派系統(tǒng)性能測試數(shù)據(jù)如下:
綜上,基于 glibc 的樹莓派系統(tǒng)跑分結(jié)果為 146.5 ,基于 musl libc 的樹莓派系統(tǒng)跑分結(jié)果為 161.6 ;所以基于 musl libc 編譯的樹莓派鏡像在性能上有大于 10%的提升;
進(jìn)一步挖掘 musl libc 與 openEler Embedded 系統(tǒng)結(jié)合在性能和功能方面的潛力
當(dāng)然,目前基于 musl libc 庫編譯的鏡像在性能和功能方面還是有很大的提升空間。在性能方面,musl 庫中 malloc 系列函數(shù)和 memcpy 系列函數(shù)實(shí)現(xiàn)較慢。尤其是 malloc 的性能,在多線程環(huán)境下會(huì)顯著造成瓶頸,原因在于 musl libc 的 malloc 實(shí)現(xiàn)在每次 malloc 時(shí)都需要對(duì)全局變量加鎖解鎖, 導(dǎo)致嚴(yán)重的競爭現(xiàn)象,后續(xù)也需要在類似這方面上進(jìn)行優(yōu)化以便提高性能等;
在功能方面,musl libc 在字符集/編碼方面的支持沒有 glibc 全面;在錯(cuò)誤處理方面,glibc 有更多的錯(cuò)誤處理選項(xiàng),并且支持不同的語言環(huán)境;POSIX 標(biāo)準(zhǔn)方面,glibc 添加了一些擴(kuò)展,以提供更多的功能和兼容性等等,musl libc 庫在不影響性能等前提下,在這上述能方面進(jìn)行功能上的填充還是有很大的發(fā)掘空間的。
-
嵌入式
+關(guān)注
關(guān)注
5089文章
19169瀏覽量
306757 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6874瀏覽量
123570 -
編碼
+關(guān)注
關(guān)注
6文章
953瀏覽量
54907 -
RISC-V
+關(guān)注
關(guān)注
45文章
2314瀏覽量
46343
原文標(biāo)題:Musl libc 庫成功適配到 openEuler Embedded,推動(dòng)歐拉嵌入式生態(tài)發(fā)展
文章出處:【微信號(hào):openEulercommunity,微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論