Skip to content

test: Add SHA256 precompile tests#10910

Merged
rubo merged 2 commits into
masterfrom
test/sha256-precompile
Mar 21, 2026
Merged

test: Add SHA256 precompile tests#10910
rubo merged 2 commits into
masterfrom
test/sha256-precompile

Conversation

@rubo
Copy link
Copy Markdown
Contributor

@rubo rubo commented Mar 21, 2026

Changes

Added tests for the SHA256 precompile making sure it does what it's supposed to.

Types of changes

What types of changes does your code introduce?

  • Bugfix (a non-breaking change that fixes an issue)
  • New feature (a non-breaking change that adds functionality)
  • Breaking change (a change that causes existing functionality not to work as expected)
  • Optimization
  • Refactoring
  • Documentation update
  • Build-related changes
  • Other: Tests

Testing

Requires testing

  • Yes
  • No

If yes, did you write tests?

  • Yes
  • No

@rubo rubo merged commit 63e7dd0 into master Mar 21, 2026
561 of 564 checks passed
@rubo rubo deleted the test/sha256-precompile branch March 21, 2026 20:46
benaadams added a commit that referenced this pull request Mar 22, 2026
commit f3c2c6d08b1b838ca961b03fc3ba4839563b3576
Merge: 3b301ad3ae e1cc5d8e39
Author: Ben {chmark} Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 18:57:34 2026 +0000

    Merge branch 'master' into pgo-2

commit 3b301ad3aefe0e6cc8b9a2c6f31ce5421af9af89
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sun Mar 22 18:28:12 2026 +0000

    chore(pgo): update PGO profile

commit 158fa9837dece4eeafb96544e33cbc3fb54be965
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 17:52:47 2026 +0000

    fix(pgo): fail if CPU sampling pass fails — SPGO is not optional

commit 03721e6aab7dc79a586d1ccda02f6e7f3b1e6a0a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 17:39:48 2026 +0000

    chore(pgo): reduce artifact retention — profiles are committed to repo

commit 17efce17d06cce0f5a5df2b3c1489a5f49245021
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 17:38:02 2026 +0000

    fix(pgo): fail update if .jit.gz artifact is missing

commit 1113c64f50ce8846e0907bdb0e4273729685e667
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 17:37:02 2026 +0000

    fix(pgo): remove continue-on-error from EXPB step — fail fast if collection fails

commit ef66fb953d59595b54d4c1bdf121e301ba9a4033
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 17:36:05 2026 +0000

    fix(pgo): remove unnecessary if:always() from upload and extract steps

commit 661879eddebf8c0a00d83223a1acc08c31e2d317
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 17:32:21 2026 +0000

    fix(pgo): always exit if EXPB lock exists — use cleanup workflow to clear

commit 57a4f0b1f22dfde9633461c0ffc3a5e658221b8b
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 16:45:05 2026 +0000

    refactor(pgo): respect EXPB lock, clean only own resources

    - Replace aggressive startup cleanup (kill all containers, prune images,
      delete lock) with a lock-file age check: exit if lock is <1h old
      (another run is active), only remove if stale (>1h)
    - Pre-sampling cleanup now only removes this run's containers/volumes
      (filter by expb-executor-nethermind-pgo-collect), not everything
    - End-of-job cleanup only removes this run's resources (PGO_TAG images,
      expb-executor-nethermind-pgo containers/networks/volumes)
    - Never delete /tmp/expb.lock from the collect workflow — EXPB manages it
    - New manual workflow clean-expb-runner.yml for recovering from cancelled
      jobs: kills all EXPB containers, removes networks/volumes/overlays,
      deletes lock file, prunes images, cleans old output directories

commit f5b641bfa66d4fc6174cc42e64676b7161908062
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 16:18:50 2026 +0000

    refactor(pgo): move PGO Dockerfiles into tools/PgoTrim

    Reduces root directory noise. Dockerfile.pgo, Dockerfile.pgo-sampling,
    and Dockerfile.lttng-coreclr are only used by the PGO collection
    pipeline. The docker buildx context is still '.' (repo root) so COPY
    paths in the Dockerfiles work unchanged.

commit 435c128edda4ecd94680e795873a655daaf4c56b
Merge: 2dced5e638 cb643b819c
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 16:11:34 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 2dced5e6384bb8ee5f59cc10168bfabc02f82fb2
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 16:11:09 2026 +0000

    chore(pgo): remove debug scaffolding from Dockerfile and TraceConverter

    Dockerfile: remove PGO profile check (ls, cat Directory.Build.targets),
    verbose publish output (tee, grep filter, PublishReadyToRunShowWarnings).
    These were investigative aids that obscured build failures.

    TraceConverter: remove _eventMapping key dump, AllEvents per-event
    counter (fires millions of times on large traces), and second full-pass
    foreach counting raw ID 190 events. Verification via ByEventType
    is retained.

