基於LinuxBoot的雲固件創新實踐

基於LinuxBoot的雲固件創新實踐

作者: 浪潮信息技術研發部 吳海波

背景

9 月 15 日,字節跳動宣佈全球首批基於LinuxBoot雲固件的x86服務器實現批量化上線運行【1】。該產品固件由字節跳動系統技術與工程團隊(STE團隊)、浪潮信息技術研發團隊以及Intel聯合開發實現。

產品採用UEFI MinplatformMinimum Platform的縮寫進行芯片初始化和最小化的平臺初始化功能,將其它大部分傳統UEFI固件初始化的流程代碼移植到LinuxBoot模塊中進行實現。通過精簡UEFI 功能模塊,在底層固件模塊中引入Linux軟件生態,面向雲平臺原生需求開發雲固件解決方案,使得服務器系統固件更易於開發和維護。

將Linux生態引入到系統固件中是目前開源固件技術發展的一種趨勢,本文簡單介紹了浪潮服務器在開源系統固件方面的創新實踐。

目前系統固件問題

在服務器領域,經常會聽到“固件”這個名詞,什麼是固件呢?

 

“固件”就是存儲在EEPROM或者FLASH中的程序。它是在電子硬件系統最基礎最底層的軟件,在系統上電後,首先要執行的程序就是固件。固件負責完成硬件的初始化,讓電子設備系統處於一個正常的狀態,然後才能讓上層的操作系統或者應用軟件正常使用。

       對於服務器領域,BIOS是服務器最重要的固件,BIOS負責完成CPU、內存和外設的初始化,將硬件系統的抽象信息報告給操作系統,操作系統才能正常使用硬件。

目前服務器的BIOS均採用UEFI/Tiano的方案[2],但是隨着目前雲服務和數據中心的快速發展,UEFI BIOS也逐漸顯露了一些問題:

(1)隨着技術的發展,UEFI越來越複雜,門檻高,在UEFI專業領域的開發人員相比其他軟件開發而言非常稀少。

(2)目前大多都是服務器廠商在購買BIOS軟件廠商的UEFI BIOS代碼基礎上進行增強開發。 不同BIOS軟件廠商提供代碼風格和架構差別很大,一個服務器廠商的UEFI BIOS開發人員需要熟悉多套代碼;另外,UEFI BIOS代碼結構和內容有時還會隨着服務器CPU的更新升級發生較大變動;這些都增加了BIOS固件的開發難度。

(3)由於UEFI BIOS固件中包含了服務器廠商和IBV(獨立BIOS)廠商的知識產權,所以大部分BIOS代碼都是閉源的,通過二進制的形式分發給服務器廠商使用。閉源會帶來三方面的問題:i) 如果BIOS固件出現問題,只能讓廠商來解決,這可能延長故障處理時間。ii) 由於代碼是閉源的,對客戶而言也隱藏着一些安全風險。Iii) 代碼閉源,也將導致用戶難以增添定製化功能,無法滿足當前雲環境下的快速迭代更新的需求。

綜上所述,目前UEFI生態環境面臨着開發人員短缺,代碼不夠開放,開發難度大,隱藏着安全風險等問題。

開源固件解決方案

爲解決當前UEFI BIOS固件的問題,尤其是針對當前雲環境下的應用,目前開源社區提出了多種優化解決方案,包括Minplatform[3,4],CoreBoot[5]和LinuxBoot[6]等;主要是希望通過引入開源的方式來解決和優化目前UEFI BIOS固件遇到的問題。下面分別簡單介紹下這些方案的內容。

Minplatform

       Minplatform指Mininum Platform, 是Intel 提出的對目前UEFI固件的開源優化解決方案。如下圖1所示,Minplatform定義了平臺啓動的多個BootStage,通過BootStage的配置實現了UEFI BIOS開發過程中依據不同需求選擇配置相應的功能模塊實現完整UEFI BIOS的最終解決方案。

圖1  Minplaform定義的多個BootStage

在具體的實現上,如圖2所示,Minplatform是依賴於UEFI Tiano EDK2[7]的開源代碼,以搭積木的方式逐漸添加系統固件的功能,最終實現完整的BIOS固件。Minplatfom相比當前全功能的UEFI BIOS而言,先是一個做減法的操作,能快速啓動。它定義了UEFI BIOS的最小平臺代碼;然後才做加法,根據不同需求來增加功能,繼而實現較完整的UEFI BIOS。通過這種方式有效的減少了UEFI固件開發難度,增加功能代碼的複用,是對當前UEFI BIOS固件開發的一種優化方案。

圖2  MinPlatform實現

 由於Minplatform是基於UEFI Tiano EDK2的開源實現,從BIOS代碼廠商那購買UEFI BIOS,服務器廠商可以直接將功能代碼做簡單移植就可以作爲Minplatform。這種方案對目前服務器廠商而言影響最小,因爲已經積累了豐富的UEFI開發經驗。

CoreBoot

CoreBoot的前身是LinuxBios,是Ron Minnich於上世紀發起的項目,一種Linux代碼風格的開源固件解決方案,跟UEFI固件架構完全不同。CoreBoot的目標是做最小的操作來完成硬件功能初始化,儘快的啓動到操作系統中。

