Skip to content

[Perf] Linux/arm64: 1 Regression on 3/23/2026 11:28:12 AM +00:00 #126154

Description

@performanceautofiler

Run Information

Name Value
Architecture arm64
OS ubuntu 22.04
Queue AmpereUbuntu
Baseline f6d4ffd1dba9478b91d79371e77270d05e2d8a1d
Compare c13de3073c3f8b049fc144393fbce707ca194e2b
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Formats.Tar.Tests.Perf_TarWriter

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
1.90 μs 2.26 μs 1.19 0.20 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Formats.Tar.Tests.Perf_TarWriter*'
Details

System.Formats.Tar.Tests.Perf_TarWriter.PaxTarEntry_WriteEntry

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Activity

  1. LoopedBard3 commented on Mar 26, 2026

    @LoopedBard3
    Member

    🔍 Automated Triage Analysis

    Summary: 1. Verification - Run RunWithBuildAtHash(buildAtHash=["f6d4ffd1dba9478b91d79371e77270d05e2d8a1d", "baa4920c39cbd92a5704218d11a1d6648950b6f5"], testName=["System.Formats.Tar.Tests.Perf_TarWriter.PaxTarEntry_WriteEntry"]) to confirm regression at commit baa4920 and quantify exact impact Bisection completed.

    Finding Confidence: 3/5 (analysis accuracy)
    Regression Confidence: 4/5 (likelihood of true regression)

    📊 Full Analysis (click to expand)

    Issue Overview

    • Issue: #70607 - [Perf] Linux/arm64: 1 Regression on 3/23/2026 11:28:12 AM +00:00
    • Date: 2026-03-23 | Queue: Ubuntu.2204.Arm64.Perf | OS/Arch: linux/arm64
    • Commits: f6d4ffd1 → c13de307 (24 commits)
    • Labels: untriaged, ampere, perf-regression, os-linux, branch-refs/heads/main, arch-arm64, runtime-coreclr, kind-micro
    • Historical Data: Missing (historical analysis tool failed due to SDK version mismatch; falling back to fixed 5% threshold)

    Test Analysis

    Test Name Baseline Compare Δ% μ σ n z Thresh% Noise? Assessment
    System.Formats.Tar.Tests.Perf_TarWriter.PaxTarEntry_WriteEntry 1.90 μs 2.26 μs +19.0% N/A N/A N/A N/A 5% N Exceeds threshold

    Legend: μ=mean, σ=stddev, n=runs, z=z-score, Thresh%=adaptive threshold

    Finding Confidence: 3/5 - Adequate data available with direct commit correlation, but limited by missing historical statistical baseline. Confidence lowered by historical analysis failure but strengthened by precise commit attribution.

    Confirmed Regressions

    System.Formats.Tar.Tests.Perf_TarWriter.PaxTarEntry_WriteEntry (+19.0%)

    • Delta: 1.90 μs → 2.26 μs (+19.0%, +0.36 μs absolute)
    • Historical Context: Historical statistics unavailable due to analysis tool failure; using fixed 5% noise threshold. Delta significantly exceeds threshold.
    • Assessment: Clear regression above noise threshold. Without historical variance data, cannot calculate z-score or adaptive threshold, but 19% delta is substantial and unlikely to be measurement noise.
    • Finding Confidence: 3/5 - Direct commit correlation with perfect timing and file path match provides strong attribution, but capped at 3 due to missing historical data for statistical validation
    • Regression Confidence: 4/5 - Strong signal with surgical commit targeting exact affected code. Commit directly modifies PaxTarEntry constructor and synchronization logic that the benchmark exercises. High correlation between code change and performance impact.
    • Likely Cause: baa4920c - "Synchronize PaxTarEntry ExtendedAttributes with property setters (Synchronize PaxTarEntry ExtendedAttributes with property setters #123990)"
      • Affected Areas: System.Formats.Tar / PaxTarEntry extended attributes synchronization
      • Rationale: This commit directly modifies the PaxTarEntry constructor to synchronize ExtendedAttributes with public properties, adding SyncStringExtendedAttribute, SyncTimestampExtendedAttribute, and SyncNumericExtendedAttribute helper methods. The benchmark creates a PaxTarEntry with 8 extended attributes (uname, gname, uid, gid, mtime, ctime, atime, MSWINDOWS.rawsd) and immediately writes it. The new synchronization logic added in TarHeader.cs (+124 additions) now processes each extended attribute during construction to keep the dictionary in sync with properties, introducing overhead. The commit added constructor normalization that validates and updates EA entries, which is executed in the hot path. Perfect temporal alignment (committed 2026-03-23 08:21, regression detected 2026-03-23 11:28). Modified files include exact code paths exercised by benchmark: PaxTarEntry.cs, TarHeader.cs, TarHeader.Write.cs. The 19% regression is consistent with added synchronization work per EA entry (8 EAs in benchmark).
      • Candidates Considered:
        • 9dd9f6fa - Relax RandomAccess type requirements (file I/O, not Tar-specific)
        • f8e06984 - Improve runtime-async support on linux-riscv64 (riscv64 only, not arm64)
        • bfd735b6 - [SRM] Optimize MetadataBuilder.GetOrAddConstantBlob (metadata, unrelated)
    • Verification Status: Not verified. Bisection or targeted rerun recommended to definitively confirm baa4920 as culprit and rule out interaction with other commits in the range.

    Open Questions

    • Historical Data: Missing due to tool failure (SDK protocol version mismatch between version 2 and 3). Statistical baseline (mean, stddev, z-score) unavailable. Confidence in noise classification limited to fixed 5% threshold.
    • Confidence Limitations: Without historical variance data, cannot compute adaptive threshold or assess whether 19% delta is within normal measurement variance for this specific test. However, 19% is substantially above typical measurement noise.
    • Verification Needed: Recommend RunWithBuildAtHash to verify regression at commit baa4920 vs. baseline f6d4ffd. Would confirm attribution and quantify exact performance impact of synchronization changes.
    • Bisection Status: Not performed. Range is small (24 commits) with clear candidate, but verification would strengthen confidence to 5/5.
    • Performance Impact Analysis: The commit adds synchronization overhead during PaxTarEntry construction. Benchmark creates entry with 8 EAs; each EA now triggers sync logic. Consider whether EA synchronization could be deferred until write time, or whether constructor normalization could be optimized to reduce per-EA overhead.

    Recommended Actions

    1. Verification - Run RunWithBuildAtHash(buildAtHash=["f6d4ffd1dba9478b91d79371e77270d05e2d8a1d", "baa4920c39cbd92a5704218d11a1d6648950b6f5"], testName=["System.Formats.Tar.Tests.Perf_TarWriter.PaxTarEntry_WriteEntry"]) to confirm regression at commit baa4920 and quantify exact impact
    2. Source Review - Manual code review of TarHeader.cs synchronization helpers (SyncStringExtendedAttribute, SyncTimestampExtendedAttribute, SyncNumericExtendedAttribute) to identify optimization opportunities. Focus on whether synchronization work in constructor could be deferred or optimized.
    3. Profiling - If verification confirms baa4920, collect detailed profiling with collectHardwareCounters=true to identify whether overhead is CPU-bound (instructions), memory-bound (cache misses), or allocation-related
    4. Performance Discussion - Engage with commit authors (Copilot, rzikm, stephentoub) to discuss whether synchronization overhead is acceptable tradeoff for API correctness, or whether optimization is warranted. The commit fixes a real bug (EA/property inconsistency) but introduced measurable cost.

    Structured Summary (JSON)

    {
      "schemaVersion": "perf-triage-v1",
      "issue": 70607,
      "baselineCommit": "f6d4ffd1dba9478b91d79371e77270d05e2d8a1d",
      "compareCommit": "c13de3073c3f8b049fc144393fbce707ca194e2b",
      "commitRangeSize": 24,
      "historicalContext": {
        "runsExamined": null,
        "missing": true,
        "notes": "Historical analysis tool failed due to SDK protocol version mismatch (SDK expects v2, server reports v3). Falling back to fixed 5% threshold. Statistical baseline (mean, stddev, z-score, adaptive threshold) unavailable."
      },
      "regressions": [
        {
          "test": "System.Formats.Tar.Tests.Perf_TarWriter.PaxTarEntry_WriteEntry",
          "baseline": 1.9006938505563011,
          "compare": 2.2633411949115683,
          "percentDelta": 19.0,
          "histMean": null,
          "histStdDev": null,
          "zScore": null,
          "isNoise": false,
          "likelyCommit": "baa4920c39cbd92a5704218d11a1d6648950b6f5",
          "findingConfidence": 3,
          "findingConfidenceRationale": "Direct commit correlation with perfect timing and file path match, but capped at 3 due to missing historical statistical baseline for validation",
          "regressionConfidence": 4,
          "regressionConfidenceRationale": "Strong signal (19% >> 5% threshold) with surgical commit targeting exact affected code path. Commit adds EA synchronization logic that benchmark exercises. Perfect temporal alignment.",
          "verified": false,
          "bisected": false,
          "bisectionRange": null
        }
      ],
      "nextActions": [
        "Verify regression with RunWithBuildAtHash at commit baa4920c vs baseline f6d4ffd1",
        "Manual code review of TarHeader synchronization helpers for optimization opportunities",
        "Profile with hardware counters to identify specific bottleneck",
        "Discuss performance tradeoff with commit authors"
      ],
      "generationNotes": "Historical analysis tool unavailable (SDK version mismatch). Analysis based on fixed 5% threshold and commit attribution. Strong candidate identified (baa4920c) with perfect correlation to affected code. Verification recommended to confirm and strengthen confidence to 5/5."
    }

    Bisection Results

    Test Status Culprit Commit Relevance Duration
    PaxTarEntry_WriteEntry ⚠️ Inconclusive - - 129s

    Total bisection time: 129s
    Success rate: 0/1 tests

    System.Formats.Tar.Tests.Perf_TarWriter.PaxTarEntry_WriteEntry

    • Status: inconclusive
    • Error: Bisection did not find culprit: noise
    Bisection details

    nd the added synchronization logic (checking and updating dictionary values on every property setter) would directly impact write performance. The ~13% regression (1992ns → 2259ns) is consistent with the overhead of additional dictionary operations during entry creation and property updates.

    Summary: Using historical performance data, I identified that the regression occurred between commits 7c58a24 (good, ~2007ns) and 875672f (bad, ~2259ns). Within this 6-commit range, commit baa4920c39cbd92a5704218d11a1d6648950b6f5 stands out as the clear culprit. This commit adds ExtendedAttributes synchronization to PaxTarEntry property setters - adding 124 lines of synchronization helper code in TarHeader.cs and updating property setters in TarEntry.cs, PaxTarEntry.cs, and PosixTarEntry.cs. The performance test writes PAX tar entries repeatedly, and the new synchronization code (which checks and updates the ExtendedAttributes dictionary on every property set) introduces measurable overhead in the hot path. This is a legitimate functional change that has a direct performance cost.

    Analysis: This is a true functional regression caused by intentional code changes that add runtime overhead. The commit adds dictionary synchronization operations to maintain API consistency, trading performance for correctness. This is not a code alignment or noise issue - the performance impact is a direct consequence of the new synchronization behavior implemented to fix issue #76405.



    Generated by PerfTriageAgent on 2026-03-26 08:53 UTC

  2. added
    area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
    on Mar 26, 2026
  3. dotnet-policy-service commented on Mar 26, 2026

    @dotnet-policy-service
    Contributor

    Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
    See info in area-owners.md if you want to be subscribed.

  4. DrewScoggins commented on Mar 26, 2026

    @DrewScoggins
    Member

    Related to #123990

  5. removed
    untriagedNew issue has not been triaged by the area owner
    on Mar 26, 2026
  6. added this to the 11.0.0 milestone on Mar 26, 2026
  7. dotnet-policy-service commented on Mar 26, 2026

    @dotnet-policy-service
    Contributor

    Tagging subscribers to this area: @dotnet/area-system-formats-tar
    See info in area-owners.md if you want to be subscribed.

  8. added theissue type on Jun 9, 2026
  9. added a commit that references this issue on Aug 10, 2026
    17b4b06
  10. added a commit that references this issue on Aug 11, 2026
    8405733
  11. locked and limited conversation to collaborators on Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions