写点什么

字节跳动首发云固件,成功实现服务器 LinuxBoot 产品化落地

  • 2021-09-18
  • 本文字数:1851 字

    阅读完需:约 6 分钟

字节跳动首发云固件,成功实现服务器 LinuxBoot 产品化落地

9 月 15 日,字节跳动宣布开发出第一代云固件 (Cloud Firmware)。


该云固件引入 LinuxBoot,并顺利投入业务应用,是全球第一个在服务器中产品化 LinuxBoot 的固件方案。


本文将和大家分享字节跳动 STE 团队,在开发第一代云固件上,是如何思考和一一落地的。

服务器固件生态问题众多

固件是系统上最先启动的软件,其主要目的是初始化硬件,启动操作系统。固件存在于各种电子设备中,小到手表,大到数据中心服务器,今天我们重点聊聊服务器固件。


目前服务器均采用 UEFI/Tiano(uefi.org/tianocore.org) 方案。UEFI/Tiano 是开源的固件方案,代码繁重,社区活跃度低,几乎没有厂商能基于 UEFI/Tiano 的开源方案直接产品化。


绝大部分系统厂商采用的是 BIOS 厂商的方案,固件工程师也大多从事主板适配、平台功能开发等工作。这使得众多功能/核心模块掌控在 BIOS 厂商手里,系统厂商和用户无法高效迅速地解决问题。


综上所述,目前固件生态存在的主要问题包括:

1. 与 Linux 社区相比,UEFI 社区活跃度低,较难招聘到合适人才;

2. 服务器固件与 SOC、板卡固件软件生态不同 (UEFI vs. Linux),人才无法灵活复用;

3. UEFI 固件很多功能模块由 BIOS 厂商把控,线上问题无法快速解决;

4. 使用方、芯片厂商和系统厂商无法保持代码同步,影响迭代和解决问题的速度。


当前的合作模式为芯片厂商发布相关的芯片代码到 BIOS 厂商,BIOS 厂商整合后,再给到系统厂商同步开发。云固件的合作方式则是以字节为中心,系统代码和芯片厂商、系统厂商同源。

不同方案的合作模式


显然,云固件的合作方式更能快速迭代同步芯片、系统平台问题。

寻找适合服务器固件的 Bootloader

在服务器固件领域,目前可行的固件方案有 UEFI/Tiano、Min Platform、LinuxBoot 及 Coreboot,目前生态比较成熟正在被采用的是 UEFI,但是其在社区活跃度、启动速度和开发难易度上都存在问题。


Min Platform、LinuxBoot 和 CoreBoot 都是近几年针对 UEFI 缺点推出的固件方案,LinuxBoot 和 CoreBoot 直接引入了 Linux 生态,特点尤为突出,但是生态上有待共建。


通过收集比较,我们得出以下结论:


适配服务器固件的各种 Bootloader 状态对比图

固件 Boot 基本流程图:

落地 LinuxBoot,构建简单易用的新固件生态

路线选择

Linux 是当下最活跃的技术社区之一,字节跳动 STE 团队也开发了稳定可靠的 veLinux 操作系统。

能否将 Linux 下沉到固件,利用 Linux 良好的生态来快速解决固件问题?LinuxBoot 正好符合我们的想法。


固件的芯片和平台部分,我们选择用 CoreBoot/U-Boot (Universal Boot Loader) 完全替换 UEFI/Tiano。这样可以直接打通服务器和各自板卡、嵌入式的固件生态,人力也可以灵活复用。


固件方案的改造推进,离不开生态以及各厂商的支持。根据目前固件生态情况,我们制定了以下路线图:

1. 云固件 1.0:基于 Minimun Platform 和 LinuxBoot,精简传统固件方案,将一些功能移至生态更佳的 LinuxBoot 里实现;重点适配,迭代 LinuxBoot,使其达到产品化质量。


2. 云固件 2.0:基于 CoreBoot 和 LinuxBoot,与社区和厂商共同打造 CoreBoot 生态和环境,使 LinuxBoot 和 CoreBoot 均迭代到产品化程度。


3. 云固件 3.0:基于不同的 Platform 和架构迭代,使其适配于不同架构的平台。

开发方式

精简 UEFI 平台 (Minimum Platform) 开发:

