Files
ST-Bionic-Memory-Ecology/docs/features/native-acceleration.md
2026-05-31 17:07:58 +00:00

3.4 KiB
Raw Blame History

Native / WASM 加速

ST-BME 对几个计算密集操作提供 Rust/WASM 加速,灰度发布,默认 fail-open失败自动回退 JS。本文档说明加速了什么、怎么门控、怎么回退。

实现:native/stbme-core/Rust 源)、vendor/wasm/stbme_core.jsJS 包装)、ui/graph-native-bridge.jssync/bme-db.js 的 native gate。

加速了什么

操作 native 钩子 阈值(达到才用 native
图谱布局 solve_layout 节点 ≥ 280 或 边 ≥ 1600
持久化增量构建 build_persist_delta* 记录 ≥ 20000 且 结构增量 ≥ 600 且 序列化字符 ≥ 4000000
快照 hydrate/加载 build_hydrate_records 记录 ≥ 30000

没有加速embedding 和召回图扩散。embedding 走 vector/ 的 API/直连路径;扩散是纯 JSretrieval/diffusion.js)。注意 host/st-native-render.js 不是 WASM 加速器,是 ST 原生模板/宏渲染助手。

Fail-open 回退

核心标志:

  • nativeEngineFailOpen: true(默认)— native 失败时回退 JS不报错
  • graphNativeForceDisable: false(默认)— 全局禁用 native

回退逻辑:

  • 图谱布局worker 不可用时fail-open 返回 skipped 让渲染器跑 JS 布局strict 模式fail-open false才抛 native-failed-hard
  • 持久化增量native 预加载/构建失败且 fail-open 时,记警告、用 JS 增量。
  • hydrate同理native 不可用且 fail-open 时用 JS hydrate。

graphNativeForceDisable 为真时布局、hydrate、持久化增量全部跳过 native 尝试。

灰度发布

设置文件明确把这块标为"灰度"。通过 nativeRolloutVersion 做迁移:

  • 当前 NATIVE_ROLLOUT_VERSION = 2
  • 持久版本 < 1迁移开启 native 布局/增量/hydrate 默认
  • 持久版本 < 2 且 hydrate 阈值是旧值 12000更新到 30000
  • 然后设 nativeRolloutVersion = 2

这套迁移让老用户平滑升级到新默认,同时保留用户手动 opt-out手动关掉的不被迁移覆盖

WASM 核心模块

JS 包装 vendor/wasm/stbme_core.js

  • 先尝试 wasm-pack 产物(./pkg/stbme_core_pkg.js + .wasm
  • 失败则用全局 fallback loader globalThis.__stBmeLoadRustWasmLayout
  • 通过 getNativeModuleStatus() 暴露状态

暴露的函数:solveLayout()installNativePersistDeltaHook()(装 __stBmeNativeBuildPersistDelta)、installNativeHydrateHook()(装 __stBmeNativeHydrateSnapshotRecords)、getNativeModuleStatus() / resetNativeModuleStatus()

Rust 导出:solve_layoutbuild_persist_delta / _compact / _compact_hashbuild_hydrate_records

桥接模式 persistNativeDeltaBridgeMode(默认 json)控制增量传输格式;hash 模式走 compact hash 路径。

测试

  • tests/native-layout-parity.mjs — native 布局结果与 JS 布局的平均绝对差在阈值内(保证 native 和 JS 算出来一致)。
  • tests/native-rollout-matrix.mjs — 迁移、选项归一化、各操作的阈值门控(边界值如 279/280、29999/30000

面板控件

面板显示 native 状态(全局禁用 / 按阈值自动尝试fail-open / strict并绑定 graphNativeForceDisablenativeEngineFailOpengraphUseNativeLayoutpersistUseNativeDeltaloadUseNativeHydrate 等开关和阈值输入。遇到异常可在面板强制关闭 native。