Skip to content

Commit 569c64a

Browse files
build: skip linux-arm in PGO profile generation (#53111)
The arm32 collection has never produced a usable profile. Its instrumented build links libclang_rt.profile.a explicitly with -noprofilelib (the clang package only ships the Linux arm32 runtime under the armv7 triple), which drops the driver's -u__llvm_profile_runtime. Nothing else references that symbol on Linux, so the runtime's initializer object is never pulled from the archive, LLVM_PROFILE_FILE is never read, and every process exits with "Failed to write file : Filename not set". The merge step then published a 560-byte .profdata for linux-arm, and the latest run hung for 330 minutes after the renderer crashed mid-collection. Drop the linux-arm build and collect jobs until the link is fixed. The linux-arm state file is left in place.
1 parent d13ae9f commit 569c64a

2 files changed

Lines changed: 10 additions & 37 deletions

File tree

‎.github/workflows/pgo-generation.yml‎

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -194,26 +194,6 @@ jobs:
194194
upload-to-storage: '0'
195195
secrets: inherit
196196

197-
build-linux-arm:
198-
permissions:
199-
contents: read
200-
issues: read
201-
pull-requests: read
202-
uses: ./.github/workflows/pipeline-segment-electron-build.yml
203-
needs: [checkout-linux, build-siso-linux]
204-
with:
205-
build-runs-on: electron-arc-centralus-linux-amd64-32core
206-
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
207-
target-platform: linux
208-
target-arch: arm
209-
is-release: false
210-
gn-build-type: pgo-instrument
211-
generate-symbols: false
212-
generate-chromedriver: false
213-
generate-test-artifacts: false
214-
upload-to-storage: '0'
215-
secrets: inherit
216-
217197
build-linux-arm64:
218198
permissions:
219199
contents: read
@@ -449,19 +429,10 @@ jobs:
449429
collect-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
450430
secrets: inherit
451431

452-
collect-linux-arm:
453-
permissions:
454-
contents: read
455-
uses: ./.github/workflows/pipeline-segment-pgo-collect.yml
456-
needs: [checkout-linux, build-linux-arm]
457-
with:
458-
target-platform: linux
459-
target-arch: arm
460-
artifact-key: linux_arm
461-
collect-runs-on: electron-arc-centralus-linux-arm64-4core
462-
collect-container: '{"image":"ghcr.io/electron/test:arm32v7-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init --memory=12g","volumes":["/home/runner/externals:/mnt/runner-externals"]}'
463-
secrets: inherit
464-
432+
# linux-arm (armv7l) is deliberately not in this set: its instrumented
433+
# build links the profile runtime without the -u__llvm_profile_runtime
434+
# hook, so the runtime never initializes and every run produced an
435+
# empty .profraw. The state file keeps the last published profile.
465436
collect-linux-arm64:
466437
permissions:
467438
contents: read
@@ -543,7 +514,7 @@ jobs:
543514
merge-profiles:
544515
name: Merge Profiles
545516
# checkout-linux provides the container image SHA and the src cache.
546-
needs: [checkout-linux, collect-linux-x64, collect-linux-arm, collect-linux-arm64, collect-macos-x64, collect-macos-arm64, collect-windows-x64, collect-windows-x86, collect-windows-arm64]
517+
needs: [checkout-linux, collect-linux-x64, collect-linux-arm64, collect-macos-x64, collect-macos-arm64, collect-windows-x64, collect-windows-x86, collect-windows-arm64]
547518
# Merge whatever was collected; repo guard because !cancelled() runs in forks.
548519
if: ${{ !cancelled() && github.repository == 'electron/electron' }}
549520
runs-on: electron-arc-centralus-linux-amd64-4core
@@ -635,7 +606,7 @@ jobs:
635606
# published: a partial profile set must never reach the CDN or the state
636607
# files. Skipped jobs (the skip-* inputs) are allowed - intentionally
637608
# regenerating a subset of platforms is fine; failures are not.
638-
needs: [collect-linux-x64, collect-linux-arm, collect-linux-arm64, collect-macos-x64, collect-macos-arm64, collect-windows-x64, collect-windows-x86, collect-windows-arm64, generate-v8-builtins-profiles, merge-profiles]
609+
needs: [collect-linux-x64, collect-linux-arm64, collect-macos-x64, collect-macos-arm64, collect-windows-x64, collect-windows-x86, collect-windows-arm64, generate-v8-builtins-profiles, merge-profiles]
639610
if: ${{ !cancelled() && github.repository == 'electron/electron' && needs.merge-profiles.result == 'success' && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && inputs.upload-to-storage }}
640611
runs-on: ubuntu-latest
641612
# Holds the Azure OIDC credentials; restricted to protected branches.
@@ -764,7 +735,7 @@ jobs:
764735
765736
# Aggregate gate so a single status reflects the whole run.
766737
pgo-done:
767-
needs: [collect-linux-x64, collect-linux-arm, collect-linux-arm64, collect-macos-x64, collect-macos-arm64, collect-windows-x64, collect-windows-x86, collect-windows-arm64, generate-v8-builtins-profiles, merge-profiles, upload-profiles]
738+
needs: [collect-linux-x64, collect-linux-arm64, collect-macos-x64, collect-macos-arm64, collect-windows-x64, collect-windows-x86, collect-windows-arm64, generate-v8-builtins-profiles, merge-profiles, upload-profiles]
768739
if: always() && !cancelled() && github.repository == 'electron/electron'
769740
runs-on: ubuntu-latest
770741
permissions: {}

‎script/pgo/README.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,12 @@ combo's instrumented build runs its own benchmarks:
141141
| Profile | Collection host |
142142
|---|---|
143143
| linux-x64 | x64 ARC runner (build container) |
144-
| linux-arm | arm64 ARC runner (arm32v7 test container) |
145144
| linux-arm64 | `ubuntu-22.04-arm` (arm64v8 test container) |
146145
| win-x64 | `windows-latest` |
147146
| win-x86 | `windows-latest` (WOW64) |
148147
| win-arm64 | `windows-11-arm` |
149148
| macos-x64 | `macos-15-large` |
150149
| macos-arm64 | `macos-15` |
150+
151+
linux-arm (armv7l) is skipped: its instrumented build never initializes the
152+
profile runtime, so collection only ever produced empty profiles.

0 commit comments

Comments
 (0)