ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

fluent-bit 内嵌 WAMR 的 WebAssembly / WASI 提案支持全景:默认启用、可选开启与未实现状态解析

fluent-bit 内嵌 WAMR 的 WebAssembly / WASI 提案支持全景:默认启用、可选开启与未实现状态解析 fluent-bit 内嵌 WAMR 的 WebAssembly / WASI 提案支持全景默认启用、可选开启与未实现状态解析【免费下载链接】fluent-bitFast and Lightweight Logs, Metrics and Traces processor for Linux, BSD, OSX and Windows项目地址: https://gitcode.com/GitHub_Trending/fl/fluent-bit本文以仓库内置的 WAMRwasm-micro-runtime 2.4.1官方稳定性文档 stability_wasm_proposals.md 为核心骨架系统梳理 WAMR 对 WebAssembly 与 WASI 各阶段提案Proposal的支持状态、对应 CMake 编译开关及其默认行为并结合本仓库的 CMake 构建脚本与 filter_wasm 插件 说明如何在 fluent-bit 中实际启用这些能力。读完本文你将掌握哪些提案开箱即用、哪些需要显式编译选项开启、哪些尚未实现以及如何为 fluent-bit 定制一个符合自身功能与体积需求的 Wasm 运行时。一、这份文档在仓库中的位置与作用WAMR 的稳定性说明文档 stability_wasm_proposals.md 是官方跟踪 WebAssembly 与 WASI 提案支持进度的权威清单。它只跟踪以下两个上游提案清单中的内容WebAssembly proposals阶段化提案流程WASI proposals正常情况下该文档只跟踪进入Phase 4标准化完成的提案但如果某个仍处早期阶段的提案在 WAMR 中获得了支持也会被追加到清单中因此读者可能看到 Phase 4一列为No的条目——例如「Legacy Exception handling」和「Reference-Typed Strings」就属于这种情况。文档还明确了状态判定基准表格中的status即 On-by-default / Off-by-default反映的是 product-mini/platforms/linux/CMakeLists.txt 中的默认配置顶层 CMakeLists 与各平台特定 CMakeLists 之间可能存在细微差异。用户可通过编译选项开启或关闭这些功能若某个功能没有对应编译选项表中标记为N/A则表示该功能永久启用、无法关闭。在 fluent-bit 中WAMR 以vmlib-static静态库形式参与构建集成入口在 cmake/libraries.cmake定义了FLB_PATH_LIB_WASM_MICRO_RUNTIME lib/wasm-micro-runtime-WAMR-2.4.1运行时插件为 filter_wasm。因此本文档所描述的提案支持矩阵直接决定了 fluent-bit Wasm 过滤器能运行什么样的.wasm模块。二、默认启用的 Wasm 提案On-by-default下表完整继承自原文档列出 WAMR 默认编译进运行时的 WebAssembly 提案Proposal提案 Phase 4编译选项Compilation OptionBulk memory operationsYesWAMR_BUILD_BULK_MEMORYFixed-width SIMD1YesWAMR_BUILD_SIMDMulti-valueYesN/ANon-trapping float-to-int conversionsYesN/AReference TypesYesWAMR_BUILD_REF_TYPESSign-extension operatorsYesN/AWebAssembly C and C APINoN/A对这组默认启用提案做源码级印证Bulk memory operations批量内存操作提供memory.copy、memory.fill、memory.init、data.drop等指令可显著减少内存操作的指令数与边界检查开销。对应开关WAMR_BUILD_BULK_MEMORY。Fixed-width SIMD128 位定宽 SIMD 指令集。从 product-mini/platforms/linux/CMakeLists.txt 可以看到在 x86_64 与 AARCH64 平台上该文件会默认将WAMR_BUILD_SIMD置为 1因此 Linux 桌面/服务器构建默认带 SIMD。注意其支持范围限定在llvm-jit 与 AOT两种执行模式见脚注 1fast-interpreter 模式下如需 SIMD需按 build_wamr.md 的说明同时开启WAMR_BUILD_LIB_SIMDE借助 SIMDe 库实现。Multi-value / Non-trapping float-to-int conversions / Sign-extension operators三项均为N/A即无条件内置。例如 sign-extension 的i32.extend8_s等指令、float 转 int 的饱和转换i32.trunc_sat_f32_s等都永久可用无需也无法通过编译选项裁剪。Reference Types引用类型提供externref/funcref与ref.null、call_ref等能力是后续 GC、Typed Function References 等提案的基础。Linux 平台 CMakeLists 同样默认置WAMR_BUILD_REF_TYPES 1。WebAssembly C and C API即 WASM C API对应 wasm_c_api.h详述见 wasm_c_api.md虽然尚未进入 Phase 4但 WAMR 已默认提供。三、默认关闭、需显式开启的 Wasm 提案Off-by-default下表为默认关闭、需要主动传入编译选项才能启用的提案Proposal Phase 4编译选项Garbage collectionYesWAMR_BUILD_GCLegacy Exception handling2NoWAMR_BUILD_EXCE_HANDLINGMemory64YesWAMR_BUILD_MEMORY64Multiple memories3YesWAMR_BUILD_MULTI_MEMORYReference-Typed StringsNoWAMR_BUILD_STRINGREFTail callYesWAMR_BUILD_TAIL_CALLThreads4YesWAMR_BUILD_SHARED_MEMORYTyped Function ReferencesYesWAMR_BUILD_GC结合 build_wamr.md 对这些开关做进一步说明便于读者评估取舍Garbage collectionWAMR_BUILD_GC开启 GC 提案的 Wasm 模块支持。开启后可进一步配置 GC 堆大小WAMR_BUILD_GC_HEAP_SIZE_DEFAULT默认 128 kB 131072。注意Typed Function References 与 GC 共用WAMR_BUILD_GC开关。Legacy Exception handlingWAMR_BUILD_EXCE_HANDLING仅 classic 解释器模式支持见脚注 2。构建文档明确指出该功能目前只在 classic interpreter 运行模式下生效且属于被上游标记为“不鼓励使用”的旧版异常处理提案。Memory64WAMR_BUILD_MEMORY64将线性内存地址空间扩展到 64 位。目前仅在 classic 解释器模式与 AOT 模式下受支持fast-interpreter / JIT 尚不支持。Multiple memoriesWAMR_BUILD_MULTI_MEMORY模块可拥有多个线性内存当前仅解释器模式支持脚注 3。Reference-Typed StringsWAMR_BUILD_STRINGREF将字符串作为引用类型引入的提案尚未进入 Phase 4。Tail callWAMR_BUILD_TAIL_CALLreturn_call系列指令支持常量栈深度的尾调用优化对递归型 Wasm 模块如函数式风格过滤器很有价值。ThreadsWAMR_BUILD_SHARED_MEMORY共享内存与原子操作支持。除该开关外WAMR_BUILD_LIB_PTHREADlib-pthread 库也能触发此能力——构建文档说明 lib-pthread 的依赖特性shared memory 与 thread manager会自动一并开启。Typed Function ReferencesWAMR_BUILD_GC函数引用类型化(ref func)等与 GC 绑定开启。四、尚未实现的 Wasm 提案Unimplemented以下提案虽然大多已进入 Phase 4但 WAMR 目前尚未实现表中无编译选项可用Proposal Phase 4Branch HintingYesCustom Annotation Syntax in the Text FormatYesException handling5YesExtended Constant ExpressionsYesImport/Export of Mutable GlobalsYesJS String BuiltinsYesRelaxed SIMDYes需要特别区分的是Exception handling的两条线表 2 中的Legacy Exception handling已实现仅解释器、且不鼓励使用而表 3 中的Exception handling最新版提案尚未实现。两者不可混为一谈。另外「Extended Constant Expressions」尽管在 Unimplemented 列表仓库构建脚本中仍预留了WAMR_BUILD_EXTENDED_CONST_EXPR选项见 build_wamr.md读者应以稳定性文档的状态为准并在实测前确认目标版本的实现情况。五、WASI 提案支持状态原文档将 WASI 提案同样划分为三类表格如下On-by-default WASI Proposals默认启用当前为空。Off-by-default WASI Proposals默认关闭Proposal Phase 4编译选项Machine Learning (wasi-nn)NoWAMR_BUILD_WASI_NNThreadsNoWAMR_BUILD_LIB_WASI_THREADSUnimplemented WASI Proposals未实现当前为空。对这两项 WASI 开关补充仓库层面的细节wasi-nn机器学习推理对应 core/iwasm/libraries/wasi-nn 目录支持接入 TensorFlow Lite、OpenVINO、PyTorch 等后端。从 Linux 平台 CMakeLists 可见开启WAMR_BUILD_WASI_NN时会把BUILD_SHARED_LIBS置为 ON因为 wasi-nn 后端与 iwasm 需要共享同一套动态库。build_wamr.md 还提示不带WAMR_BUILD_WASI_EPHEMERAL_NN的WAMR_BUILD_WASI_NN已被标记为 deprecated建议一并开启WAMR_BUILD_WASI_EPHEMERAL_NN另有 GPU 模式WAMR_BUILD_WASI_NN_ENABLE_GPU与外部 delegate 模式WAMR_BUILD_WASI_NN_ENABLE_EXTERNAL_DELEGATE/WAMR_BUILD_WASI_NN_EXTERNAL_DELEGATE_PATH可选。wasi-threads通过WAMR_BUILD_LIB_WASI_THREADS开启依赖 shared memory 与 thread manager会自动连带启用。实现细节可参考 pthread_impls.md。六、在 fluent-bit 构建中实际启用这些提案了解支持矩阵之后关键在于如何把选项落到 fluent-bit 的实际构建中。6.1 fluent-bit 的 Wasm 相关开关fluent-bit 顶层 CMakeLists.txt 提供了三个与 Wasm 直接相关的选项FLB_WASM是否构建 Wasm 运行时支持默认YesFLB_WAMRC是否构建 WASM AOT 编译器可执行文件wamrc默认NoFLB_WASM_STACK_PROTECT是否以强栈保护标志构建 Wasm 运行时默认No开启时在 x86/AMD64 平台附加相应防护标志。WAMR 库的路径由 cmake/libraries.cmake 中的FLB_PATH_LIB_WASM_MICRO_RUNTIME指定为lib/wasm-micro-runtime-WAMR-2.4.1filter_wasm 插件 通过WAMR_ROOT_DIR引用该路径并将插件链接到vmlib-static即 WAMR 运行时静态库同时把core/iwasm/include加入头文件搜索路径。也就是说fluent-bit 默认即以“Linux 平台默认配置”的方式内置 WAMR——上一节所述的 On-by-default 提案SIMD、Reference Types、Bulk Memory 等在默认构建中即已生效。另外cmake/windows-setup.cmake 中 Windows 构建会设置WAMR_BUILD_INVOKE_NATIVE_GENERAL而 cmake/s390x.cmake 等平台文件可能直接关闭FLB_WASM——这正印证了原文档“各平台 CMakeLists 与 Linux 平台可能存在差异”的说明。6.2 组合配置示例在 fluent-bit 源码目录中构建选项通过cmake命令行传递。以下命令可在-DWAMR_BUILD_*层面定制 Wasm 能力对 fluent-bit 而言建议在配置FLB_WASMYes的前提下叠加这些开关# 开启 Tail call 与 Threads共享内存保留默认 SIMD / Reference Types cmake -DFLB_WASMYes \ -DWAMR_BUILD_TAIL_CALL1 \ -DWAMR_BUILD_SHARED_MEMORY1 \ .. # 开启 GC连带 Typed Function References并指定 GC 堆大小 cmake -DFLB_WASMYes \ -DWAMR_BUILD_GC1 \ -DWAMR_BUILD_GC_HEAP_SIZE_DEFAULT262144 \ .. # 开启 Memory64仅 classic 解释器与 AOT 模式生效 cmake -DFLB_WASMYes \ -DWAMR_BUILD_MEMORY641 \ ..参照 build_wamr.md 中的组合示例也可以统一关闭解释器、仅保留 AOT 来压缩体积cmake .. -DWAMR_BUILD_INTERP0 -DWAMR_BUILD_AOT1 -DWAMR_BUILD_LIBC_WASI0 -DWAMR_BUILD_PLATFORMlinux提示稳定性文档的状态基准是 Linux 平台的product-mini构建fluent-bit 作为嵌入式宿主其默认值与上表可能存在少量出入。凡涉及体积/安全敏感场景建议以实际构建日志与CMakeCache.txt中的最终值为准。此外构建文档还提示 Memory64 目前只在 classic 解释器与 AOT 模式可用、Legacy Exception handling 仅 classic 解释器可用组合开关时需注意执行模式的约束。七、进一步阅读完整的编译配置清单与组合示例build_wamr.mdLinux 平台默认值出处product-mini/platforms/linux/CMakeLists.txt引用类型提案细节ref_types.mdwasi-threads 与 lib-pthread 实现pthread_impls.md、pthread_library.mdWASM C APIwasm_c_api.mdfluent-bit Wasm 过滤插件构建plugins/filter_wasm/CMakeLists.txtfluent-bit 顶层 Wasm 选项CMakeLists.txt理解这份提案支持矩阵相当于拿到了 WAMR 能力的“配置总纲”默认启用项决定了你无需做任何事即可获得的基础 Wasm 能力Off-by-default 项决定了在引入 GC、线程、Memory64、异常处理等高级特性前需要付出的构建成本与执行模式约束而 Unimplemented 列表则划清了当前的能力边界避免在规划 Wasm 过滤器功能时踩空。llvm-jit 和 aot 模式下支持。↩仅解释器模式支持。一个 legacy 版本。该提案目前也被称为 legacy proposalWeb 端仍然支持但未来可能被废弃不鼓励使用。↩仅解释器模式支持。↩也可通过WAMR_BUILD_LIB_PTHREAD开启。↩指最新版本up-to-date version的异常处理提案区别于前文 table 2 中的 legacy 版本。↩【免费下载链接】fluent-bitFast and Lightweight Logs, Metrics and Traces processor for Linux, BSD, OSX and Windows项目地址: https://gitcode.com/GitHub_Trending/fl/fluent-bit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表