• 在 Minimum Platform 开发上,我们制定了非常明确高效的合作方式:芯片部分与芯片厂商 Intel 直接合作开发测试,Platform 部分则与系统厂商浪潮直接合作开发测试。最终我们在人力和时间均一半的情况下,高效可靠地完成了 Minimum Platform 开发。


LinuxBoot 开发:

• 基于字节跳动系统部 veLinux 开发团队研发的稳定内核,快速裁剪出适用的 LinuxBoot 模块。

成果梳理

第一代云固件首批 200+ 服务器已顺利完成生产上线,并稳定支持了字节跳动部分业务的持续运行。


此外,我们和社区厂商也在紧密合作开发第二代云固件。目前 CoreBoot 已经完成开机,其他相关工作也在有序推进中。


云固件的顺利运行,同样离不开 Intel、浪潮的共建参与和支持,我们期待在后继开发中,继续推进技术创新合作,同时也期待更多有志之士、公司参与到整个生态的建设中来,携手打造简单易用的新固件生态。


参考资料

1. UEFI: https://uefi.org/

2. Tiano: https://www.tianocore.org/

3. LinuxBoot: https://www.linuxboot.org/

4. CoreBoot: https://www.coreboot.com/

5. Minimum Platform: https://software.intel.com/content/www/us/en/develop/articles/minimum-platform-architecture-open-source-uefi-firmware-for-intel-based-platforms.html

2021-09-18 23:293761

评论

发布
暂无评论
发现更多内容

架构实战营-课后作业-模块1

Redis 集群

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

去面试,公司问我生辰八字。

yes

面试

关于Webpack4 基础配置介绍

Chalk

Vue webpack 4月日更

树莓派第一天的各种坑

IT蜗壳-Tango

4月日更

元数据管理—动态表单设计器在crudapi系统中完整实现

crudapi

API crud crudapi 动态表单 表单设计

Netty 核心源码解读 —— EventLoop 篇

然行

Flink TaskManager 内存模型详解

JasonLee实时计算

flink

大数据计算生态之数据计算(二)

小舰

4月日更

与JVM做朋友系列(3)又见Class字节码

洛神灬殇

JVM X86 stack register

「架构师训练营 4 期」 第十三周 - 001&2

凯迪

架构师训练营 4 期

路过春天

小天同学

思考 个人感悟 4月日更

「Android Binder」AIDL中的 in / out 到底是啥?

李小四

android aidl binder inout

「Android渲染」为什么alpha渲染性能低?

李小四

Android渲染 Alpha 渲染

架构师实战营 模块一作业(微信业务架构和学生管理系统架构备选方案)

代廉洁

架构实战营

近期某大厂的技术面试题及答案整理

程序员架构进阶

面试 28天写作 算法面经 线上问题 4月日更

ARST- 日常打卡2

pjw

喂~ 办章吗?Python OpenCV 互联网+ 项目,图像处理取经之旅第 18 天

梦想橡皮擦

Python OpenCV 4月日更

华仔架构实战营 - 作业 - 模块1

曲元洪

架构实战营

博客主题用腻了?来试试赛博朋克 2077 主题吧!

清秋

CMS Hexo 博客 4月日更

架構設計訓練營作業1

海罗沃德

架构实战营

模块一作业

c

架构实战营

Vue3源码 | 读懂keep-alive组件以及缓存机制

梁龙先森

源码分析 大前端 Vue3

如何在Deno中使用 Node 模块?

Sakura

4月日更

回归本我还是追逐名利,技术人在中年危机下的抉择?

刘华Kenneth

管理 职场 中年危机

与JVM做朋友系列(1)你好,Class字节码

洛神灬殇

JVM class bytecode 字节码

架构实战营 模块1 课后作业

唐高为

架构实战营

【LeetCode】森林中的兔子Java题解

Albert

算法 LeetCode 4月日更

与JVM做朋友系列(2)再见类加载器

洛神灬殇

JVM ClassLoader 类加载器

架构实战营 模块一:学习总结

👈

架构实战营

架构实战营 模块一:课后作业

👈

架构实战营

字节跳动首发云固件,成功实现服务器 LinuxBoot 产品化落地_语言 & 开发_字节跳动STE团队_InfoQ精选文章