commit e1cc5d8e395d798e1cdc7cbe6e78729fc5077dda
Author: Ahmad Bitar <33181301+smartprogrammer93@users.noreply.github.com>
Date:   Sun Mar 22 15:41:54 2026 +0300

    fix(db): reuse ReadOptions in ColumnDbSnapshot to reduce GC pressure (#10894)

    * fix(db): reuse ReadOptions in ColumnDbSnapshot to eliminate GC finalizer pressure

    ColumnDbSnapshot previously created 14 ReadOptions per snapshot (2 per column
    × 7 columns). ReadOptions in RocksDbSharp has a finalizer but no IDisposable,
    so these objects survive Gen0, get promoted to Gen1/Gen2, and cause expensive
    GC pauses. In FlatState block processing, 2000+ snapshots per BDN round
    produce 28,000+ finalizable objects, causing Gen1 (9/round) and Gen2 (1-2/round)
    collections that create timing spikes.

    Fix: Create 2 shared ReadOptions (normal + cache-miss) per ColumnDbSnapshot
    and pass them to all RocksDbReader instances. Explicitly destroy the native
    handles via rocksdb_readoptions_destroy + GC.SuppressFinalize in Dispose().

    This reduces finalizable objects from 14 to 0 per snapshot scope.

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    * fix(db): replace Dictionary with array in ColumnDbSnapshot, share delegate

    ColumnDbSnapshot used Dictionary<T, IReadOnlyKeyValueStore> to map columns
    to readers, plus 7 separate Func<ReadOptions> closure allocations. Replace
    with a flat array indexed by enum ordinal and a single shared delegate.

    This eliminates per-snapshot: 1 Dictionary + backing array + 6 extra delegate
    allocations (from 7 down to 1 shared).

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    * fix(db): address review feedback on ColumnDbSnapshot

    - Replace Unsafe.As<T, int> with Convert.ToInt32 for safe enum-to-int
      conversion regardless of underlying type (critical: buffer overread)
    - Add _disposed guard to Dispose() to prevent double-free on native
      ReadOptions handles (critical: use-after-free)
    - Use volatile fields for _cachedColumnKeys/_cachedMaxOrdinal to ensure
      cross-thread visibility (moderate: data race)
    - Replace LINQ ToArray() with manual loop (minor: style)
    - Clarify comment on readOptionsFactory noting GetViewBetween still
      creates per-call ReadOptions (minor: documentation)

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    * apply suggestions

    * refactor a bit

    * fix: add dispose guard to GetColumn, fix field visibility, add regression tests

    Add ObjectDisposedException guard in ColumnDbSnapshot.GetColumn() to
    prevent use-after-free on destroyed native ReadOptions handles. Add
    explicit private modifier to RocksDbReader fields for style consistency.
    Add regression tests for idempotent double-dispose and post-dispose
    GetColumn behavior.

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    * fix: address review feedback on ColumnDbSnapshot

    - Use captured _rocksDbNative instead of Native.Instance in DestroyReadOptions for consistency with injectable native interop
    - Add bounds/null check in GetColumn to throw KeyNotFoundException (matching prior Dictionary behavior) instead of IndexOutOfRangeException/NRE
    - Replace boxing Convert.ToInt32(object) with Unsafe.As<T, int> in EnumToInt to avoid per-call allocation on the read path

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    * fix: use size-dispatched EnumToInt, avoid unconditional volatile write

    - Replace Unsafe.As<T, int> with size-dispatched helper that handles
      byte, short, and int-backed enums safely (JIT eliminates dead branches)
    - Move _cachedMaxOrdinal volatile write inside GetCachedMaxOrdinal so it
      only writes when not yet cached, avoiding unnecessary memory fence on
      every CreateSnapshot call

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    * fix: use Volatile.Read for _disposed in GetColumn

    Ensures cross-platform visibility of the dispose flag, matching
    the Interlocked.Exchange write in Dispose().

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    ---------

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    Co-authored-by: lukasz.rozmej <lukasz.rozmej@gmail.com>

commit e930aa474260aec6804470b69bc21afe5d3f149a
Author: Ksenchi <152424738+kseniaeremekno@users.noreply.github.com>
Date:   Sun Mar 22 12:22:41 2026 +0100

    fix: fix inverted dispose logic in BackgroundTaskScheduler (#10907)

    Update BackgroundTaskScheduler.cs

commit ff1321757de14e005764692f19d165048a141a04
Author: core-repository-dispatch-app[bot] <173070810+core-repository-dispatch-app[bot]@users.noreply.github.com>
Date:   Sun Mar 22 10:14:19 2026 +0100

    Update OP Superchain chains (#10913)

    Co-authored-by: emlautarom1 <emlautarom1@users.noreply.github.com>

commit d01e891f6d000b6b44edace1c8401618334f22b8
Author: core-repository-dispatch-app[bot] <173070810+core-repository-dispatch-app[bot]@users.noreply.github.com>
Date:   Sun Mar 22 10:14:03 2026 +0100

    Auto-update fast sync settings (#10914)

    Co-authored-by: rubo <rubo@users.noreply.github.com>

commit cb643b819ca9d640bc513e7aff7379b7dbf72bfd
Merge: dbf1576228 2749643801
Author: Ben {chmark} Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 08:03:04 2026 +0000

    Merge branch 'master' into pgo-2

commit dbf1576228389fca42dd50577306e7b90b287d72
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 08:00:31 2026 +0000

    fix(pgo): reduce COLLECTSEC to 580 — more margin before container stops

commit 35a01271b8d4ac08d676eb2e1528f6ba30d371ba
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sun Mar 22 07:42:36 2026 +0000

    chore(pgo): update PGO profile

commit b7233b557b5653c86ce276cb180843215fa32b59
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 07:12:01 2026 +0000

    fix(pgo): reduce COLLECTSEC to 600 — 720 outlasted container lifetime

    perfcollect was killed mid-zip-write (sampling.trace/ dir exists but
    no .zip). 10K blocks take ~13m24s; 720s collection + ~30s startup
    delay = finishes at exactly the container shutdown boundary.

    600s (10 min) gives ~3 min margin for zip write + container teardown.

commit da5a7bd76d591c36eeb6edd6cf798d5bdd63768d
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 06:58:18 2026 +0000

    fix(pgo): remove TC delay from main collection — Tier-1 gives richer .jit

    TC_CallCountingDelayMs=900000 halved the .jit file (34MB -> 16MB) because
    Tier-0 produces less edge/block profiling data. The TC delay is only
    needed for the sampling pass where perf map validity matters. The main
    EventPipe collection benefits from Tier-1 recompilation.

commit 6d860f10a48840c9583e84f231df9a98555a8b24
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 06:34:06 2026 +0000

    fix(pgo): remove unused COLLECTSEC from main collection, fix comments

    Main PGO image uses EventPipe not perfcollect — COLLECTSEC does nothing.
    Also fix stale comment referencing 420000 TC delay (now 900000).

commit a559735cfc1623a99f77577e7a78647a16f81972
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 06:33:07 2026 +0000

    fix(pgo): match main collection to sampling — TC_delay=15min, 10K blocks, 720s

    Apply the same settings that improved SPGO from 112 to 1020 methods:
    - DOTNET_TC_CallCountingDelayMs=900000 via extra_env
    - COLLECTSEC=720 for EventPipe tracing
    - amount=10000 blocks for broader coverage

commit 161a3771efa9f2b3d3fab2de647e46a15673ad66
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 06:29:28 2026 +0000

    fix(pgo): increase sampling window — TC_delay=15min, collect=12min

    Previous run with 420s delay / 300s collect yielded 926K attributed
    samples across 1020 methods (253 EVM) — 3x improvement over baseline.

    Increase further:
    - TC_CallCountingDelayMs=900000 (15 min) — full Tier-0 throughout
    - COLLECTSEC=720 (12 min) — 10K blocks at ~31 blk/s = ~320s, so
      12min covers all blocks with margin and more sampling time

commit f65a4b7bb1379bb867439d8a31e00cb996cd7d6d
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sun Mar 22 06:25:17 2026 +0000

    chore(pgo): update PGO profile

commit 28de12ad2f05e901239091bd926dfff12b2d099f
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 05:58:05 2026 +0000

    fix(pgo): reduce COLLECTSEC to 300 — must finish before container stops

    perfcollect needs to complete collection + post-processing before EXPB
    tears down the container. 10K blocks at ~31 blocks/s = ~320s, so 300s
    collection finishes with headroom for the zip write.

commit 2de827f800999996e4e2ae03178a5cd57191730a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 05:56:37 2026 +0000

    fix(pgo): use extra_env not environment, send 10K blocks for sampling

    EXPB uses 'extra_env' for container environment variables, not
    'environment'. Also increase amount from 5000 to 10000 blocks for
    the sampling pass to get more representative CPU sampling coverage.

commit 8777832a6f3819be19fb577595d539a448aa9e62
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 05:54:59 2026 +0000

    fix(pgo): drop payloads-15000 swap — file may not exist on runner

    The runner only has payloads-10000.jsonl. With 400s collection window
    all 10K blocks are covered (5K blocks take ~155s).

commit b4341d71e0c6b69d81d30da40e20b9937cd59842
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 05:53:25 2026 +0000

    fix(pgo): move TC_CallCountingDelayMs into sampling Dockerfile

    DOTNET_TC_CallCountingDelayMs=420000 belongs in the sampling image
    itself, not passed as EXPB environment.

commit af6f19fad29674b34e5b8080e106478a046c3563
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 05:52:41 2026 +0000

    fix(pgo): improve SPGO sampling — delay Tier-1, 15K blocks, 400s collection

    97% of CPU samples were falling outside managed code because Tier-1
    recompilation changes method addresses while perfcollect is sampling,
    invalidating the perf map. Only 3.3% of ~1.9M samples could be
    attributed to managed methods (down from 7.9% in previous profile).

    For the sampling pass only:
    - Set DOTNET_TC_CallCountingDelayMs=420000 (7 min) to keep methods at
      Tier-0 addresses throughout the entire perfcollect window
    - Increase perfcollect collection time from 120s to 400s via COLLECTSEC
      env var (Dockerfile.pgo-sampling now reads this)
    - Use 15000-block payloads file (3x default) for more representative
      CPU sampling coverage

    These changes only affect the CPU sampling container, not the main PGO
    collection container (which still uses default TC delay for realistic
    edge/block profiling).

commit 8e3e27dfc23294d598cdb634984b0e5e9f136afe
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sun Mar 22 05:17:12 2026 +0000

    chore(pgo): update PGO profile

commit c356dd36404f44e42d27857a54aa473e27f7a94c
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 05:01:14 2026 +0000

    fix(pgo): render sampling config from base — don't depend on RUNNER_TEMP

    The rendered config from the earlier step may be missing by the time
    the sampling step runs. Render directly from the base EXPB config
    file instead of reading from RUNNER_TEMP.

commit 48f9edf41a6bec70ed0183fd6a9846077c8e9690
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 04:48:15 2026 +0000

    fix(pgo): remove stale Docker volumes before EXPB runs

    EXPB creates named Docker volumes (e.g. expb-executor-*-pgo) with
    bind mounts into output directories. When old output directories are
    cleaned up, these volumes become dangling and cause "no such file or
    directory" mount failures on the next run.

    Add `docker volume rm` for expb-executor volumes in all three cleanup
    locations (start-of-job, pre-sampling, end-of-job).

    Also fix deprecated --keep-storage flag → --max-storage.

commit 6ce7946280eec9c54c6c96ae816e887a0cc0d934
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 04:24:43 2026 +0000

    fix(pgo): do full disk cleanup at start of job — out of disk causes infinite restart loop

    When disk is full, overlay mount fails (EBUSY), Nethermind crashes,
    Docker restarts it, loop forever. Must free disk BEFORE running EXPB.

    Moved image pruning, build cache cleanup, and old EXPB output removal
    to the start-of-job step. Also cleans EXPB outputs keeping only last 3.

commit d0f35b87bbb505a08f6cefb7226f2606d63a705f
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 04:11:16 2026 +0000

    fix(pgo): add timeout to docker rm in sampling cleanup — prevents hanging on stuck containers

commit 1336513971c055fa0375da6784054b4716cda1e6
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 04:07:58 2026 +0000

    fix(pgo): lazy unmount + rm overlay work dirs to fully clear stale mounts

commit 2a4c9977b1ea2d290086dced39a4e4cce97f99b2
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:50:10 2026 +0000

    fix(pgo): unmount stale overlay mounts at startup — overlay EBUSY blocks snapshot creation

commit 5cd2fcbb4d84a99299d405ad7f81a40608aa6458
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:49:34 2026 +0000

    fix(pgo): remove if:always() from processing steps — fail fast on errors

    Only cleanup and artifact upload steps should run always(). Processing
    steps (sampling, PgoTrim, dotnet-pgo build, conversion) should skip
    if earlier steps failed instead of running pointlessly.

commit 207cca44182facb49f6f5b0b395379c6e39611c3
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:37:18 2026 +0000

    feat(pgo): pre-build LTTng coreclr image — skip 10min rebuild every run

    Replace inline lttng-build stage with pre-built image
    nethermindeth/nethermind:lttng-coreclr-10.0.5. Only needs rebuilding
    when .NET version changes.

    Added Dockerfile.lttng-coreclr for the one-time build & push.

commit b45aef7309c608a157dfc564b9c002df5362c363
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:33:36 2026 +0000

    fix(pgo): keep 4G buildx cache to avoid rebuilding coreclr every run

commit e1ff56a5076ae241bb8e454d4e6301e3d05ab7ba
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:28:19 2026 +0000

    TEMPORARY: force kill all containers + remove lock to recover from stuck state

commit e7872054a523c83b7695c1228a25cfa7c7d3f807
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:26:00 2026 +0000

    fix(pgo): prevent container restart loops with sentinel file

    Write a .started sentinel on first run. If the container is restarted
    by Docker's unless-stopped policy, the sentinel exists and the
    entrypoint exits cleanly (code 0), breaking the restart loop.

commit 1a4191660f2ca007dcb9f041f8c7063e7a1d1d9f
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:20:31 2026 +0000

    fix(pgo): respect EXPB lock file — abort if another run is active (<1h), clean if stale

commit a71ef16e91d41dca92c89764b85098727e32cd4e
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:17:35 2026 +0000

    fix(pgo): kill ALL expb containers at start — Alloy/k6 hold network refs preventing removal

commit 208f1fb4b3cf68f6b456b255f954de40b60d771f
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 03:10:57 2026 +0000

    fix(pgo): move Docker cleanup to end of job, keep start minimal

    Start of job: only kill stale containers + networks (needed for run)
    End of job: full cleanup — containers, old images, build cache, lock

    This ensures no disk space is wasted between runs while not interfering
    with the current run's data or concurrent workflows.

commit 28afdf7f1a26b4b238b4ae17431bc9f4f393f506
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:57:32 2026 +0000

    fix(pgo): prune all buildx cache — old coreclr builds are wasting disk

commit 95d64b446ff37de4c68bcc374bc01d46b9b21130
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:55:53 2026 +0000

    fix(pgo): keep 10G buildx cache to preserve coreclr lttng-build layers

commit a3aa24096c5afde1c61868b02667c5acf5efb3dc
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:53:47 2026 +0000

    fix(pgo): also clean up old EXPB infra images (Alloy, k6) during disk cleanup

commit 888a577bf1fdb8830b1893dd9ef5823ec667383d
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:51:05 2026 +0000

    fix(pgo): clean up old Docker images to free disk space

    Remove stopped containers, old images (keeping current run's PGO tags
    and base images), dangling images, and build cache >5GB. Logs disk
    usage before/after cleanup.

commit d22bfcba6536396c617ee537a4ac6d3c7fc64cad
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:23:40 2026 +0000

    fix: don't swallow dotnet publish errors — tee to log file and check output exists

commit f409842fd62a71d60b8fa7895cd6f27b2e6b9302
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:21:35 2026 +0000

    debug: fix Directory.Build.targets path and broaden crossgen2 grep patterns

commit 28cf12aa45ee7ec789ca71875dccb0f5fae74cd0
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:17:14 2026 +0000

    fix: improve real-time Nethermind log tailing in benchmark workflow

    - Increase initial wait from 5s to 10s (EXPB needs time to create container)
    - Extend retry from 60 to 120 attempts (4 min window instead of 2)
    - Use precise container filters (name=expb-executor + ancestor=nethermind)
    - Use unbuffered sed (-u) so logs stream in real-time

commit 43b88612bf8b05774167df390797207a9c80c7d9
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 02:01:16 2026 +0000

    fix(evm): skip state-touching opcodes during warmup to prevent GDV pollution

    State-interacting opcodes (SLOAD, SSTORE, BALANCE, CALL variants,
    CREATE, LOG, etc.) during warmup use a different IWorldState type than
    real block processing. The JIT's Tier-0 GDV profiling records this
    warmup type, creating bimodal type histograms at virtual dispatch
    sites. This prevents the JIT from devirtualizing — instead of a direct
    call, it emits a type-check guard for both types, which is slower than
    no devirtualization at all.

    Skip these opcodes during warmup so GDV profiles only capture the
    production IWorldState type from real block execution.

commit 12dca67b15efe51fd63fecb715d7d200b9049482
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 01:57:45 2026 +0000

    fix(evm): use representative values in opcode warmup for better PGO profiling

    PushOne (value=1) caused Tier-0 PGO to profile degenerate branches:
    - DIV/MOD by 1 → trivial fast-path
    - MULMOD/ADDMOD with modulus 1 → zero result
    - EXP with base 1 → identity
    - SHL/SHR by 1 → minimal shift

    Use multi-word UInt256 values that exercise common arithmetic paths:
    - Large dividend / small (>1) divisor → full multi-word division
    - Modulus larger than result → normal remainder path
    - Different values → no equality fast-paths

    This gives crossgen2 and the JIT better branch prediction data from
    the Tier-0 instrumentation that runs during warmup.

commit 424240d51d02f6535672e85b334d5a3edab4bfc3
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 01:45:45 2026 +0000

    fix(pgo): increase TC_CallCountingDelayMs from 0 to 30ms

    0ms causes a recompilation storm at startup — every method gets
    call-counting stubs immediately, triggering massive Tier-1
    recompilation while blocks are being processed. 30ms lets R2R
    handle initial execution, then Tier-1 kicks in with PGO data.
    May explain the benchmark regression.

commit 089e9a6df3ce6898ffd2411da5612aa028fb48ba
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 01:38:36 2026 +0000

    Add the pgo files to output

commit 7453b7f87d6cd9fa8d8ba0034d97a1fe0938d050
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 01:36:34 2026 +0000

    debug: fix PGO diagnostic path and add verbose publish to grep for mibc/crossgen2 usage

commit 68373010be052720c0e51f2ff059692ed68bdc50
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sun Mar 22 01:08:06 2026 +0000

    chore(pgo): update PGO profile

commit 643911c83879bb79b28965f8d51216d7f7ad9d68
Merge: 34353cd1e9 b3f0ef9ac7
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 00:44:54 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit b3f0ef9ac7b6db524a2005191dcb06b96712a1a8
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sun Mar 22 00:43:15 2026 +0000

    chore(pgo): update PGO profile

commit 34353cd1e968e7f2e3dacbc513a2b98e113105a7
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 00:42:08 2026 +0000

    fix(pgo): revert to 120s — 150s collection + 30s zip exceeds container lifetime

commit 0565c4cc2d79bfc070d3f6671bf0f1e6fc4920a0
Merge: e6c56b93a9 861032e818
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 00:20:26 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit e6c56b93a94b5d861611baf62b2c90b6be50366a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 00:13:05 2026 +0000

    fix(pgo): try 150s collection at 1000Hz — frequency was the crash cause, not duration

commit 1d2528d6341169ff118f366333964bb342025520
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Mar 22 00:11:46 2026 +0000

    fix(pgo): revert to 120s/1000Hz — 4000Hz causes perfcollect to crash instantly

commit 861032e8186a42de37a730b656afd2155a048c8a
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 23:52:42 2026 +0000

    chore(pgo): update PGO profile

commit 17184b81d3a3280d558b4bb759a6169492d45351
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 23:22:13 2026 +0000

    chore(pgo): update PGO profile

commit 27496438013f51b3bd4b2f22de845c58eedeabff
Author: Copilot <198982749+Copilot@users.noreply.github.com>
Date:   Sun Mar 22 01:57:23 2026 +0300

    Fix ArgumentException in SnapshotRepository.GetSnapshotBeforeStateId for negative BlockNumber (#10882)

    * Initial plan

    * Fix ArgumentException in SnapshotRepository.GetSnapshotBeforeStateId when BlockNumber is negative

    Guard against negative BlockNumber values in GetSnapshotBeforeStateId to prevent
    SortedSet.GetViewBetween from throwing when called with lowerValue > upperValue.
    This happens during genesis loading when FlushCache is called and the persisted
    state is PreGenesis (BlockNumber=-1) or Sync (BlockNumber=long.MinValue).

    Co-authored-by: smartprogrammer93 <33181301+smartprogrammer93@users.noreply.github.com>

    * Address review feedback: use ArrayPoolList.Empty() and guard FlushCache against negative BlockNumber

    - Use ArrayPoolList<StateId>.Empty() instead of new ArrayPoolList<StateId>(0)
    - Add early return in FlushCache when persistedState.BlockNumber < 0, matching
      the existing guard pattern in PersistIfNeeded

    Co-authored-by: smartprogrammer93 <33181301+smartprogrammer93@users.noreply.github.com>

    ---------

    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: smartprogrammer93 <33181301+smartprogrammer93@users.noreply.github.com>

commit b2bb33da35a1ccb7d251bb04564d60d1f4c7c0fd
Author: Copilot <198982749+Copilot@users.noreply.github.com>
Date:   Sun Mar 22 01:56:56 2026 +0300

    Fix flaky test: replace polling with signal-based loop in BecomesNewHead (#10884)

    * Initial plan

    * Fix flaky test: replace After(1000, 100) polling with signal-based loop in BecomesNewHead

    The BecomesNewHead() method used _resetEvent.WaitOne() followed by
    Assert.That(...).After(1000, 100) polling. The AutoResetEvent could
    consume a stale or unrelated NewHeadBlock signal, leaving only 1 second
    of polling — insufficient on slow CI machines.

    Replace with a deadline-based loop that re-waits on the event until the
    expected block becomes the head or the full ProcessingWait (10s) expires.
    This is signal-based, handles stale signals correctly, and uses the full
    timeout budget.

    Co-authored-by: smartprogrammer93 <33181301+smartprogrammer93@users.noreply.github.com>

    ---------

    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: smartprogrammer93 <33181301+smartprogrammer93@users.noreply.github.com>

commit 7b0be729fc3052188544d00df779ae4febadcdfd
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 22:52:53 2026 +0000

    fix(pgo): increase perf sampling frequency from 1000 Hz to 4000 Hz for 4x more samples

commit f016780df8bd05f102b4446701227597c13ddaae
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 22:50:35 2026 +0000

    fix(pgo): lower --spgo-min-samples to 20 for broader method coverage

commit 359c976a0d333a171b91e9f35eefb2331162307c
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 22:47:05 2026 +0000

    fix(pgo): increase perfcollect to 150s — captures full block processing with margin for post-processing

commit b2d6d32796bce82a1752ec7e380d91d9bc69bfef
Merge: 11bff70db2 b905c789fb
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 22:45:29 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 11bff70db2365ae364fb567b44053d938bcaf269
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 22:38:57 2026 +0000

    fix(pgo): revert to 120s sampling — 240s exceeded container lifetime

commit b905c789fbf2a391b846aea4d917184d9731db3f
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 22:34:57 2026 +0000

    chore(pgo): update PGO profile

commit e1b4f82b34cf5ec686e6b9f2948a6e4ab8ea1cd3
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 22:11:38 2026 +0000

    fix(pgo): increase perfcollect sampling duration from 120s to 240s for more SPGO coverage

commit e1fd5a4a21bd3f39b75c7aa3924a7414dcdfe3ce
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 22:08:11 2026 +0000

    debug: add PGO diagnostic output and PublishReadyToRunShowWarnings to Docker build

commit 541b89746b77205007b06df87b55c1b0f509da3c
Merge: aa727048be 5d062f5d90
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 21:46:06 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 5d062f5d905c28870adb1123f85e0693f64f7955
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 21:45:21 2026 +0000

    chore(pgo): update PGO profile

commit aa727048be179388adaea5daa700dd840c18d3df
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 21:37:59 2026 +0000

    whitespace

commit dfc55c4b508670df7b39a0183c89c5cb120f1d6b
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 21:21:16 2026 +0000

    fix(pgo): catch FlowSmoothing crash so SPGO doesn't lose all 143K samples

    FlowSmoothing.MakeGraphFeasible throws "Stack empty" for methods with
    disconnected flow graph nodes. Without a try-catch, one bad method
    crashes the entire SPGO pass and 143K attributed samples are lost.
    Wrap SmoothFlow in try-catch to skip broken methods and keep the rest.

commit 9f0b13db0d75d3590438903f1c7589dfb2b13763
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 21:20:09 2026 +0000

    chore(pgo): update PGO profile

commit 8789a38d8842bc82150c20a567d7356cb65b3888
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 20:54:34 2026 +0000

    done

commit 63e7dd071e60f69922b8b4aa83fdebd268a7fa2e
Author: Ruben Buniatyan <rubo@users.noreply.github.com>
Date:   Sat Mar 21 21:46:40 2026 +0100

    test: Add `SHA256` precompile tests (#10910)

commit 2be0d9bf3fd54a620271a0127d5609df0c09e8d8
Author: Ruben Buniatyan <rubo@users.noreply.github.com>
Date:   Sat Mar 21 21:46:28 2026 +0100

    test: Add `BLAKE2F` precompile tests (#10909)

commit e9232ab960171d7db8224d89a08b731120fc501a
Author: Lukasz Rozmej <lukasz.rozmej@gmail.com>
Date:   Sat Mar 21 21:37:22 2026 +0100

    fix(test): eliminate flakiness in BlockchainProcessorTests (#10905)

    Two root causes:

    1. Block fields were static, shared across parallel test instances
       ([Parallelizable(ParallelScope.All)] + InstancePerTestCase).
       RecoverData mutates Header.Author on these shared objects, so one
       test's recovery could alter another test's timing non-deterministically.
       Fix: make block fields instance-scoped.

    2. Mock Monitor.Wait used the same 10s timeout (ProcessingWait) as the
       test assertion WaitOne. If a pulse arrived in the brief window between
       re-acquiring the lock and the next Monitor.Wait, the mock would sit
       idle for the full 10s before re-checking — eating the entire assertion
       budget. Fix: introduce MockRecheckInterval (200ms) for the mock loops.

    Removed [Retry(3)] from the three tests that had it.

    Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

commit 3493901f5a3760db2e0cbc20f6c7c4d8bdf4a88f
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 20:36:57 2026 +0000

    Undo unrelated change

commit 82e1bb29cc4db94b961b39d01538c5ce23e3816d
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 20:25:35 2026 +0000

    fix(pgo): pass KeepAllEvents=true to preserve ILToNativeMap in .etlx

    CopyRawEvents drops events with ThreadID=0 when KeepAllEvents is false.
    LTTng CLR events (including MethodILToNativeMap_V1) have ThreadID=0 from
    the CTF context. Without KeepAllEvents, 41,669 ILToNativeMap events were
    dispatched by the CTF source but silently dropped during .etlx serialization.

    Also fix V1 mapping to use version=0 so template lookup matches.

    Tested locally: 41,669 ILToNativeMap events now in .etlx, all 379,936
    CTF events preserved.

commit 5a86c1f731ea14f6a5e3c88148ccefaf056b5a5c
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 20:14:59 2026 +0000

    fix(pgo): move debug print inside using block — variable scope error

commit 666ee6f434843453c2911ecf9e3fd6bb80ae3ccd
Merge: 229c5c0ee9 29d8c27238
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 19:52:40 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 229c5c0ee9b7c30e72271838182aecce711ba295
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 19:50:35 2026 +0000

    debug(pgo): add CTF event dispatch counting and remove LTTngConfig for diagnostics

commit c117eef59e71c547534b1b5069c3ecd334ae8ff6
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 19:43:55 2026 +0000

    fix(pgo): remove DOTNET_LTTngConfig — use ActivateAllKeywordsOfAllProviders to diagnose missing ILToNativeMap

commit 29d8c27238fbc3e0353c6882591f679b3b11066f
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 19:37:10 2026 +0000

    chore(pgo): update PGO profile

commit 0828e46d39eb53d0a93d82064c1987b815279d09
Merge: 9a95c6ea86 4b8c587f4e
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 19:14:00 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 9a95c6ea86ca2dce82082caa947a09adf490f9c1
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 19:12:48 2026 +0000

    fix(pgo): enable MethodILToNativeMap_V1 — runtime fires V1, not V0

    The runtime calls FireEtXplatMethodILToNativeMap_V1 which checks
    tracepoint_enabled(DotNETRuntime, MethodILToNativeMap_V1). But
    perfcollect only enables MethodILToNativeMap (v0) and TraceEvent's
    CTF mapping only has v0. Without the V1 tracepoint enabled, the
    EventXplatEnabled check returns false and the event is never fired.

    This explains "153K samples in managed code without native<->IL
    mappings" and "0 samples attributed".

    Fixes:
    - Add MethodILToNativeMap_V1 to perfcollect patch
    - Add V1 CTF mapping to PgoTrim's injection
    - Updated PerfView PR with V1 mapping

commit 4b8c587f4e121ed8de3ab0e4bf98cdee5062ffb0
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 19:10:23 2026 +0000

    chore(pgo): update PGO profile

commit 22c61a22add34fad933e73286d07553f939489dd
Merge: 853d6e354e 9461523be1
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 18:47:15 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 853d6e354e249bd1876975dbcbe9ccd29a2f8a20
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 18:46:33 2026 +0000

    fix(pgo): add CompilationDiagnostic keyword and ILToNativeMap diagnostics

    MethodILToNativeMap events (0 in trace) may need CompilationDiagnostic
    (0x2000000000) keyword in addition to JittedMethodILToNativeMapKeyword
    (0x20000). Updated keyword to 0x60000A0018 matching dotnet-pgo README.

    Also added ILToNativeMap count to PgoTrim convert-trace output for
    debugging.

commit 9461523be1044fae5bcf15006a20f0bffbb5c3d0
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 18:39:07 2026 +0000

    chore(pgo): update PGO profile

commit f52db2620fd929844c83f82ed52835ce0e1b0a43
Merge: f349088496 a54e733923
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 18:16:24 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit f3490884968b249693ce564cf697f59c38949dab
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 18:15:42 2026 +0000

    fix(pgo): add JittedMethodILToNativeMap keyword for SPGO block attribution

    SPGO samples were loaded (1.9M) but 0 attributed because the IL-to-native
    offset maps were missing. Keyword 0x20000 (JittedMethodILToNativeMap)
    wasn't in DOTNET_LTTngConfig or perfcollect's default events.

    Updated: 0x4000080018 → 0x40000A0018 (adds 0x20000)
    Added: JittedMethodILToNativeMapKeyword to perfcollect defaults

commit a54e73392340a82a643e92340283b1a6d78eddfb
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 18:12:59 2026 +0000

    chore(pgo): update PGO profile

commit 0a6f84bf24401262d8805db32497827d63eae357
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 17:37:58 2026 +0000

    feat(pgo): add SPGO perf sample extraction and dotnet-pgo injection

    PgoTrim extract-spgo: parses perf.data.txt from .trace.zip and writes
    a .spgo file (one hex IP per line) alongside the .etlx.

    dotnet-pgo patch: reads the .spgo file via Path.ChangeExtension and
    feeds IPs to SampleCorrelator.AttributeSamplesToIP() for real SPGO
    block count attribution.

    Tested locally: 1,918,464 samples extracted from perfcollect trace.

commit d629b1288e52a3b9f6752854a419c32dfb30c8e3
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 15:51:30 2026 +0000

    chore(pgo): update PGO profile

commit a038c07bb319761f87f03d445944dee774c16590
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 15:12:02 2026 +0000

    fix(pgo): remove --no-build from PgoTrim — no prior build step exists

commit a2858a1e2c2e708c7887cb05ab6f01b3c71131f9
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 14:42:11 2026 +0000

    fix(pgo): add Dia2Lib and TraceReloggerLib compile refs for PerfView build

    TraceEvent source references Windows COM types (IDiaDataSource3,
    TraceReloggerLib) from Dia2Lib.dll and TraceReloggerLib.dll. These
    ship in the TraceEvent NuGet package. Copy them from the NuGet cache
    as compile-time references so the project builds on Linux.

commit 78743d14845fcf93c814770e391f7fbbb9121d4f
Author: Aayush Giri <101140354+Giri-Aayush@users.noreply.github.com>
Date:   Sat Mar 21 19:00:58 2026 +0530

    docs: overhaul README structure and content (#10856)

commit ddceeba271dd7c438687856c2c73eedc4d482456
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 10:51:07 2026 +0000

    feat(pgo): build dotnet-pgo with PerfView PR branch for full SPGO support

    Build TraceEvent from our PerfView PR (fix/add-methoddetails-ctf-mapping)
    as a project reference in dotnet-pgo. This gives dotnet-pgo the
    MethodDetails CTF mapping AND the full CreateFromLttngTextDataFile path
    which processes both LTTng CLR events and perf CPU samples from
    .trace.zip — enabling real SPGO with attributed CPU samples.

    Removes PgoTrim trace conversion (no longer needed) and the
    OpenOrConvert .etlx patch. PgoTrim still handles .jit compression.

commit a139d9e4518352889bc4b84c1405351d0af98bc1
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 10:46:22 2026 +0000

    chore(pgo): update PGO profile

commit b879a95be0867057f96dbc2e4217a1e75464d3a3
Merge: 7ef543af30 57a4139a4e
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 10:23:42 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 7ef543af30d1f7ba15616d30925a05690403808a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 10:23:02 2026 +0000

    fix(pgo): override dotnet-pgo TraceEvent to 3.1.30 to match PgoTrim

    The error "App is version 74, file format accepts >= 76" means
    dotnet-pgo's TraceEvent is older than expected (version 74 = pre-3.1.28).
    The runtime build system may resolve a different TraceEvent from an
    internal feed. Force 3.1.30 to match PgoTrim's .etlx format.

commit 0f3991230dc9ee60ea8b4ee7ce367bcd9737efaa
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 10:19:56 2026 +0000

    fix(pgo): add debug output for dotnet-pgo TraceEvent version and .etlx file version

commit 57a4139a4e6eea12e2d16caf367d412138d97bd5
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 10:17:29 2026 +0000

    chore(pgo): update PGO profile

commit 7cbf976e67974fbd0f9f9651a93a08737901e95a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:54:07 2026 +0000

    fix(pgo): log TraceEvent assembly version in PgoTrim for debugging

commit 1414f59dd575a18c789b309452fbce54e5c09586
Merge: 41e9ecf49b 7e6f8c9f0a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:50:59 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 41e9ecf49b61d5ccd0a44b7d2f08521a76ea9a14
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:42:21 2026 +0000

    fix(pgo): clear NuGet caches and stale sources before PgoTrim restore

    Previous runs may have added a local-traceevent NuGet source pointing
    to a stale/old TraceEvent package. Clear all NuGet locals and remove
    the source. Add verbose restore to show which TraceEvent version is
    actually resolved.

commit 7e6f8c9f0aff3d8951962345978ce4fb6b8c4785
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 09:39:23 2026 +0000

    chore(pgo): update PGO profile

commit 55c34da731cbf19610eee5dc8b9732caedf7b11f
Merge: 41fae7ebc7 fba6865b9d
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:17:01 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 41fae7ebc73458a6c08eb3270e31605b198afbc2
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:15:15 2026 +0000

    fix(pgo): use dotnet restore --force + build --no-incremental for PgoTrim

commit 7df050a464519e92520da78221c532a49ec14452
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:11:42 2026 +0000

    fix(pgo): consolidate all PgoTrim work into one step before dotnet-pgo

    Move both trace conversion and .jit compression into the "Process
    traces with PgoTrim" step. Build PgoTrim once with --force, then
    run both subcommands with --no-build. Update artifact upload to
    reference steps.pgotrim.outputs.jit_gz.

commit f84ee642b1720ca0642478d5292a8e55de4a43c7
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:09:26 2026 +0000

    fix(pgo): move PgoTrim convert-trace to its own step before dotnet-pgo build

    Running PgoTrim in a separate step ensures it builds fresh with
    TraceEvent 3.1.30 before the dotnet-pgo build step caches anything.
    Also makes the pipeline clearer — convert trace, build dotnet-pgo,
    then use both outputs.

commit e15b6cb40972a88fd076029fdc7f551fd8be1074
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 09:07:44 2026 +0000

    fix(pgo): force rebuild PgoTrim to pick up TraceEvent 3.1.30 on cached runner

commit fba6865b9d315f2797d0a60de7dcbf87cb17c80e
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 09:06:15 2026 +0000

    chore(pgo): update PGO profile

commit e4678000a35552119b496683312506db7ced0152
Merge: 79fb6b4661 a2ad970086
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 08:44:04 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 79fb6b4661d933eadda87111d9eed1fe8aafe6b6
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 08:43:28 2026 +0000

    fix(pgo): upgrade TraceEvent to 3.1.30 — .etlx format version 74 vs 76 mismatch

commit a2ad970086449b440001ad6fddc118b3047773d5
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 08:41:45 2026 +0000

    chore(pgo): update PGO profile

commit 22a9187a52689921cd711151e28c0ec476956aa3
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 08:14:58 2026 +0000

    fix(pgo): add AssemblyLoad to perfcollect's LoaderKeyword array

    perfcollect has a duplicate DotNETRuntime_LoaderKeyword declaration —
    the second overwrites the first, losing AssemblyLoad/AssemblyUnload.
    dotnet-pgo needs AssemblyLoadUnloadTraceData to find the CLR instance.

commit d00a6dc3065b5d33df7cd9c23a8fcdc7daf88d08
Merge: 0d341d3cba 2b137b0cb6
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 08:05:40 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 0d341d3cba401c0e604376fdf5527f3b224e9b0a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 08:05:09 2026 +0000

    fix(pgo): patch dotnet-pgo to use TraceLog() directly for .etlx input

    OpenOrConvert falls back to looking for .etl when new TraceLog() fails
    on standalone .etlx files. Patch dotnet-pgo source to bypass
    OpenOrConvert and use TraceLog constructor directly for .etlx input.

commit 2b137b0cb6a683df20b0fbe187552363dc8d86a0
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 08:01:42 2026 +0000

    chore(pgo): update PGO profile

commit bfa5b473a49191fe73e92f0867d3ff1796ae4178
Merge: 7e78e43572 6ab8a0c38e
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 07:39:11 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 7e78e435725ad93df5a27bd574fa0878f1366d97
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 07:38:19 2026 +0000

    fix(pgo): add TypeKeyword to perfcollect defaults, add debug output for .etlx path

    Enable BulkType events by adding TypeKeyword to perfcollect's default
    event set. Add logging to diagnose the .etlx OpenOrConvert failure.

commit faa324d16d73b3e81162ec7b19dda03bb825a90e
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 07:36:05 2026 +0000

    fix(pgo): enable TypeKeyword in perfcollect defaults for BulkType events

    perfcollect's default event set doesn't include DotNETRuntime_TypeKeyword,
    so BulkType events are never captured. dotnet-pgo requires BulkType for
    type handle resolution. Patch perfcollect to add TypeKeyword to defaults.

    Also fix PgoTrim verification to use OpenOrConvert with KeepAllEvents
    (same path as dotnet-pgo), and remove the PerfView source build from
    the workflow since PgoTrim handles the CTF mapping workaround.

commit 6ab8a0c38e1421716b69293765415ade10cbacf7
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 07:28:28 2026 +0000

    chore(pgo): update PGO profile

commit d6462040a6cadf5171fc48cf37e029678b86e34a
Merge: 5154261a4e 751a9d0dd8
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 07:06:04 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 5154261a4ea61475f58808d5ca4b6473886d06b0
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 07:02:03 2026 +0000

    feat(pgo): add PgoTrim convert-trace to inject MethodDetails CTF mapping

    PgoTrim now has a convert-trace subcommand that opens a perfcollect
    .trace.zip, injects the missing DotNETRuntime:MethodDetails CTF mapping
    via reflection into CtfTraceEventSource, and writes a .etlx that
    dotnet-pgo can read. This replaces the PerfView source build approach.

    Also restore DOTNET_LTTngConfig=0x4000080018:5 to ensure the runtime
    fires MethodDetails and BulkType events.

    Tested locally: 103,404 MethodDetails events extracted from trace.

commit a5449c2b07d016045912ac2137dfd25da4f93b45
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 06:52:00 2026 +0000

    fix(pgo): use python regex to strip SupportFiles — sed broke XML structure

commit 751a9d0dd8b2af857cf12429757c41293e807a8b
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 06:49:20 2026 +0000

    chore(pgo): update PGO profile

commit 9c94490a8aa8798b39fbf3b103fb41cb66d3a248
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 06:25:55 2026 +0000

    fix(pgo): correct CtfEventMapping args — (opcode, id, version) not (eventId, taskId, version)

commit 7d74df59caaea816b97655d5ae1da472adaf8eb1
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 06:24:36 2026 +0000

    fix(pgo): strip SupportFiles dependency from TraceEvent build

    SupportFiles 1.0.30 is on a private NuGet feed. The package contains
    Windows-only native DLLs (KernelTraceControl, msdia140) not needed
    for Linux CTF trace parsing. Remove the dependency and its file
    references so TraceEvent builds from source on the CI runner.

commit 1adf4db0534cf3b3cec036f1ee88ccc688d135b1
Merge: d567d8c70d 69e0fc023f
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 06:00:32 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit d567d8c70df3f2615d109732ab229704a6559f7a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 05:59:50 2026 +0000

    fix(pgo): build patched TraceEvent as version 3.1.28 to match dotnet-pgo pin

commit b8d009a800316f502476fdd7b8cd1eadd9c8902c
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 05:58:22 2026 +0000

    fix(pgo): build TraceEvent from source with MethodDetails CTF mapping

    TraceEvent's ClrTraceEventParser.EnumerateCtfEventMappings() is missing
    DotNETRuntime:MethodDetails (event ID 72), causing CtfTraceEventSource
    to skip these events when parsing perfcollect .trace.zip files.

    Clone PerfView, add the one missing yield return line, build the
    TraceEvent NuGet, and point dotnet-pgo's build to it.

commit 69e0fc023f8764b4537d210fa4b5787ddb70aa84
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 05:42:21 2026 +0000

    chore(pgo): update PGO profile

commit 3bf82c87bb776d99669dbdf7ce728068e38d0971
Merge: 8de45b33c9 7adbdff787
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 05:19:07 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 8de45b33c9a745d861b14fec0b2c683dc6989a91
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 05:16:54 2026 +0000

    fix(pgo): remove DOTNET_LTTngConfig — let runtime activate all keywords

    Without DOTNET_LTTngConfig, the runtime calls
    ActivateAllKeywordsOfAllProviders() which enables ALL keywords including
    MethodDiagnostic. The explicit config was potentially restricting events.

commit 7adbdff787f11a9af3d2e9df53f898e570bb70a8
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 05:12:28 2026 +0000

    chore(pgo): update PGO profile

commit 42067aa1fd37b20beac3a054c2e07a50c5ffeb2f
Merge: 7b3f3368c7 64652f99dc
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 04:52:00 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 64652f99dc7c94e0df21e3836d7c532da22e478e
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 04:50:29 2026 +0000

    chore(pgo): update PGO profile

commit 7b3f3368c7578406b5c30a765ca7ab54cbafdf2c
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 04:43:44 2026 +0000

    fix(pgo): patch perfcollect to add MethodDetails tracepoint

    Simpler than the runtime wildcard hack — just sed the downloaded
    perfcollect script to add DotNETRuntime:MethodDetails to the
    JitKeyword tracepoint list. Removes the fragile lttng session
    discovery + wildcard enable from the entrypoint.

commit 486e4bb2ffcebf09831f96b2bcdf76e783978212
Merge: e511856a46 0340e382d1
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 04:30:08 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit e511856a46d5fc65580d7e41806ff56fbae78afc
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 04:28:22 2026 +0000

    fix(pgo): enable all DotNETRuntime LTTng tracepoints including MethodDetails

    perfcollect's hardcoded tracepoint list predates MethodDetails (added
    with MethodDiagnostic keyword 0x4000000000). After perfcollect creates
    the LTTng session, enable 'DotNETRuntime:*' wildcard to capture all
    CLR events including MethodDetails that dotnet-pgo needs for SPGO.

commit 0340e382d1176f7187382372c87d728d418262b1
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 04:24:04 2026 +0000

    chore(pgo): update PGO profile

commit 789c98802c41c484fd163680ebc41c6cd220c720
Merge: ae06985af9 abf03a5ec7
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 04:00:50 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit ae06985af90a017db6af8d60cbc94d5fb7bba12a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 03:57:22 2026 +0000

    fix(pgo): set DOTNET_LTTngConfig for MethodDiagnostic keyword

    dotnet-pgo needs keyword 0x4000080018 (MethodDiagnostic + JitTracing +
    Loader + Type) at verbose level 5. perfcollect's default LTTng profile
    doesn't include MethodDiagnostic (0x4000000000), causing "No
    MethodDetails" error.

commit abf03a5ec701b1ce2022b09932bb9cdfd1b82c20
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 03:56:39 2026 +0000

    chore(pgo): update PGO profile

commit 8160e246ae717783469d76c6dc32502f9a74ca80
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 03:34:16 2026 +0000

    fix(pgo): clear stale pgo-data before extraction — self-hosted runner persists RUNNER_TEMP

commit 7152533213dc1c1104d3c55519722e8ec1c62a77
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 03:26:59 2026 +0000

    fix(pgo): remove platforms input — publish-docker.yml doesn't accept it

commit f37e532e6d43b91bf6e9e8565298cbb11a659e88
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 03:26:08 2026 +0000

    Revert "fix: add platforms input to publish-docker workflow"

    This reverts commit 6c7ab2529db49a6b36d2980ae6d6dc8b22a7afa8.

commit 6c7ab2529db49a6b36d2980ae6d6dc8b22a7afa8
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 03:25:04 2026 +0000

    fix: add platforms input to publish-docker workflow

    The composite action supports a platforms parameter but the workflow
    didn't expose it as a workflow_dispatch input. PGO collection needs
    to pass linux/amd64 only to avoid building coreclr under QEMU arm64.

commit f8cd6a5e286c0c502875f5a7eca08f821996a2c3
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 03:20:15 2026 +0000

    fix(pgo): build Docker images for linux/amd64 only — skip arm64

    The publish-docker action defaults to linux/amd64,linux/arm64. The
    arm64 build runs under QEMU emulation making the coreclr build ~10x
    slower. PGO collection only runs on x64 runners.

commit 688e55e54002d3d49f3e83a81f6beca3f016e374
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 03:16:58 2026 +0000

    fix(pgo): pin lttng-build stage to linux/amd64 — skip arm build

commit 4490c07f86ae0a2294c362f156f4ffbca0f7c85e
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 02:16:08 2026 +0000

    fix(pgo): use build output path directly instead of /tmp

commit 2a56a2e754574dc7e3a75ce0561d442830f33abc
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 02:13:09 2026 +0000

    fix(pgo): build coreclr with LTTng — swap both libcoreclr.so and provider

    The stub PAL headers approach only registered tracepoints (metadata)
    but the FireEtXplat* functions in libcoreclr.so were compiled as no-ops
    from the dummy provider. LTTng channels had structure but zero events.

    Build the coreclr runtime subset with FEATURE_EVENTSOURCE_XPLAT=1
    (~15 min) and replace both libcoreclr.so and libcoreclrtraceptprovider.so
    in the SDK image. This gives us real LTTng event dispatch.

commit 204d8ff9053d34b9766c5c15be350d1c9236fb47
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 01:58:36 2026 +0000

    chore(pgo): update PGO profile

commit bf5ef5c873b4f25926636e415fb8d4a14c63b93d
Merge: 2235fcd71f fedd8dee7a
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 01:41:51 2026 +0000

    Merge branch 'pgo-2' of https://github.com/NethermindEth/nethermind into pgo-2

commit 2235fcd71fe97e04f45fe019af28065491e93b04
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 01:41:00 2026 +0000

    fix(pgo): repack sampling.trace.zip to strip container path prefix

    perfcollect inside Docker produces zip entries with full container
    paths (nethermind/pgo/sampling.trace/lttngTrace/...) but dotnet-pgo's
    CtfTraceEventSource expects lttngTrace/ at the zip root. Repack the
    zip with the prefix stripped.

commit fedd8dee7a0b33aaf39fa6cfd7dba54b1e29210b
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Sat Mar 21 01:37:43 2026 +0000

    chore(pgo): update PGO profile

commit 17dc8b52ec31afb215c0c667e5afb0eb5eea812b
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 01:19:11 2026 +0000

    fix(pgo): use stub PAL headers instead of building full coreclr

    The generated tracepoint headers include palrt.h/pal.h but only use
    BOOL and ULONG typedefs. Create minimal stubs instead of building
    the entire coreclr runtime. Drops build time from ~20min to ~30sec
    and removes all heavy build dependencies.

commit 2fe5c7a50da73edd5c2e8958306a6b6c3da471d6
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 00:27:37 2026 +0000

    fix(pgo): install full coreclr build prerequisites

    build.sh clr.runtime needs build-essential, llvm, lld, ninja-build,
    libicu-dev, libssl-dev, libkrb5-dev — not just cmake and clang.

commit 41ddcad28b89f4888b685df2e1a1a5c8a3c7416e
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 00:07:38 2026 +0000

    fix(pgo): use runtime build system for libcoreclrtraceptprovider.so

    Raw clang++ can't compile the tracepoint provider — the PAL headers
    require architecture defines (HOST_AMD64, HOST_64BIT), CONTEXT struct
    definitions, and transitive includes across pal/inc, native/minipal,
    etc. that only the runtime's CMake build sets correctly.

    Use ./build.sh clr.runtime which builds the full coreclr including
    the tracepoint provider as a natural output.

commit 490387f2c06c57c19e4bf013b109ae104955a451
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Mar 21 00:00:07 2026 +0000

    fix(pgo): drop sparse checkout, add minipal include path

    The PAL header chain pulls in minipal/guid.h from src/native/minipal
    and other transitive headers across the repo. Sparse checkout can't
    keep up. Use --filter=blob:none with full checkout instead — Git only
    fetches blobs for checked-out files on demand.

commit 35cd9a2cffc9784007562fc83dccba7ae1f53995
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Fri Mar 20 23:54:39 2026 +0000

    fix(pgo): add pal/inc to sparse checkout and include paths

    palrt.h includes pal.h which is in src/coreclr/pal/inc/, not just
    the rt/ subdirectory. Expand the sparse checkout and add -I flag.

commit 4f00a04125206cd213d0f115ded83aea21cf34cc
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Fri Mar 20 23:49:16 2026 +0000

    chore(pgo): address review findings — signal trap, sparse checkout, ARG version

    - Add SIGTERM/SIGINT trap to forward signals to backgrounded Nethermind
    - Use sparse checkout + blob filter for dotnet/runtime clone (~3 dirs vs full repo)
    - Extract DOTNET_RUNTIME_VERSION as ARG to single-source the version
    - Remove --noinhibit-exec linker flag (suppressed link errors silently)
    - Build object files in WORKDIR instead of /tmp

commit bbe12970f83c4d70b11aca50ae53b8ecb0442238
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Fri Mar 20 23:47:59 2026 +0000

    chore(pgo): simplify — remove unused cmake, deduplicate cleanup blocks

    - Remove cmake from lttng-build stage (not used, compiling with clang directly)
    - Simplify duplicated container/network cleanup into single-line xargs pipes

commit e0bfc2ef979a497b53db95deed82f02268e232fe
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Fri Mar 20 23:42:02 2026 +0000

    feat(pgo): build libcoreclrtraceptprovider.so from source for LTTng

    The Microsoft .NET 10 SDK doesn't ship the LTTng tracepoint provider
    (PR dotnet/runtime#113876 made it optional). Without it, the runtime's
    PAL_InitializeTracing dlopen finds nothing and LTTng UST events are
    never emitted — perfcollect gets perf samples but empty CLR traces.

    Add a build stage that:
    1. Clones dotnet/runtime v10.0.5
    2. Generates LTTng tracepoint sources from ClrEtwAll.man
    3. Compiles just libcoreclrtraceptprovider.so
    4. Copies it next to libcoreclr.so in the runtime stage

    The runtime's constructor (priority 200) dlopen's it automatically.

commit 5aea5b7990f292388e77b7858b579d3184d8f9c2
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Fri Mar 20 22:42:58 2026 +0000

    chore(pgo): update PGO profile

commit 0d0b1a9ce2cfbc626bd762ccdb6fc25c839b5172
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Fri Mar 20 22:28:31 2026 +0000

    fix(pgo): wait for LTTng session before starting Nethermind

    The .NET runtime registers LTTng UST tracepoints during startup. If
    Nethermind starts before perfcollect has created and activated the
    LTTng session, the tracepoints are lost and the trace has no CLR
    events. Wait for "Collection started" in the perfcollect log before
    launching Nethermind.

commit cfabdd8b30a224b9890a634270283fc712c09ca8
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date:   Fri Mar 20 22:04:14 2026 +0000

    chore(pgo): update PGO profile

commit 3cdeec604062351002bdd57cd124223748203896
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Fri Mar 20 21:42:23 2026 +0000

    fix(pgo): let perfcollect finish before container stop signal

    Docker container.stop() sends signal then SIGKILL after 10s grace.
    The old approach ran Nethermind in foreground and tried to stop
    perfcollect after — leaving no time for post-processing (perf inject
    + zip) before SIGKILL.

    New a…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants