本文作者:付超,Oracle ACE 与 PostgreSQL ACE 双认证专家,PG 分会西安用户组核心成员。
一句话结论:IvorySQL 5.4 在 openEuler riscv64 平台上可原生编译、稳定运行,软件层面无指令集兼容性缺陷,具备作为去 IOE 替代数据库的基础条件。
而性能这一项,需要多说两句:本次压测跑出的 663 ~ 750 TPS,是 在 128 核的机器上只点亮了不到 3% 算力、参数完全默认的情况下拿到的基线值。它反映的是 RISC-V 的 单核算力现状,而不是这台服务器的能力上限——换句话说,差距是 CPU 给的,不是数据库拖的。
本文基于真实硬件实测,沿着一条完整的链路往下走:
国产化替换走到今天,芯片和操作系统这两层的替代路径已经比较清晰了。真正难啃的是 数据库这一层——它之所以难,不是因为代码量大,而是因为一个数据库要同时扛住三件事:
你会发现,这三件事全都踩在同一个敏感点上—— 内存一致性模型。
而这恰恰是 RISC-V 和 x86 真正不一样的地方。所以,"能不能编译通过"从来不是重点, "编出来之后事务是不是还对"才是重点。
在贴命令之前,先花一分钟说说这次实测的"题面"。理解了这几条,后面的测试数据才有意义。
x86 采用的是
TSO(Total Store Order)内存模型——它对程序员相当友好,Store-Load 之外的内存重排基本被硬件挡住了。RISC-V 默认采用的是
RVWMO(Weak Memory Ordering),
允许更多种类的内存访问重排序,需要软件显式地用
fence、
amo(原子内存操作)指令来划定边界。
这个差异对普通应用几乎无感,但对数据库是 生死线。PostgreSQL 系的代码里散布着内存屏障、原子 CAS、自旋锁;如果这些原语在 RVWMO 下被错误翻译或错误实现,典型症状就是:偶发的事务可见性错乱、难以复现的死锁、以及在高并发下 TPS 突然"塌方"。
所以本次测试最有价值的一条结论不是"能跑",而是"跑得不别扭"——没有出现锁竞争异常,也没有出现内存屏障相关的性能塌陷。
实测环境的硬件能力基线是
rv64gc(UCB RISC-V + RVC 压缩指令)+
lp64d(双精度浮点 ABI),编译器 gcc 12.3.1。这是一套主流且完备的 64 位 RISC-V 组合,浮点、压缩指令、原子操作都在。
有一点算是"幸运": RISC-V 和 x86 同为小端序。这省掉了数据库里大量与字节序相关的适配工作(想想看,如果换成大端,所有磁盘格式、WAL 记录、网络协议解析都要重新过一遍)。
源码编译的第一道坎其实是依赖。实测中,构建 PostgreSQL 系数据库所需的关键依赖——
gcc、
libicu、
bison、
flex、
perl、
readline、
zlib——
在 openEuler 24.03 LTS 官方仓库里都有 riscv64 版本,直接从
dnf 拉取即可,不需要自己交叉编译任何依赖。
这条看似平淡,实际是"能不能自主构建"的分水岭。
先把测试机亮出来。这是一台典型的"大机器",配置远超常规验证需求,也正因为如此,后面性能章节的解读才有了关键参照。
[highgo@openeuler-riscv64 ~]$ lscpu Architecture: riscv64 Byte Order: Little Endian CPU(s): 128 On-line CPU(s) list: 0-127 NUMA: NUMA node(s): 8 NUMA node0 CPU(s): 0-7,16-23 NUMA node1 CPU(s): 8-15,24-31 NUMA node2 CPU(s): 32-39,48-55 NUMA node3 CPU(s): 40-47,56-63 NUMA node4 CPU(s): 64-71,80-87 NUMA node5 CPU(s): 72-79,88-95 NUMA node6 CPU(s): 96-103,112-119 NUMA node7 CPU(s): 104-111,120-127 [highgo@openeuler-riscv64 ~]$ uname -a Linux openeuler-riscv64 6.6.127-0.0.0.0.riscv64 #1 SMP Wed Jul 15 02:08:54 CST 2026 riscv64 riscv64 riscv64 GNU/Linux [highgo@openeuler-riscv64 ~]$ free -g total used free shared buff/cache available Mem: 250 2 247 0 1 247 Swap: 0 0 0
环境体检的几条关键读数:
| 项目 | 实测值 | 对本次验证的意义 |
|---|---|---|
| 系统 | openEuler 24.03 LTS,内核 6.6.127 | 国产 OS + 国产指令集,完整替换栈 |
| CPU 拓扑 | 128 核 / 8 个 NUMA 节点,每节点 16 核 | 内存访问有跨节点代价,数据库对此极其敏感 |
| 内存 | 250 GB(基本全空闲) | 大内存机器,默认参数会严重"浪费" |
| Swap | 0 | 压测期间不存在换页抖动,数据可比性高 |
| 存储 | NVMe 0.9 TB | 单盘根分区仅 4.6 GB,数据目录需另挂大容量分区 |
这里有一条容易被忽略但很关键的信息: 这台机器没有启用 Swap。这意味着压测过程中不会出现内存换页带来的 TPS 抖动,663 ~ 750 这组数字是"干净"的——但它同时也意味着,一旦内存配置失当,程序没有任何缓冲余地。
去 IOE 替代的首要前提,不是数据库功能多强,而是它能不能 脱离闭源二进制包,在国产硬件指令集上自主编译部署。如果连源码都编不过,后面所有验证都无从谈起。
实测结果很干脆: 完整源码编译一次通过,没有打任何补丁,没有改动一行源码。
第一步:装依赖(openEuler 仓库直取,无需交叉编译)
sudo dnf install gcc icu libicu libicu-devel bison flex perl \ readline readline-devel zlib zlib-devel -y
第二步:拉源码、切分支
git clone https://github.com/IvorySQL/IvorySQL.gitcd IvorySQL git checkout -b IVORY_REL_5_STABLE origin/IVORY_REL_5_STABLE
第三步:编译安装(
-j32 并行编译)
./configure --prefix=/usr/local/ivorysql/ivorysql-5 make -j32 make install
第四步:初始化并启动
bin/initdb -D /opt/postgresql-19.3/ivorysql-5.x/data/# 输出节选The database cluster will be initialized with locale "en_US.UTF-8". The default database encoding has accordingly been set to "UTF8". Data page checksums are enabled. # 数据页校验和默认开启selecting default "shared_buffers" ... 128MB # ← 记住这个值,第 05 节要用creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok Success. bin/pg_ctl -D /opt/postgresql-19.3/ivorysql-5.x/data/ -l logfile start waiting for server to start.... doneserver started
整个过程 没有任何架构相关的报错。产出的是 RISC-V 原生二进制(UCB RISC-V, RVC, double-float ABI, lp64d),不带任何闭源依赖。
部署验收项全部通过:
关键结论:不存在指令集层面的底层兼容障碍。IvorySQL 5.4 可以完全基于国产 RISC-V 硬件自主构建,不依赖闭源厂商预编译包,满足去 IOE 的基础部署诉求。
Oracle 语法兼容是 IvorySQL 的核心价值,也是很多传统 Oracle 迁移去 IOE 选型时最关注的模块。 如果兼容层在新架构上崩溃,那整个迁移方案就不成立。
这里有个容易被低估的技术细节:Oracle 兼容层不是一段独立的翻译脚本,而是通过 扩展预加载的方式,深度挂进数据库内核的解析器、执行器和共享内存区。这意味着:
shared_preload_libraries 阶段完成初始化,
任何地址对齐、结构体布局或原子操作的架构差异,都会在实例启动时直接暴露成崩溃。所以,兼容层能不能在新架构上干净加载并稳定运行,实际上是对数据库整体架构适配质量的一次"高压检验"。
测试中将以下三个扩展预加载到
shared_preload_libraries:
riscv64 平台验证结果:
一句话:兼容层的地基是稳的。 对 Oracle 迁移选型来说,这是最有分量的一条结论——它意味着后续在 RISC-V 上做业务 SQL 全量回放,是可以期待的。
IvorySQL 源码编译默认没有完整编译 contrib 组件,
btree_gin、
intarray、
amcheck 等社区扩展未安装。执行
make -C contrib install 编译安装后,可解锁更多扩展能力,进一步对齐生产环境能力集。
兼容性验证通过后,性能是绕不开的话题。这一节我们把数字拆开看。
基于 pgbench 压测, 8 客户端 / 4 线程 / 30 秒:
| 平台 | TPS | 说明 |
|---|---|---|
| riscv64(本次实测) | 663 ~ 750 | shared_buffers 默认 128MB,未做调优 |
| x86(同内核基线) | 约 1600 | 同等压测参数 |
单看这两行,容易得出"RISC-V 只有 x86 一半"的结论。但把测试条件摊开,这个结论就不成立了。
| 观察维度 | 实测值 | 解读 |
|---|---|---|
| 并发线程 | 4 个 OS 线程 | 机器有 128 核, 本次只动用了约 3% 的算力 |
| 单线程等效 TPS | ≈ 187(750 ÷ 4) | x86 同口径约 400,比值 ≈ 0.47 |
| shared_buffers | 128 MB | 占 256 GB 内存的 0.05%,几乎完全默认 |
| NUMA | 8 节点,未做绑定 | 存在跨节点内存访问开销 |
| Swap | 0 | 无换页抖动,数据可比性高 |
| 存储 | NVMe | 磁盘不是瓶颈 |
换句话说: 663 ~ 750 TPS 不是"这台服务器的性能",而是"这台服务器上 4 个 RISC-V 核 + 全默认参数下 pgbench 的性能"。它是一条基线,不是上限。
把 TPS 摊到线程:riscv64 ≈ 187 TPS/线程,x86 ≈ 400 TPS/线程,比值约 0.47。
这个比值,与 RISC-V 处理器和主流 x86 服务器处理器在 单核 IPC × 主频上的现实差距是同一量级。也就是说——
软件层没有"额外加价"。
这一点值得反复强调。如果 IvorySQL 在 RISC-V 上存在架构相关的性能缺陷——锁自旋异常、内存屏障失效、cache line 对齐问题、原子指令劣化——那么单核效率会比硬件差距 更差,而且通常伴随 TPS 剧烈波动。
而实测的 663 ~ 750 区间 平稳:没有性能塌方,没有锁竞争异常,没有内存屏障相关的退化。
这就是本节的核心结论:性能差距来自 RISC-V 单核算力,不来自数据库软件。 对于以"兼容可用"为目标的验证来说,这是比 TPS 绝对值更重要的结果。
4 个线程 / 128 核,意味着这台服务器的绝大部分算力在本次压测中处于闲置状态。真正的性能故事,要等下面这几个维度逐一验证之后才完整:
shared_buffers 从 128MB 调整到内存 25% 量级(约 64GB)。当前配置下缓存严重不足,这部分提升空间最大。numactl 做内存绑定与进程亲和,避免跨节点访问惩罚。数据库对 NUMA 的敏感度远高于一般应用。wal_buffers、
max_wal_size、
checkpoint_* 参数,优化写入路径。663 ~ 750 TPS 这个数字本身不算亮眼,但它有一个不可替代的价值: 它是可比对的。
同参数、同内核、跨架构,唯一的变量是 CPU。有了这条基线,后续每一次调优、每一次版本迭代,都能清楚地知道改进来自软件还是来自硬件——这比一个孤立的、经过精心调优的漂亮数字有用得多。
| 评估项 | 兼容结论 | 备注 |
|---|---|---|
| riscv64 源码编译部署 | ✅ 完全兼容 | 原生二进制,无闭源依赖,零补丁 |
| Oracle 兼容扩展模块 | ✅ 可用 | 预加载运行无架构问题,无段错误 |
| 标准 SQL、事务、并发 | ✅ 完全兼容 | 上游内核核心特性全部生效 |
| 性能(压测基线) | ✅ 无软件层损耗 | 差距源于单核算力,非架构缺陷 |
| contrib 社区扩展 | ⚠️ 需手动编译安装 | 默认未构建,补齐即可 |
总体判断I:IvorySQL 5.4 在 RISC-V 国产硬件上软件层面兼容可用,没有发现指令集相关功能性缺陷,具备作为去 IOE 替代数据库的基础条件。
1. 编译阶段:完整编译 contrib 模块
部署时执行
make -C contrib install,补齐
btree_gin、
intarray、
amcheck 等社区扩展,对齐商用数据库周边工具能力。
2. 性能调优:大内存服务器不要用默认参数
256GB 内存的 RISC-V 服务器,
shared_buffers 默认 128MB 严重浪费资源。建议调整至内存 25% 左右,配置 HugePages 大页,并针对 8 NUMA 节点做内存绑定。
同时建议补一组高并发(如 64/128 线程)压测,把设备的并发扩展能力测出来。
3. 迁移评估:Oracle 兼容模块优先做业务回放
Oracle 迁移场景,优先验证
ivorysql_ora 兼容模块对业务 SQL 的覆盖度,在 RISC-V 环境做全量业务回放测试,确认语法兼容率和性能表现后再推进生产迁移。
去 IOE 不是简单的硬件替换,而是软硬件栈的整体适配。本次实测证明,IvorySQL 数据库可以很好地跑通 RISC-V 国产指令集—— 从源码编译到 Oracle 兼容层,从基础事务语义到并发压测,软件层面没有发现指令集相关的功能性缺陷。
性能这一项,我们希望被这样理解: 在 128 核的机器上只用了 4 个线程、参数全默认、缓存只给了 0.05%,跑出了 663 ~ 750 TPS 且全程平稳——这不是一台 RISC-V 服务器的上限,这只是一条干净的起跑线。 差距在芯片,不在我们的代码里;而算力这块地,还空着 97%。
但生产落地,除了数据库本身,还需要配套运维工具、备份监控、中间件驱动共同完成适配。 真正的去 IOE,是每一层都能自主可控、每一个环节都能真实跑通。
数据库这一层,IvorySQL 5.4 在 RISC-V 上已经交出了一份合格的答卷。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70043484/viewspace-3184063/ ,如需转载,请注明出处,否则将追究法律责任。