Performance #91
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Performance | |
| on: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: performance-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| ios-footprint: | |
| name: iOS incremental footprint | |
| runs-on: macos-15 | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: "17" | |
| - name: Set up Gradle | |
| uses: gradle/actions/setup-gradle@v6.3.0 | |
| - name: Link paired final binaries and enforce NFR-2 | |
| run: bash scripts/verify-ios-core-footprint.sh | |
| - name: Upload iOS footprint evidence | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ios-footprint-${{ github.run_id }} | |
| if-no-files-found: error | |
| path: | | |
| build/ios-footprint/report.json | |
| build/ios-footprint/baseline | |
| build/ios-footprint/core | |
| jvm: | |
| name: JVM performance gates | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: "17" | |
| - name: Set up Gradle | |
| uses: gradle/actions/setup-gradle@v6.3.0 | |
| - name: Prepare pinned Chasm and CoreMark fixture | |
| shell: bash | |
| run: | | |
| coremark_path="$(scripts/prepare-benchmark-upstreams.sh)" | |
| echo "KWASM_COREMARK_WASM=${coremark_path}" >> "$GITHUB_ENV" | |
| - name: Test gate and run JVM benchmark | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| ./gradlew --stacktrace \ | |
| :benchmarks:jvmExternalComparisonReport | |
| ./gradlew --stacktrace \ | |
| :benchmarks:performanceGateToolTest \ | |
| :benchmarks:jvmPerformanceGate \ | |
| -Pkwasm.benchmark.externalComparisons=benchmarks/build/performance/external-comparisons-jvm.json \ | |
| -Pkwasm.benchmark.enforceCheckpointOverhead=false | |
| - name: Upload JVM evidence | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: performance-jvm-${{ github.run_id }} | |
| if-no-files-found: warn | |
| path: | | |
| benchmarks/build/reports/benchmarks/main/**/jvm.json | |
| benchmarks/build/reports/benchmarks/externalComparison/**/jvm.json | |
| benchmarks/build/performance/current-jvm.json | |
| benchmarks/build/performance/external-current-jvm.json | |
| benchmarks/build/performance/external-comparisons-jvm.json | |
| benchmarks/build/performance/gate-jvm.json | |
| native: | |
| name: ${{ matrix.target }} performance gates | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 120 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - target: linuxX64 | |
| runner: ubuntu-24.04 | |
| - target: macosArm64 | |
| runner: macos-15 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: "17" | |
| - name: Set up Gradle | |
| uses: gradle/actions/setup-gradle@v6.3.0 | |
| - name: Prepare pinned Chasm and CoreMark fixture | |
| shell: bash | |
| run: | | |
| coremark_path="$(scripts/prepare-benchmark-upstreams.sh)" | |
| echo "KWASM_COREMARK_WASM=${coremark_path}" >> "$GITHUB_ENV" | |
| - name: Run Native benchmark and gate | |
| shell: bash | |
| env: | |
| KWASM_TARGET: ${{ matrix.target }} | |
| run: | | |
| set -euo pipefail | |
| ./gradlew --stacktrace \ | |
| ":benchmarks:${KWASM_TARGET}ExternalComparisonReport" | |
| ./gradlew --stacktrace \ | |
| ":benchmarks:${KWASM_TARGET}PerformanceGate" \ | |
| "-Pkwasm.benchmark.externalComparisons=benchmarks/build/performance/external-comparisons-${KWASM_TARGET}.json" \ | |
| -Pkwasm.benchmark.enforceCheckpointOverhead=false | |
| - name: Upload Native evidence | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: performance-${{ matrix.target }}-${{ github.run_id }} | |
| if-no-files-found: warn | |
| path: | | |
| benchmarks/build/reports/benchmarks/main/**/${{ matrix.target }}.json | |
| benchmarks/build/reports/benchmarks/externalComparison/**/${{ matrix.target }}.json | |
| benchmarks/build/performance/current-${{ matrix.target }}.json | |
| benchmarks/build/performance/external-current-${{ matrix.target }}.json | |
| benchmarks/build/performance/external-comparisons-${{ matrix.target }}.json | |
| benchmarks/build/performance/gate-${{ matrix.target }}.json | |
| compiled-reference: | |
| name: ${{ matrix.target }} Wasmtime compiled reference | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 120 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - target: jvm | |
| runner: ubuntu-24.04 | |
| - target: linuxX64 | |
| runner: ubuntu-24.04 | |
| - target: macosArm64 | |
| runner: macos-15 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: "17" | |
| - name: Set up Gradle | |
| uses: gradle/actions/setup-gradle@v6.3.0 | |
| - name: Prepare pinned fixtures and Wasmtime C runner | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| coremark_path="$(scripts/prepare-benchmark-upstreams.sh)" | |
| wasmtime_runner="$(scripts/prepare-wasmtime-reference.sh)" | |
| echo "KWASM_COREMARK_WASM=${coremark_path}" >> "$GITHUB_ENV" | |
| echo "KWASM_WASMTIME_REFERENCE_RUNNER=${wasmtime_runner}" >> "$GITHUB_ENV" | |
| - name: Run separate compiled-runtime reference | |
| shell: bash | |
| env: | |
| KWASM_TARGET: ${{ matrix.target }} | |
| run: | | |
| set -euo pipefail | |
| ./gradlew --stacktrace \ | |
| ":benchmarks:${KWASM_TARGET}CompiledReferenceReport" | |
| - name: Upload compiled-reference evidence | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: compiled-reference-${{ matrix.target }}-${{ github.run_id }} | |
| if-no-files-found: error | |
| path: | | |
| benchmarks/build/reports/benchmarks/compiledReference/**/${{ matrix.target }}.json | |
| benchmarks/build/performance/compiled-reference-kwasm-${{ matrix.target }}.json | |
| benchmarks/build/performance/compiled-reference-wasmtime-raw-${{ matrix.target }}.json | |
| benchmarks/build/performance/compiled-reference-${{ matrix.target }}.json | |
| native-image: | |
| name: GraalVM native-image smoke | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| - name: Set up GraalVM 21 | |
| uses: graalvm/setup-graalvm@v1 | |
| with: | |
| java-version: "21" | |
| distribution: graalvm | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| native-image-job-reports: "true" | |
| - name: Acknowledge experimental Native Image report option | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| config_file="${NATIVE_IMAGE_CONFIG_FILE:?setup-graalvm did not configure Native Image reports}" | |
| if ! grep -Fq -- '-H:BuildOutputJSONFile=' "$config_file"; then | |
| echo "setup-graalvm did not configure the Native Image build report" >&2 | |
| exit 1 | |
| fi | |
| sed -i \ | |
| 's|^NativeImageArgs = \(.*\)$|NativeImageArgs = -H:+UnlockExperimentalVMOptions \1 -H:-UnlockExperimentalVMOptions|' \ | |
| "$config_file" | |
| - name: Set up Gradle | |
| uses: gradle/actions/setup-gradle@v6.3.0 | |
| - name: Build application distribution | |
| run: ./gradlew --stacktrace :samples-cli:installDist | |
| - name: Compile and execute native image | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| mapfile -d '' jars < <( | |
| find wasm-cli/build/install/samples-cli/lib \ | |
| -type f \ | |
| -name '*.jar' \ | |
| -print0 | |
| ) | |
| if (( ${#jars[@]} == 0 )); then | |
| echo "samples-cli distribution contains no jars" >&2 | |
| exit 1 | |
| fi | |
| classpath="$(IFS=:; echo "${jars[*]}")" | |
| mkdir -p build/native-image | |
| native-image \ | |
| --no-fallback \ | |
| -cp "$classpath" \ | |
| io.heapy.kwasm.cli.SmokeTestKt \ | |
| build/native-image/kwasm-smoke | |
| build/native-image/kwasm-smoke | |
| - name: Upload native image | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: native-image-smoke-${{ github.run_id }} | |
| path: build/native-image/kwasm-smoke |