You need to enable JavaScript to run this app.
导航
veLinux 2.0系统特性说明
最近更新时间:2024.06.21 15:39:17首次发布时间:2024.05.24 10:20:02

本文主要介绍veLinux 2.0操作系统中,内核、系统组件、系统配置和优化等关键特性。

内核

veLinux 2.0内核基于内核社区长期支持(LTS)的5.15版本定制而成,且未来将支持6.6版本内核,对内存、网络、I/O、文件系统等模块进行了缺陷修复、性能增强并引入了适用于云应用的新特性。

Kernel 5.15

  • 新增eBPF(extended Berkeley Packet Filter)通用helper函数,支持通过模块添加eBPF功能。
  • 新增对Intel® SPR/EMR处理器的i10mn EDAC的Drivers(驱动)支持,并提供对HBM内存的EDAC支持。
  • 新增对EMR平台的特性支持(RAPL、Idle、Uncore Frequency等)。
  • 新增对fast REP的支持以及对Split Lock、P-state的增强。
  • 新增QAT(QuickAssist Technology)设备对SVM(Secure Virtual Machine)的支持。
  • 新增Intel® RDT(Resource Director Technology)对SNC(Sub-NUMA Clustering)的隔离支持。
  • 新增TCPDirect(使用dma-buffer)的支持,即Device Memory TCP,可减少报文拷贝,极大提升报文吞吐。
  • 新增AMD QoS特性,包括SMBA (Slow Memory Bandwidth Allocation) 和BMEC(Bandwidth Monitoring Event Configuration),提供新型CXL内存的资源QOS隔离。
  • 新增PSI(Pressure Stall Information)特性,针对cgroup(Control Groups)级别的CPU Stall增加了FULL模式,优化了memory stall FULL模式的实现和进程阻塞切换的开销。
  • 优化冗余的HugeTLB(Huge Transparent Large Pages),降低内存开销。
  • 优化了cgroup(Control Groups)Slab Memory Controller。
  • 支持VDUSE设备模拟框架,能够为容器和虚机提供统一的I/O虚拟化层。
  • 修复CVE-2023-5717、CVE-2023-2176、CVE-2023-35001、CVE-2023-31248、CVE-2023-2007等重要CVE漏洞。

Kernel 6.6

  • 支持EEVDF(Enhanced Virtual Deadline Fairness)的调度器算法,旨在解决完全公平调度(CFS)中存在的一些问题,特别是在任务延迟方面缺乏保障的情况下。EEVDF会考虑任务的延迟需求,能够提升任务的时延保证,同时不降低系统的整体吞吐量。
  • 支持Folios新的内存管理机制,以提升内存管理性能。
  • 在用户态支持Intel® Shadow Stack特性,来保证用户态栈被破坏时触发故障保护,也有助于问题和故障的提前发现和定位。
  • 在低队列深度(low queue depth)的 I/O 场景下,IO_uring的Direct I/O性能有了较大提升。
  • 支持cachestat syscall来查询具体文件的Pagecache的一些统计信息(如cache、dirty、writeback等)。
  • 支持用户空间(User Space)的Trace event功能。
  • 细化进程内存大锁(Process Big Memory Lock)到VMA(per Virtual Memory Area,per-VMA)级别,可大幅度降低大规格多CPU系统并发扩展场景下的内存管理性能,降低锁竞争开销。
  • 支持Rust语言编写的内核模块。
  • 支持MGLRU(Most Gapped Least Recently Used,最大间隔最近未使用)算法,提升内存回收管理的性能。

系统组件

自研组件

Atop

Atop是开源社区的一个性能监测工具,字节跳动在社区版本的基础上进行了定制开发。在veLinux 2.0中,Atop升级至2.8.1+velinux2,主要更新如下:

  • 支持LLC收集。
  • 支持pgin&pgout。
  • 补充tcpsock和udpsock 内存消耗。
  • 新增cgroup v2支持。
  • Supplement inflight I/O requests。
  • 通过-J xxx引入JSON输出,提供以JSON格式记录数据的能力。
  • 为每个进程新增nvcsw和nivcsw两种上下文切换计数方式。
  • 为空闲线程引入单独的计数器。
  • 为容器添加RDELAY/BDELAY。

kdump-tools

配合veLinux 2.0的内核使用,内核发生kernel panic之时(硬件故障或内核软件issue)第一内核切换到第二内核,处理panic现场,记录关键信息。配合内核dbg包,支持gdb调试和追溯。在velinux 2.0中,kdump-tools版本号为 2:1.8+velinux2。主要具有如下特性:

  • 通过过滤无关的内核cmdline、替换systemd等方法来降低kdump内核中的内存使用,从而防止机器在dump内存的过程中出现OOM(out of memory)的错误。
  • 检测内存等硬件故障,提前结束dump过程,防止再次出现内核错误。
  • 提前dump dmesg,防止在dump内存失败的情况下,获取不到dmesg的信息。
  • 在kdump侧实现crashkernel = auto功能,根据机器内存自动设置预留给kdump的内存的大小,且无需对内核做定制化修改。

OpenJDK

