易君召
发布于 2026-08-05 / 作者:易君召 / 1 阅读
0

国产化数据库openGauss noLSE 版本详解

基础概念

LSELarge System Extensions,是 ARMv8.1‑A 引入的一套硬件原子指令集

  • LSE 指令用于多核下原子加减、CAS 等操作,替代旧的 LDXR/STXR 循环重试;高并发 OLTP 下显著降低锁竞争、提升 WAL、CLog 并发性能,鲲鹏 920/930 支持 LSE。

  • noLSE 版本:编译时关闭‑D__ARM_LSE宏,不使用 LSE 硬件原子指令,回退到 ARMv8.0 原生 LDXR/STXR 软件重试实现,用于不支持 LSE 的 ARMv8.0 芯片(如飞腾 D2000、D1000 等)。

⚠️ noLSE仅针对 AArch64 (ARM64) 平台,x86‑64 不存在 LSE/noLSE 区分

历史:openGauss 6.x 官方二进制包默认开启 LSE;7.0.0‑RC1 开始社区正式提供 noLSE 官方二进制包,6.x 没有官方 noLSE 包,只能源码自行编译关闭 LSE 得到 noLSE 包。

普通 LSE 版本 vs noLSE 版本对比

对比项

LSE 普通版本 (官方 ARM 默认包)

noLSE 版本

编译宏

开启‑D__ARM_LSE

移除‑D__ARM_LSE,禁用 LSE 硬件原子指令

CPU 要求

必须 ARMv8.1 及以上,flags 包含lse/atomics;鲲鹏 920/930;飞腾 D3000

ARMv8.0 即可;飞腾 D2000/D1000 等无 lse 标志的 CPU

报错现象

在无 LSECPU 上运行:illegal instruction 非法指令,gs_initdb 失败、gaussdb 直接崩溃

可正常启动运行,无非法指令

功能特性

全部功能可用

SQL、存储、复制、MOT、OM/CM 等全部功能完全一致,没有阉割任何数据库特性,只是底层原子操作实现不同

性能表现

高并发多核下性能更好,锁竞争小

多核高并发 TPCC 场景性能会下降 10%‑30%;低并发业务差异很小;原子操作靠循环重试实现,核数越多差距越明显

官方包

6.x、7.x ARM 默认包

7.0.0‑RC1 起官方提供 noLSE 安装包;6.x 只能源码编译自制 noLSE 包

常用实操命令

  1. 检查 CPU 是否支持 LSE

bash

lscpu | grep lse
# 或者
cat /proc/cpuinfo | grep atomics

输出有lse/atomics标志 → 支持 LSE,用普通包;无输出 → 必须用 noLSE 包,否则启动直接报非法指令。

  1. 查看当前 openGauss 二进制是否为 noLSE 编译

bash

pg_config | grep ARM_LSE
# 如果输出-D__ARM_LSE代表LSE版本;无输出代表noLSE版本
  1. 源码编译生成 noLSE 包

    修改build/script/utils/make_compile.sh全部删除所有‑D__ARM_LSE编译选项,再执行 build.sh 打包,产出 noLSE 二进制包openGauss

选型建议

  1. 鲲鹏 920/930、飞腾 D3000:CPU 支持 LSE,直接用官方普通 LSE 版本,获取完整性能

  2. 飞腾 D2000/D1000 等 v8.0 芯片:强制使用 noLSE 包,不要直接跑官方默认 ARM 包,会直接崩溃。

  3. noLSE 性能损失:低并发业务几乎无感;高并发 OLTP 要做压力评估,核数越高性能损失越大,属于硬件指令层面的代价,无法靠参数调优完全抹平。

常见坑

  1. 6.0.x 官方没有发布 noLSE 二进制包,网上下载到所谓 “6.0.x noLSE” 都是用户自行编译,注意版本一致性;7.0 及以后可以直接下载官方 noLSE 包。

  2. 不要混用:LSE 编译二进制不能跑在无 LSECPU;noLSE 包也可以跑在支持 LSE 的 CPU 上,只是浪费硬件能力,性能不如 LSE 版本。

  3. 虚拟机:部分 ARM 虚拟化环境会不透传 LSE 指令,即使物理 CPU 支持,虚拟机内部也需要使用 noLSE 包。