跳至主要內容

如何在GitHub Actions上运行RISC-V工作流

2025年6月28日技术分享GitHub大约 2 分钟

如何在GitHub Actions上运行RISC-V工作流

GitHub Actions为托管于GitHub上的项目提供了多种持续集成运行环境,包括三种操作系统Linux、macOS和Windows,以及两种架构AMD64和ARM64。这些环境对于大部分项目来说完全足够,但是RISC-V开发者会发现自己很难在GitHub Actions上运行RISC-V工作流。商业公司可以使用自托管(参考Supporting runners on 64bit RISC-Vopen in new window)或者服务商(RISC-V Runnersopen in new windowCloud-Vopen in new window),但是对于个人开发者来说是一笔巨大的支出。

大救星QEMU

很容易想到的解决方法就是在GitHub Actions使用QEMU模拟RISC-V,然后在虚拟机内运行工作流。配置和启动QEMU并不简单,但是uraimo/run-on-arch-actionopen in new window可以帮助我们完成繁琐的QEMU操作。 我们以GoATopen in new window这个项目为例创建一个RISC-V工作流。GoATopen in new window项目将C语言编译为Go汇编代码,支持AMD64、ARM64和RISC-V三种架构,以下是RISC-V测试工作流:

name: test

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  riscv:
    name: ubuntu-24.04-riscv
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: uraimo/run-on-arch-action@v3
        with:
          arch: riscv64
          distro: ubuntu24.04
          githubToken: ${{ github.token }}
          dockerRunArgs: |
            --volume "${PWD}:/opt/goat"
          install: |
            apt-get update
            apt-get install -y clang golang
          run: |
            cd /opt/goat
            go run . tests/src/universal.c -o tests -march=rv64imafd
            go test -v ./tests

检出代码之后使用了uraimo/run-on-arch-actionopen in new window,每个参数说明如下:

  • arch代表架构,设置为riscv64
  • distro表示使用的Linux发行版,为Ubuntu 24.04
  • githubToken用于保存工作流缓存
  • dockerRunArgs将当前目录映射到虚拟机中
  • install安装依赖,安装好依赖的镜像会被保存到缓存中供下次使用
  • run对应测试命令

模拟的代价

在AMD64上模拟RISC-V是要付出代价的,对于逻辑复杂、计算量大的测试来说,QEMU开始力不从心。以下是Gorse推荐系统open in new window的部分单元测试在AMD64和QEMU模拟RISC-V中的用时对比:

测试AMD64RISC-V(QEMU)
common/ann.TestMNIST22.58s562.50s
common/ann.TestMovieLens25.96s91.42s
common/nn.TestNeuralNetwork1.22s12.10s
common/nn.TestIris8.98s139.29s
model/cf.TestBPR_MovieLens23.328s247.33s
model/cf.TestCCD_MovieLens8.73s102.63s
TestFactorizationMachines_Classification_Frappe29.13s176.41s

表中的测试均为计算密集型,QEMU模拟RISC-V的用时和AMD64下的用时有显著的差距,使用QEMU运行单元测试已经不合时宜。

总结

本文介绍了如何在GitHub Actions上运行RISC-V工作流,使用uraimo/run-on-arch-actionopen in new window可以轻松地在QEMU模拟的RISC-V环境中运行工作流。虽然QEMU模拟RISC-V的性能不如真实的硬件,但是对于大部分测试来说已经足够使用。对于个人开发者来说,使用QEMU模拟RISC-V是一个经济实惠的选择。