支持openjdk-velinux-8、openjdk-velinux-11、openjdk-velinux-17三个版本。具有如下特性:

  • 针对大数据数据存储压缩场景,veLinux的OpenJDK集成了优化的zlib实现,基于GZIP的数据压缩、解压缩性能会得到有效改进,详细数据可查看zlib
  • 针对Full GC(Full Garbage Collection,全垃圾回收)延时较长的问题,移植了G1 Parallel Full GC(Garbage-First Parallel Full Garbage Collection,垃圾优先并行全面垃圾回收)到jdk-8中,有效缓解了Full GC带来的长延时问题。

LXCFS

LXCFS(Linux Containers Filesystem)是一个用于Linux容器的文件系统代理,字节跳动基于社区5.0.4版本,增加per cgroup模拟numa拓扑,提供OOM Killer(Out of Memory Killer)保护和remount机制。

zlib

zlib是开源社区的一个无损压缩的基础库,字节跳动在社区版本madler/zlib上进行了一些性能优化。velinux 2.0中升级至 1:1.2.11.dfsg-1+velinux2u1版本。具有如下特性:

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

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

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

  • 修复CVE-2018-25032漏洞。

压缩和解压缩性能对比:

base-files

更新至12.4+base2u1版本,变更/etc/os-release文件内容,适配velinux系统标识。

重点开源组件

核心工具

glibc

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

Binutils是GNU项目的一组开源的二进制工具,用于创建、操作和分析二进制文件。字节跳动采用2.40版本,提供更可靠的二进制程序的创建和管理工具。主要特性如下:

  • 支持使用zstd对调试节进行压缩。

  • 新增多种实用便捷选项,提升工具的可用性。

  • elfedit/readelf支持LAM_U48和LAM_U57。

  • 需要C99编译器和库支持。

  • 新增对LoogArch指令集的支持。

util-linux

util-linux是一个包含各种Linux实用工具的项目,包含了大量的实用工具。字节跳动采用2.38.1版本,提供较新的Linux运行必须的各种系统程序。

dpkg

dpkg(Debian Package)是一个用于管理Debian系统上软件包的工具。字节跳动采用1.21.22版本,提供更安全的Linux软件包管理器。

APT

APT(Advanced Package Tool)是一个基于dpkg的高级软件包管理工具。字节跳动采用2.6.1版本,提供更高效可靠的包管理前端工具。

启动与引导

systemd

systemd是一个系统和服务管理器。字节跳动采用252版本,默认使用cgroup v2(Control Group Version 2),提供了更可靠的系统和服务管理器。主要特性如下:

  • sd-boot从原来的PCR 8升级到支持TPM PCR 12。
  • 支持 cgroup v2更多特性。
  • 支持 cgroup v2 BPF相关逻辑。
  • 支持 GPT Discoverable Partitions Specification 相关特性。
  • 新增每次升级时触发所有设备udev规则。
  • 选项CPUAffinity=支持numa。
  • udev规则支持PCI和USB设备的auto-suspend。
  • 新增userdb相关特性。
  • 新增工具systemd-network-generator、systemd-sysext、systemd-repart等来控制系统拓展层级、更好地支持GPT等。
  • 新增网络设备命名规则“keep”。
  • 系统资源限制 RLIMIT_NOFILE 设置为 1024(soft)和 4096(hard)。
  • 将 /dev 的最大默认 inodes 数从64K提高到1M, 将 /tmp 的最大默认 inodes 数从400K提高到1M。
  • 现在在 x86_64 上偏向使用 RDRAND 指令集。

GRUB2

GRUB2(GNU GRand Unified Bootloader 2)是GNU项目开发的一款多操作系统引导加载程序。字节跳动采用2.06版本,具有如下特性:

  • 支持Virtual LAN。
  • ARM支持EHCI、DMA、DTB驱动支持。
  • 支持UUID、PARTUUID。
  • 支持包含Open Firmware text representation的NVMe设备。
  • 添加对F2FS(flash-friendly file system)的支持。
  • 支持稀疏节点的文件系统。
  • 支持RAID-5、RAID-6或RAID1C34的文件系统,读取/启动/恢复。
  • 全架构支持TPM(可信平台模块)。
  • 支持RISC-V架构。

编译与开发

GCC

GCC(GNU Compiler Collection)是一个由GNU项目开发的开源编译器集合,用于编译和构建各种编程语言的程序。字节跳动采用12.2.0版本,提供更好的C和C++的支持,同时持续改进RISC-V和LoongArch CPU架构的支持。具有如下特性:

  • 切换为TGCC。
    • 反馈编译优化,贴合业务特性提升效果。
    • LTO链接优化。
    • 基于业务运行特征实施函数重排/基本块重排。
  • 支持ShadowCallStack sanitizer(仅 aarch64)。
  • 默认编译的C++版本选项为17,实现一部分C++ 23特性。
  • 支持armv9,支持loongarch。

GDB

GDB(GNU Debugger)是一个开源的、功能强大的调试器,用于调试各种编程语言的程序。字节跳动采用13.1版本,提供最新版本的调试能力。主要特性如下:

  • 支持多种架构,包括loongarch、openrisc、C-SKY。
  • LoongArch GNU/Linux现已添加浮点支持。
  • 默认支持多线程符号表加载。
  • 不再支持python2,对python api增强。

