写点什么

深度解读火山引擎官方操作系统 veLinux

  • 2022-10-25
    北京
  • 本文字数:6319 字

    阅读完需:约 21 分钟

深度解读火山引擎官方操作系统veLinux

veLinux 是火山引擎推出的开源 Linux 操作系统,由字节跳动系统技术与工程团队主导研发,广泛集成了字节跳动多年来在支撑海量业务和亿级并发上的系统技术经验。致力于为用户提供稳定、高性能、安全、易用的 Linux 操作系统选择,提供全生命周期管理的完整解决方案和企业级服务支持。


自火山引擎开服以来,veLinux 支撑了包括容器服务、机器学习平台、大数据服务等大量公有云上业务,是火山引擎官方操作系统,为火山引擎各个云产品提供稳定的系统支撑,同时也服务了大量外部公有云客户,在不同的应用场景、不同的硬件机型上都表现出了优异的性能。

整体设计


veLinux 在整体设计上,兼容 x86 和 ARM 生态,同时兼容国内用户的使用习惯,并对多种硬件设备进行了适配和优化,同时针对火山引擎基础设施进行了深度优化:

  • 向上提供更稳定、更安全、更易用的应用接口,并针对云原生、大数据、机器学习等场景提供针对性优化。

  • 向下建立更准确、更完整、更高效的硬件抽象,并基于各种硬件类型融合整体解决方案对外输出。


丰富版本


自 2021 年 10 月首次上线后,截止到当前时间,veLinux 已经迭代了多个版本,提供了丰富的产品矩阵,包括以下 4 个公共版本,用户可以根据自己实际的业务需求选择不同的版本免费使用:

  • 通用版本

面向希望获得火山引擎上极致操作系统体验的用户,针对火山引擎公有云环境进行了深度定制与优化,适用于各种云场景工作负载,尤其针对高并发、高 I/O 和混部场景进行优化适配。

  • 快速启动版

面向需要快速交付大量云服务器的用户,可以满足快速使用算力的需求。通过对操作系统内核态及用户态的启动优化,结合 cloud-init 服务启动的顺序优化,实现了单 VM 启动时间从 10+s 减少到 5s,达到业界领先水平。

  • 等保认证版

面向云上业务需要满足《GB/T22239-2019 信息安全技术网络安全等级保护基本要求》的用户,可以快速满足网络安全等级保护规定的要求,在身份鉴别、访问控制、安全审计、入侵防范、恶意代码防范等场景进行安全加固。

  • 兼容 CentOS 版

面向使用习惯更倾向 CentOS 系列操作系统的用户,相比 CentOS ,提供更强的功能、更优的性能和更稳定的体验,且用户态完全兼容 CentOS,用户可以无缝迁移。


此外,在机型适配方面,上述版本均适配了火山引擎所有的规格实例,包含 ECS/GPU/HPC/裸金属等的完整机型矩阵,对 Intel、AMD 以及 ARM 实例均进行了功能适配、性能调优和稳定性加固,保证其在各个架构都能实现长期稳定运行。

高性能内核


操作系统的核心——veLinux Kernel 是基于社区 Linux 5.4 LTS 版本并集成字节跳动自研新特性定制而成,包括容器及虚拟化等特定环境深度优化,在性能,成本和稳定性等多个维度达到最优,同时节省更多的 CPU 资源,实现降本提效。目前 veLinux 已集成以下场景的专属优化,且已全部提交并合入到 Kernel 社区。

  • 针对 HugeTLB 重度使用的云场景,提出 HVO (HugeTLB Vmemmap Optimization),消除 vmemmap 冗余数据,最大为用户节省 HugeTLB 总量的 1.56%。这意味着 1024 GB 的服务器,最大能够节省约 16 GB 的内存。

  • Dying memory cgroup 作为容器场景下一个显著的内存占用问题,极端情况下占用上百 GB 内存。针对此问题,提出专项优化方案,减少 dying memory cgroup 发生的概率以及优化其容器部署密度。极端情况下,内存占用减少 80%

  • PSI(Pressure Stall Information)是用于评估系统资源压力的主要指标之一。PSI 在实际生产环境中 CPU 占用过高,veLinux Kernel 对其优化并降低了 10% 的 CPU 使用,同时提出 PSI CPU FULL 指标,更方便量化和展示容器之间 CPU 资源竞争。

  • VDUSE(vDPA Device in Userspace) 是字节跳动自主研发的面向云原生场景的下一代高性能设备虚拟化框架,能够为容器和虚机提供统一的 I/O 虚拟化层。目前,在云原生场景下,容器或者安全容器(虚机)在使用分布式存储或者高性能 RPC 服务时,涉及的 I/O 数据平面比较庞杂,在运维和可维护性上也有所欠缺。且业界现在并没有一个标准的技术方案,VDUSE 希望提供一个标准统一的技术方案,方便用户在用户态模拟磁盘、网卡等设备接入容器或者虚机。当部署在 veLinux 上的云原生应用希望访问自研的分布式存储服务时,通过 VDUSE,可以高效地开发一套高性能的用户态接入方案,供上述的云原生应用使用。


