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  本地转换, 而是直接通过标
                 准软件管理工具即可快速获得针对特定设备精细优化的软件包.
   33   34   35   36   37   38   39   40   41   42   43