本文主要介绍veLinux 2.0操作系统中,内核、系统组件、系统配置和优化等关键特性。
veLinux 2.0内核基于内核社区长期支持(LTS)的5.15版本定制而成,且未来将支持6.6版本内核,对内存、网络、I/O、文件系统等模块进行了缺陷修复、性能增强并引入了适用于云应用的新特性。
Atop是开源社区的一个性能监测工具,字节跳动在社区版本的基础上进行了定制开发。在veLinux 2.0中,Atop升级至2.8.1+velinux2,主要更新如下:
-J xxx
引入JSON输出,提供以JSON格式记录数据的能力。配合veLinux 2.0的内核使用,内核发生kernel panic之时(硬件故障或内核软件issue)第一内核切换到第二内核,处理panic现场,记录关键信息。配合内核dbg包,支持gdb调试和追溯。在velinux 2.0中,kdump-tools版本号为 2:1.8+velinux2。主要具有如下特性:
支持openjdk-velinux-8、openjdk-velinux-11、openjdk-velinux-17三个版本。具有如下特性:
LXCFS(Linux Containers Filesystem)是一个用于Linux容器的文件系统代理,字节跳动基于社区5.0.4版本,增加per cgroup模拟numa拓扑,提供OOM Killer(Out of Memory Killer)保护和remount机制。
zlib是开源社区的一个无损压缩的基础库,字节跳动在社区版本madler/zlib上进行了一些性能优化。velinux 2.0中升级至 1:1.2.11.dfsg-1+velinux2u1版本。具有如下特性:
支持压缩过程中哈希函数的向量化指令,并且重构了字符串匹配的流程。
增强解压过程中长字符串拷贝效率。
支持crc32/adler32等校验码的向量化指令。
修复CVE-2018-25032漏洞。
压缩和解压缩性能对比:
更新至12.4+base2u1版本,变更/etc/os-release文件内容,适配velinux系统标识。
glibc(GNU C Library,GNU C库)是Linux系统中最基本和最重要的C语言函数库之一。字节跳动采用2.36版本,提供更高的性能和可靠性体验,主要具有如下特性:
AArch64架构提供了包括BTI(branch target identification) 和PAC-RET(pointer authentication for return addresses) 在内的分支保护安全加固。
内存分配相关接口通过PTRDIFF_MAX设置了上限,避免潜在的溢出误申请过大内存的行为,提高了可靠性。
新增异步信号安全函数fork族函数_Fork,用以满足用户的异步信号安全需求。
Unicode编码支持到14.0.0,支持编码范围更广。
提供新的 tunable 环境变量满足功能和性能上的灵活运用,具体为:
glibc.pthread.stack_cache_size配置线程栈cache大小。
glibc.rtld.dynamic_sort选择DSO排序算法。
glibc.malloc.hugetlb通过与内核的大页配置相配合,提高系统性能。
支持LoongArch CPU。
Binutils是GNU项目的一组开源的二进制工具,用于创建、操作和分析二进制文件。字节跳动采用2.40版本,提供更可靠的二进制程序的创建和管理工具。主要特性如下:
支持使用zstd对调试节进行压缩。
新增多种实用便捷选项,提升工具的可用性。
elfedit/readelf支持LAM_U48和LAM_U57。
需要C99编译器和库支持。
新增对LoogArch指令集的支持。
util-linux是一个包含各种Linux实用工具的项目,包含了大量的实用工具。字节跳动采用2.38.1版本,提供较新的Linux运行必须的各种系统程序。
dpkg(Debian Package)是一个用于管理Debian系统上软件包的工具。字节跳动采用1.21.22版本,提供更安全的Linux软件包管理器。
APT(Advanced Package Tool)是一个基于dpkg的高级软件包管理工具。字节跳动采用2.6.1版本,提供更高效可靠的包管理前端工具。
systemd是一个系统和服务管理器。字节跳动采用252版本,默认使用cgroup v2(Control Group Version 2),提供了更可靠的系统和服务管理器。主要特性如下:
CPUAffinity=
支持numa。GRUB2(GNU GRand Unified Bootloader 2)是GNU项目开发的一款多操作系统引导加载程序。字节跳动采用2.06版本,具有如下特性:
GCC(GNU Compiler Collection)是一个由GNU项目开发的开源编译器集合,用于编译和构建各种编程语言的程序。字节跳动采用12.2.0版本,提供更好的C和C++的支持,同时持续改进RISC-V和LoongArch CPU架构的支持。具有如下特性:
GDB(GNU Debugger)是一个开源的、功能强大的调试器,用于调试各种编程语言的程序。字节跳动采用13.1版本,提供最新版本的调试能力。主要特性如下:
Vim是一款开源的、高度可定制的文本编辑器,是Vi编辑器的改进和扩展版本。字节跳动采用9.0
版本,支持一种新的脚本语言Vim9script。
Shell是操作系统提供的一个命令行解释器,用于与操作系统内核进行交互和执行用户命令。字节跳动采用bash 5.2.15
版本。主要特性如下:
新增可加载内置命令:asort,mktemp、accept、mkfifo、csv、cut/lcut、seq等。
shell现在尝试在退出时取消链接所有FIFO,无论消费过程是否已经完成。
bind -x
现在支持不同编辑模式的不同绑定和键盘映射。
将历史记录写入syslog现在可以处理比syslog max更长的消息通过使用序列号写入多条消息来确定长度。
bash-completion
优化丰富了测试模块。
字节跳动采用Python3的3.11.2
版本,不再支持Python2。主要特性如下:
Python 3.11比Python 3.10快10 ~ 60%。
新增tomllib模块,支持解析标准库中的TOML。
新增多种类型提示。
Perl是一种高级的、通用的、解释型的编程语言。字节跳动采用5.38.2
版本。主要特性如下:
Apache是一个开源的、跨平台的Web服务器软件。字节跳动采用2.4.57
版本。主要特性如下:
新增modules:mod_socache_redis、mod_systemd。
新增工具:fcgistarter、htcacheclean、rotatelogs、htpasswd、htdbm,提升便捷性。
功能增强:毫秒设置KeepAliveTimeout、MPM异步支持增强。
Nginx是一个开源的、高性能的、轻量级的Web服务器和反向代理服务器软件。字节跳动采用1.22.1
版本。主要特性如下:
增加对Openssl 3.0的支持。
改进http/2性能。
安全加固:修复CVE-2022-41741、CVE-2022-41742、CVE-2021-23017。
MariaDB是一个开源的关系型数据库管理系统(RDBMS)。字节跳动采用10.11.6
版本。主要特性如下:
新增授权行为:GRANT to PUBLIC。
新增UUID数据类型。
InnoDB性能改进、gap锁修复、改进redo log。
提升Docker时区库初始化速度。
支持容器中健康检查。
跳过InnoDB缓冲池加载/转储,提升Docker启动/初始化速度。
修复CVE-2023-22084、CVE-2022-47015。
PostgreSQL是一个开源、跨平台的关系型数据库管理系统(RDBMS)。字节跳动采用15.6
版本。主要特性如下:
支持SQL MERGE命令。
通过指定列列表和行筛选条件的能力,在逻辑复制发布中选择性发布表内容。
更多压缩选项,包括支持Zstandard (zstd) 压缩。这包括支持在 pg_basebackup期间在服务器端执行压缩。
支持使用JSON格式的结构化服务器日志输出。
性能改进,特别是内存中和磁盘上的排序。
修复CVE-2024-0985。
GnuPG 2(GNU Privacy Guard 2)是开源的加密软件套件GunPG新版本,用于提供数据加密和数字签名功能。字节跳动采用2.2.40
版本。主要特性如下:
支持使用OCB或EAX的AEAD加密模式。
支持DFN颁发的密钥。
支持Telesec ESIGN应用程序。
使用TPM 2.0来保护私钥。
提升gpg加密,解密等过程的速度。
使用管道进行解密,避免内存耗竭。
支持使用openpgp进行ssh-agent身份验证。
强制为ed448和cv448算法创建版本5密钥。
支持多种类型的智能卡。
OpenSSL是一个开源的加密和安全套接字库,提供了各种加密算法、协议和工具,用于保护网络通信、数据传输和数据存储的安全性。字节跳动采用3.0.8
版本。主要特性如下:
支持内核TLS协议(KTLS)。
引入“提供者”(Provider)概念,支持以编程方式或配置文件指定用于给定应用程序的算法实现。
基于SHA1的签名证书将不被认证client和server信任。
修复CVE-2022-3786、CVE-2022-3602、CVE-2022-3786、CVE-2023-0401等漏洞。
OpenSSH(Open Secure Shell)是一个用于安全远程登录的开源实现,它提供了加密的通信会话,包括远程登录、文件传输和端口转发等功能。字节跳动采用9.2 p1
版本,提供更大型的安全隧道功能、多种认证方法和更安全的SSH协议。