https://live.staticflickr.com/4639/25577899078_9f3fa126b7_b.jpg

圖3 CoreBoot的發展

UEFI的平臺啓動初始化流程爲SEC->PEI->DXE->BDS->TLS->RT這幾個階段,其中SEC是指安全驗證階段,PEI是指EFI前期初始化階段,DXE是驅動執行環境階段,BDS是指啓動設備選擇階段,TSL是指操作系統加載前期階段,RT是指運行時階段。

而CoreBoot將啓動流程分爲bootblock->romstage->ramstage->payload這幾個主要階段, 如下圖4所示。其中booblock是彙編編寫的,主要爲C運行環境做準備;romstage階段主要是來初始化內存和一些早期初始化操作;ramstage階段主要執行系統設備的初始化,比如pcie初始化,創建ACPI表等;到了payload階段CoreBoot的初始化操作實際上已經完成,payload可以作爲最終的Bootloader來加載操作系統。

圖4 CoreBoot平臺初始化流程

       相比UEFI架構的代碼,CoreBoot代碼跟Linux風格類似,完全開源, 它結合CPU廠商的芯片初始化二進制包(FSP/ATF/AGASA等)一起使用,來完成封閉的芯片初始化功能,同時可以集成Tianocore、LinuxBoot等各種payload,來滿足各種需求。

目前CoreBoot主要在Chromebook等PC機器上應用,由於CoreBoot的開源以及Linux風格的代碼架構的原因, 以及在Linux領域的人才優勢,也在推進支持使用CoreBoot作爲服務器的UEFI BIOS的替代選擇。

LinuxBoot

       LinuxBoot來源於NERF(Non-Extensible Reduced Firmware)項目,是用Linux作爲固件的一部分的解決方案,它不是一個完整的固件方案,無法獨立完成所有的硬件初始化功能,必須依賴於UEFI 、CoreBoot等完成CPU和內存初始化,然後使用Linux Kernel來完成外設初始化和啓動操作系統的功能。

 

圖5 LinuxBoot架構圖

對於當前服務器固件解決方案UEFI BIOS而言,LinuxBoot主要是通過開源的Linux Kernel來取代UEFI DXE和BDS階段的功能,比如通過Linux下的開源driver來取代UEFI下的設備驅動,用Linux完備的網絡功能取代UEFI的。UEFI結合LinuxBoot可以減少UEFI代碼和開發難度。

LinuxBoot已被 Linux 基金會接受。目前在服務器領域,它作爲固件部分的方案得到了許多廠商的支持,但是這種方案要求有較強的Linux開發能力,否則難以享受LinuxBoot帶來的優勢。

固件發展趨勢

   雖然目前基於UEFI的BIOS系統固件還是絕對的主流,但是UEFI BIOS面臨的閉源、安全和開發難問題也是無法迴避的問題。尤其是對於具有大型數據中心的大型互聯網服務提供商來說,如何將符合自己業務場景需求的功能添加到固件中,如何實現系統固件的快速開發和維護,從而減少因爲固件維護導致的停機時間,如何保證固件代碼的安全可靠, 如何具備系統固件開發能力和掌控能力,都需要考慮。

       相比服務器廠商,大型互聯網服務提供商,擁有大量的Linux方面的開發人才,所以希望引入LinuxBoot和CoreBoot這些基於Linux或類似的固件方案來增加在服務器固件上的技術掌控能力。另外通過開源的固件解決方案,也能夠減少UEFI代碼中隱藏的代碼安全風險,加快服務器固件開發,減少服務器系統固件的維護時間。

 

https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F0917%2F35f6a162j00qzklpq001hd200u00095g00zk00at.jpg&thumbnail=650x2147483647&quality=80&type=jpg

圖6 服務器固件 Bootloader各方案對比(引自字節跳動STE團隊

 

這也要求服務器廠商需要提前瞭解這些客戶的需求,並與之深入合作來保持在未來固件發展中重要地位。在構建智慧時代的新基建”-智算中心的過程中,浪潮秉承着開放標準、集約高效和普適普惠的理念,以穩健、實幹的態度,積極主動地與用戶、以及上下游合作伙伴一道,共同推動開放計算生態健康有序的發展。

作者:浪潮信息技術研發部 吳海波

感謝黃家明、吳安、葉毓睿等對本篇文章的貢獻。

參考:

  1. 字節跳動首發雲固件,成功實現服務器LinuxBoot產品化落地: https://mp.weixin.qq.com/s/bl16hO3WrBgI562eQ483cg
  2. UEFI: https://uefi.org/
  3. Minimum Platform: https://software.intel.com/content/www/us/en/develop/articles/minimum-platform-architecture-open-source-uefi-firmware-for-intel-based-platforms.html
  4. Minimum Platform Spec: https://edk2-docs.gitbook.io/edk-ii-minimum-platform-specification/
  5. CoreBoot: https://www.coreboot.org/
  6. LinuxBoot: https://www.linuxboot.org/
  7. Tiano EDK2: https://github.com/tianocore/edk2

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章