veLinux Kernel 在稳定性和性能上做了大量的优化,据不完全统计,系统技术与工程团队已为 Kernel 社区提交了上百个优化及 bugfix patch,且未来我们将持续维护并及时响应用户的 issue。同时,我们也会积极地回馈社区,与开发者们共享优化成果。

更多阅读:

VDUSE 介绍:https://www.redhat.com/en/blog/introducing-vduse-software-defined-datapath-virtio


系统特性

当前,企业上云的趋势不可抵挡,云时代的来临对基础操作系统提出了更高更严苛的要求。除了对操作系统的安全性和稳定性外,系统性能的提升也是重要的考虑因素,底层操作系统能否充分利用各种新硬件特性来提升业务的整体效能?此外,能否做到灵活使用,能否最大限度提高启动速度,快速交付大量云服务器?这些都是云上用户迫切关心的问题。10 年的技术积累和应用实践,火山引擎 veLinux 操作系统做出了解答。


稳定性

veLinux 在字节 IDC 部署量超百万,是支撑字节跳动抖音、今日头条、飞书等海量业务的系统底座,同时 veLinux 也是字节跳动旗下云平台火山引擎的官方操作系统,支撑了包括容器服务、机器学习平台、大数据服务等大量公有云上业务,为火山引擎各个云产品提供稳定的系统支撑,其稳定性在内外部用户得到实践验证,系统宕机率保持在万分之一以下


高性能

除了提供高性能的自研内核外,veLinux 还在系统组件上做了大量的性能优化。特别是基础库方面,针对不同的业务场景,进行了大量针对性优化。


OpenJDK

集成发布了优化的 OpenJDK,更好的支持大数据处理等 Java 业务,目前已经在 EMR(Elastic MapReduce) 等业务中上线。

  • 针对大数据数据存储压缩场景,veLinux 的 OpenJDK 集成了优化的 zlib 实现,基于 GZIP 的数据压缩、解压缩性能会得到有效改进,详细数据请参考下方 zlib 章节 。

  • 针对 Full GC 延时较长的问题,我们移植了 G1 Parallel Full GC 到 jdk-8 中,有效缓解了 Full GC 带来的长延时问题。

很多业务不只是依赖 GC 性能,内存分配器(例如 ptmalloc, jemalloc, tcmalloc) 对业务性能有影响也比较大,veLinux 的 OpenJDK 集成了不同版本的内存分配器,并且可用参数选择。


业务在容器内的部署越来越多,但低版本的 OpenJDK 在容器中的性能表现并不好,比如用户会遇到系统数据读取慢、不准确等问题,甚至运行在 lxcfs 时,还会碰到死循环等严重问题。关于上述问题,veLinux 的 OpenJDK 都做了针对性地修复和改进,为用户提供业务性能保障,保证业务在容器中运行的稳定性。


zlib

在内部业务的性能分析优化过程中,我们通过性能分析采集工具发现, zlib 压缩和解压缩函数(deflate/inflate)的热点,在内部某业务线的的 CPU 占比超 50% 以上。由此可见,业务部署的 madler/zlib 1.2.8 开源版本在性能上仍有提升空间。在调研过 intel/zlib、cloudflare/zlib、zlib-ng 等多个 zlib 版本后,最终在开源 madler/zlib 1.2.11 的基础上,集成了多个优化补丁:

  • 支持压缩过程中哈希函数的向量化指令,并且重构了字符串匹配的流程。

  • 增强解压过程中长字符串拷贝效率 。

  • 支持 crc32/adler32 等校验码的向量化指令 。

在 Benchmark 测试中,压缩和解压效率显示提高了 30%-50%。zlib 优化后的版本部署到原来的业务线上,帮助该业务团队优化 CPU 核心 5K+;目前该优化已集成到 veLinux 的 OpenJDK 中,并在字节内部多业务得到广泛推广与应用。



Benchmark 测试:压缩和解压缩性能对比图


其他性能优势

除此之外,对比社区原生 Debian/CentOS,veLinux 具备很强的性能优势,在字节内部应用实践之后,字节样本拼接和数据打点等业务端到端性能提升 20%以上,其中字节 metrics 集群 CPU 使用率下降了 36%。在性能测试中,对 Nginx/Redis/MySQL 等典型应用的性能也有大幅提升:


