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,用户可以无缝迁移。
此外,在机型适配方面,上述版本均适配了火山引擎所有的规格实例,包含 ECS/GPU/HPC/裸金属等的完整机型矩阵,对 Intel、AMD 以及 ARM 实例均进行了功能适配、性能调优和稳定性加固,保证其在各个架构都能实现长期稳定运行。
操作系统的核心——veLinux Kernel 是基于社区 Linux 5.4 LTS 版本并集成字节跳动自研新特性定制而成,包括容器及虚拟化等特定环境深度优化,在性能,成本和稳定性等多个维度达到最优,同时节省更多的 CPU 资源,实现降本提效。目前 veLinux 已集成以下场景的专属优化,且已全部提交并合入到 Kernel 社区。
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) 等业务中上线。
很多业务不只是依赖 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 的基础上,集成了多个优化补丁:
在 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 在安全性上需要做到全方位的建设,才能保护用户的信息和数据安全。
veLinux 提供了很多业界主流的问题追踪与调试工具,用户可以方便地安装使用,协助定位、解决业务运行中遇到的稳定性或性能问题。
kdump-tools(以及相关的 kexec-tools、makedumpfile)是常用于在 Linux kernel panic(内核致命错误) 之后 dump 内存、保存现场的工具,基于 debian 社区版本,我们在 veLinux 中做了增强版本,帮助用户提升稳定性,节省预留内存。
atop 是一款开源的单机性能监测工具,支持实时观测的同时、也支持读取历史文件排查问题。另外一个优点是除提供 CPU、MEM、DISK 等全局指标外,还提供进程、线程级别的各项指标监控数据。鉴于 atop 的这些优点,字节跳动基于社区的 atop 进行优化,目前已迭代 3 个版本,覆盖公司全量服务器,稳定运行三年多。字节版 atop 工具新特性如下:
对于用户而言,系统启动过程通常被定义为从系统上电到通过 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 的开源建设,共同推进国内操作系统生态发展。
领取专属 10元无门槛券
私享最新 技术干货