Page 38 - 《软件学报》2026年第6期
P. 38
屈晟 等: 面向 RISC-V 指令集多样性的兼容性感知多层级构建方法 2357
clang 和 lld 将新的 LLVM IR bitcode 文件转换为真正的动态链接库.
对于客户端设备而言, 由于计算资源受限且用户体验要求较高, RuyiBuild 部署了一个专门的后台服务进程, 以
实时监测设备的资源使用状况 (包括 CPU 负载、内存使用情况等), 如图 3 所示. APP 侧通过 glibc 关联配置文件,
以环境变量指定 IR 依赖库路径 (/var/lib/llvmir/lib), 为转换后的加速运行提供支持. 当系统资源出现紧张状态 (例
如 CPU 使用率超过 80%、内存使用超过 85%) 时, 后台服务进程自动向 LLVM IR 到 ELF 转换进程发送 SIGSTOP
信号, 立即暂停转换进程; 待系统资源恢复到正常范围 (如 CPU 使用率低于 40%、内存使用率低于 45%) 时, 后台
服务进程又会发送 SIGCONT 信号, 恢复转换进程执行. 此外, 为避免转换任务占用过多资源, 后台服务进程还通
过 Linux 的 cgroups 机制, 严格限制转换进程在特定 CPU 核心和内存配额内执行, 以确保客户端设备上的转换过
程友好而稳定, 不会干扰用户正常使用体验. 当客户端检测到设备资源紧张或需生成大规模多架构二进制文件时,
会通过轻量化调度接口向云端提交 IR 转换任务; 云端根据任务元信息自动选择最匹配的转换环境执行批量转换,
并将生成的 ELF 文件与优化参数摘要返回客户端缓存. 当网络不可用或用户需即时转换时, 客户端则可在本地以
受限资源模式独立执行任务.
在云端环境中, RuyiBuild 充分利用服务器丰富的计算资源与并行处理能力, 设计和实现了一套批量化的
LLVM IR 到 ELF 文件转换机制, 如图 4 所示. RuyiBuild 借助自动化脚本, 结合要支撑的架构和微架构列表, 先通
过 llvm-attribute-adjust 为不同指令集组合生成对应新的 LLVM IR 文件, 再经 clang+lld 并行执行转换任务, 批量生
成针对不同目标指令集扩展 (如 RV64GC、RV64GCV 等) 和微架构 (如 SiFive U74、香山 Kunminghu 等) 的优化
ELF 文件. 生成的文件进一步封装为对应架构的 RPM SPEC, 构建 RPM 包并接入 RPM repo, 不同用户可通过 dnf
工具调用各自文件. 这种批量并行机制, 依托云端流程实现多架构适配与高效转换, 极大提高了云端环境下的转换
效率, 满足大规模部署需求, 为跨架构软件分发提供了高效的二进制产物供给能力.
如图 4 所示, 与在客户端上类似, 可根据预设置要支持的 CPU 指令集信息和微架构名称, 生成一系列的模板
LLVM IR bitcode 文件; 然后使用 llvm-attribute-adjust 工具, 根据 IR RPM 文件中的文件和模板文件, 生成一系列的
临时 LLVM bitcode 文件; 将这些临时 LLVM bitcode 文件转换为适用于不同设备的真正的动态库文件并打包到不
同的 RPM 软件包中.
具体来说, 为进一步提升实际的软件分发效率, RuyiBuild 实现了一种专门面向 LLVM IR RPM 软件包的批量
转换与 RPM 仓库自动化构建机制. 这一机制的主要目标是将云端构建生成的所有包含 LLVM IR 文件的软件包
(即 llvmir.rpm) 批量转换成标准的常规 RPM 软件包 (即仅包含特定微架构优化后的 ELF 文件), 并自动构建 RPM
软件仓库, 以便终端用户直接通过 Linux 标准的软件管理工具 (如 dnf、yum) 进行安装.
具体实现过程如下: 首先, RuyiBuild 在云端服务器自动扫描指定目录下的所有以 llvmir.rpm 结尾的软件包,
并利用 RPM 工具自动批量解压 RPM 包, 提取出其中的 LLVM IR 文件及配套的辅助文件 (如_cmd 文件、版本脚
本等). 紧接着, RuyiBuild 自动调用 LLVM 编译工具链, 批量执行 LLVM IR 到 ELF 文件的转换操作. 转换过程基
于辅助文件中记录的原始编译和链接命令, 自动针对不同的目标指令集扩展和微架构进行精细的编译优化, 如附
录 A.4 所示.
完成批量转换后, RuyiBuild 进一步自动生成 RPM 软件包的规范文件 (SPEC 文件), 并调用 RPM 构建工具,
批量生成常规 ELF RPM 软件包. 这些 RPM 软件包的版本号和相关的 RPM 宏定义中自动包含了目标的微架构与
指令集信息, 以确保软件包的唯一性和明确性, 便于用户和管理员识别、安装和管理.
最后, RuyiBuild 工具链调用 RPM 仓库管理工具 (如 createrepo) 自动构建 RPM 仓库元数据, 在云端环境中形
成标准的 RPM 软件仓库. 用户或终端设备只需配置对应的 yum/dnf 软件仓库地址, 即可直接通过标准的软件管理
工具轻松安装这些预先优化好的 RPM 软件包, 如附录 A.5 所示.
上述批量 RPM 转换与仓库自动化构建机制的设计与实现, 极大地简化了终端用户的软件安装过程, 显著提高
了 RISC-V 架构生态中的软件部署和分发效率. 终端用户无需再进行复杂的 LLVM IR 本地转换, 而是直接通过标
准软件管理工具即可快速获得针对特定设备精细优化的软件包.