Nginx 吞吐性能提升 10%-40%

Redis get/set 性能提升 5%-25%

MySQL 读写性能提升 10%-60%

安全性

随着网络安全事件不断发生,用户对安全性的重视程度也越来越高,作为火山引擎的官方操作系统,面对复杂的、规模不断增加的用户需求,veLinux 在安全性上需要做到全方位的建设,才能保护用户的信息和数据安全。


  • 及时修复 CVE 漏洞:CVE(Common Vulnerabilities and Exposures)是公共的安全漏洞列表,用于标准化识别已知网络威胁。为了方便用户更便捷地查看 CVE 更新情况,veLinux 官网发布了 CVE 安全中心:https://bytedance.github.io/kernel/sec,每周更新并修复 CVE 补丁。

  • 入侵检测安全防护:得益于字节安全团队的技术支持,veLinux 提供入侵检测安全防护,底层采用安全团队自研的开源项目 Elkeid,主要通过收集主机层的信息来实现入侵检测、行为审计、攻击溯源、资产盘点、合规基线检测等能力,目前完整版本在字节跳动内部的部署规模已达到数百万量级,其稳定性、性能、数据采集能力、检测能力和溯源能力等均在内部得到实战验证。

  • 通过等保三级认证:等保三级认证是由国家公安机关对各机构的信息系统安全等级保护状况进行的认证与评定。veLinux 目前已通过三级等保认证,这是国家对非银行机构的最高级认证。这项安全认证资质已写入火山引擎云安全白皮书,为云上用户提供可靠的安全能力。

  • 提供内核热补丁:快速修复在运行中机器的内核漏洞。内核热补丁是一种动态为内核打补丁的技术,可以在不重启系统的情况下,修复内核 BUG 或者 CVE 漏洞,在最大程度上减少系统服务中断时间,增加系统可用性。未来 veLinux 还将提供统一的补丁管理平台、以及补丁客户端的整套解决方案(内测中),通过该平台用户可以将热补丁批量下发至需要打补丁的机器,提高运维效率。


易用性

veLinux 提供了很多业界主流的问题追踪与调试工具,用户可以方便地安装使用,协助定位、解决业务运行中遇到的稳定性或性能问题。


kdump-tools(以及相关的 kexec-tools、makedumpfile)是常用于在 Linux kernel panic(内核致命错误) 之后 dump 内存、保存现场的工具,基于 debian 社区版本,我们在 veLinux 中做了增强版本,帮助用户提升稳定性,节省预留内存。

  • 通过过滤无关的内核 cmdline、替换 systemd 等方法来降低 kdump 内核中的内存使用,从而防止机器在 dump 内存的过程中出现 oom 的错误。

  • 检测内存等硬件故障,提前结束 dump 过程,防止再次出现内核错误。

  • 提前 dump dmesg,防止在 dump 内存失败的情况下,获取不到 dmesg 的信息。

  • 在 kdump 侧实现 crashkernel = auto 功能,根据机器内存自动设置预留给 kdump 的内存的大小,且无需对内核做定制化修改。

  • 适配对 kdump 预留内存位置有特殊要求的硬件厂商。


atop 是一款开源的单机性能监测工具,支持实时观测的同时、也支持读取历史文件排查问题。另外一个优点是除提供 CPU、MEM、DISK 等全局指标外,还提供进程、线程级别的各项指标监控数据。鉴于 atop 的这些优点,字节跳动基于社区的 atop 进行优化,目前已迭代 3 个版本,覆盖公司全量服务器,稳定运行三年多。字节版 atop 工具新特性如下:

  • 稳定性增强:增加 oom killer 保护、修复 atopcct 统计、限制日志存储总量防系统盘占满等功能。

  • 远程分析 支持 json 格式数据传输到服务端,支持网页版 atop 及集群内数据聚合。

  • 更多实用指标:NUMA 维度的 CPU 及 MEM 指标统计与聚合、runqueue delay、compact_stall、allocastall、InCsumErrors 等指标。

  • 灵活使用:支持筛选 Top N 线程的监控数据,支持定制日志保留天数及存储位置。

  • 终端 UI 优化:类 htop,按照 NUMA 粒度,直观展示所有 CPU 和内存。达到纵览所有 CPU 负载,直观判断 CPU 绑核是否均衡等目的。


快速启动