Vim

Vim是一款开源的、高度可定制的文本编辑器,是Vi编辑器的改进和扩展版本。字节跳动采用9.0版本,支持一种新的脚本语言Vim9script。

Shell

Shell是操作系统提供的一个命令行解释器,用于与操作系统内核进行交互和执行用户命令。字节跳动采用bash 5.2.15版本。主要特性如下:

  • 新增可加载内置命令:asort,mktemp、accept、mkfifo、csv、cut/lcut、seq等。

  • shell现在尝试在退出时取消链接所有FIFO,无论消费过程是否已经完成。

  • bind -x现在支持不同编辑模式的不同绑定和键盘映射。

  • 将历史记录写入syslog现在可以处理比syslog max更长的消息通过使用序列号写入多条消息来确定长度。

  • bash-completion

    • 对nmap、openssl、ssh-keygen、gcc等命令提供更多的支持。
    • 新支持gssdp-discover、xvfb-run、influx、dmypy、carton、scrub、ecryptfs-migrate-home、chmod、json_xs等。
  • 优化丰富了测试模块。

Python

字节跳动采用Python3的3.11.2版本,不再支持Python2。主要特性如下:

  • Python 3.11比Python 3.10快10 ~ 60%。

  • 新增tomllib模块,支持解析标准库中的TOML。

  • 新增多种类型提示。

    • 新增一种标准异常类型ExceptionGroup,并引入新的语法 except*,允许程序同时触发和处理多个不相关的异常。
    • 新增细粒度Traceback错误信息,增强调试能力(来自于PEP 657)。

Perl

Perl是一种高级的、通用的、解释型的编程语言。字节跳动采用5.38.2版本。主要特性如下:

  • 新增Unicode 15.0支持。
  • 新增浮点异常信号支持。
  • 新增可变长的后行断言 (lookbehind) 支持。
  • 新增builtin核心模块。
  • 新增try/catch/finally异常处理机制。
  • C11 TLS特性支持,线程化perl构建场景性能提升。
  • 特定场景下标量创建速度提升30%。
  • 语言环境操作线程安全支持。
  • Hash表key分配性能提升。

Web服务器

Apache

Apache是一个开源的、跨平台的Web服务器软件。字节跳动采用2.4.57版本。主要特性如下:

  • 新增modules:mod_socache_redis、mod_systemd。

  • 新增工具:fcgistarter、htcacheclean、rotatelogs、htpasswd、htdbm,提升便捷性。

  • 功能增强:毫秒设置KeepAliveTimeout、MPM异步支持增强。

Nginx

Nginx是一个开源的、高性能的、轻量级的Web服务器和反向代理服务器软件。字节跳动采用1.22.1版本。主要特性如下:

  • 增加对Openssl 3.0的支持。

  • 改进http/2性能。

  • 安全加固:修复CVE-2022-41741、CVE-2022-41742、CVE-2021-23017。

数据库

MariaDB

MariaDB是一个开源的关系型数据库管理系统(RDBMS)。字节跳动采用10.11.6版本。主要特性如下:

  • 新增授权行为:GRANT to PUBLIC。

  • 新增UUID数据类型。

  • InnoDB性能改进、gap锁修复、改进redo log。

  • 提升Docker时区库初始化速度。

  • 支持容器中健康检查。

  • 跳过InnoDB缓冲池加载/转储,提升Docker启动/初始化速度。

  • 修复CVE-2023-22084、CVE-2022-47015。

PostgreSQL

PostgreSQL是一个开源、跨平台的关系型数据库管理系统(RDBMS)。字节跳动采用15.6版本。主要特性如下:

  • 支持SQL MERGE命令。

  • 通过指定列列表和行筛选条件的能力,在逻辑复制发布中选择性发布表内容。

  • 更多压缩选项,包括支持Zstandard (zstd) 压缩。这包括支持在 pg_basebackup期间在服务器端执行压缩。

  • 支持使用JSON格式的结构化服务器日志输出。

  • 性能改进,特别是内存中和磁盘上的排序。

  • 修复CVE-2024-0985。

安全相关

GnuPG 2

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

OpenSSL是一个开源的加密和安全套接字库,提供了各种加密算法、协议和工具,用于保护网络通信、数据传输和数据存储的安全性。字节跳动采用3.0.8版本。主要特性如下:

  • 支持内核TLS协议(KTLS)。

  • 引入“提供者”(Provider)概念,支持以编程方式或配置文件指定用于给定应用程序的算法实现。

  • 基于SHA1的签名证书将不被认证client和server信任。

  • 修复CVE-2022-3786、CVE-2022-3602、CVE-2022-3786、CVE-2023-0401等漏洞。

OpenSSH

OpenSSH(Open Secure Shell)是一个用于安全远程登录的开源实现,它提供了加密的通信会话,包括远程登录、文件传输和端口转发等功能。字节跳动采用9.2 p1版本,提供更大型的安全隧道功能、多种认证方法和更安全的SSH协议。