对于用户而言,系统启动过程通常被定义为从系统上电到通过 ssh 登录的过程,经历的时间即为系统启动时间。具体来说,机器的启动流程大体上可以根据 CPU 的控制权转移方向描述为“固件 -> 引导程序 -> 操作系统”。其中固件包括 BIOS/UEFI,引导程序包括常见的的 GRUB/U-Boot/LK 等,操作系统包含了内核启动、执行 initrd 中的 init 进程、再到执行硬盘上的 init 进程的过程。系统启动速度是操作系统的重要性能指标之一,特别对于云场景中的虚拟机,能够快速启动可以显著提高用户体验。


veLinux 通过对内核、驱动加载、系统服务的启动优化,以及 cloud-init 服务的启动顺序优化,减少虚机启动时间约 50%,提供快速启动版,实现单虚拟机启动时间 5s 内


灵活使用

在实际使用中,用户提出基于 veLinux 进行定制化的需求,例如安装特定的驱动版本、内置特定的软件包等。veLinux 针对这个问题,提供灵活的 OS 自定义定制工具,可以在火山引擎、内部平台或本地镜像基础上,自动化完成定制,为用户提供简单便捷的定制窗口,一站式完成镜像的变更、基准测试等任务,使广大业务同学彻底摆脱基础环境构建、操作系统差异等带来的技术困境。


CentOS 官方已计划停止维护 CentOS Linux 项目,veLinux 提供的迁移工具(内测中),能帮助用户平滑从 CentOS 迁移至 veLinux CentOS 兼容版,后续还会支持更多操作系统无缝迁移至 veLinux 。


云原生特性

容器 OS 版本

云原生场景下,保证集群内宿主机的一致性非常重要,对单个节点的运维操作可能会导致环境的不一致,对应用的性能稳定性产生影响,甚至可能产生安全隐患。另一方面,与传统系统不同的是,应用通过容器部署,操作系统只需要提供云原生运行必要的组件,省去其他很多不必要的系统组件,实现系统轻量化,同时提升系统启动时间。veLinux 正在内测容器 OS 版本,该版本的优势为:

  • 系统轻量化

(1)只包含 Kubernetes Pods 运行所依赖的软件包和系统服务,缩短系统启动时间,精简操作系统。

(2)根文件系统为只读权限,只有 /etc 和 /var 目录可写,以满足基础的系统配置需求。

  • 系统维度升级回滚

遵循云原生不可变基础设施原则,不支持单个包粒度的安装、卸载和升级,不提供 apt 等软件包管理工具,只支持以整个操作系统镜像为粒度的更新和回滚,以此来保证集群内各个节点的软件包版本与系统配置的一致性。


lxcfs 组件优化

lxcfs 是一个基于 FUSE 文件系统实现容器内资源视图隔离的开源组件,通过在容器中挂载 lxcfs 相关目录和文件,执行 free、top 等命令,能够更精确地反映容器的资源使用情况。


veLinux 中的 lxcfs 组件在社区 5.0 版本的基础上,修复了 /sys 目录下文件显示不完全的问题,并模拟了 numa 节点拓扑,使得在容器中执行 numactl 命令能够返回正确的节点信息。此外,对社区版本存在 lxcfs 进程退出重新启动后无法正常工作的问题,veLinux 版本一方面通过 oom killer 保护,最大限度地减少被 kill 的可能,另一方面提供 remount 机制,使得 lxcfs 进程退出重新启动后,remount 相关目录到容器中,最大限度的降低对用户的影响。


总结与规划

操作系统一直伴随着软硬件技术的发展而发展,近年来,在软件方面,云市场爆发式的增长,特别是云原生场景下,如何有效地进行集群资源的管理、调度编排以及性能度量和监控,都对操作系统提出了更高的要求;在硬件方面,芯片市场的环境变化以及主流 CPU 架构的演进发展,需要构建更加自主可控的操作系统,灵活应对国内外市场变化。针对云计算、国产化等场景,veLinux 实现了很多创新与优化,以满足不同用户的业务需求。未来将陆续发布更多云原生特性,并推出适配国产处理器、RISC-V 处理器架构的版本,欢迎大家持续关注


另外,作为一款开源的操作系统,veLinux 致力于为用户提供可靠、高性能的操作系统,欢迎更多感兴趣的小伙伴加入 veLinux 的开源建设,共同推进国内操作系统生态发展。

  • 欢迎使用:

    https://www.volcengine.com/product/velinux

  • GitHub 地址:

    https://github.com/bytedance/kernel

  • 官网地址:

    https://bytedance.github.io/kernel/

2022-10-25 17:406268

评论

发布
暂无评论
发现更多内容
深度解读火山引擎官方操作系统veLinux_开源_字节跳动 STE技术团队_InfoQ精选文章