[WIP] Gleocadie/crash arm64 - #8499
Conversation
…m64) UnwindTracersProvider::ScopedTracer has a user-declared destructor that pushes its TracerNode back onto the free-list. It had no explicit move ops, which meant the compiler kept the implicit (deprecated) copy-assign and omitted the implicit move. TimerCreateCpuProfiler::Collect() uses assignment on every arm64 CPU sample when debug logging is on, so the temporary and the local both ended up releasing the same node, corrupting the free-list. - Delete the copy ctor/assignment and define explicit move ctor/assignment that null out the source's _provider/_node. - Default-initialize _provider/_node in the class body so the ScopedTracer(nullptr) overload no longer leaves _node indeterminate. Made-with: Cursor
…ines)
- [F3] Rewrite the .NET<5 arm64 Log::Warn in CorProfilerCallback::Initialize
to use "Continuous Profiler" and "arm64 Linux" per AGENTS.md guidelines.
- [B4] Expand the no_sanitize("vptr") rationale above the first call-site
to explicitly cover the three clang+arm64 suppression points below.
- [F4] Document that TimerCreateCpuProfiler::_useUnwinderTracer is a
one-shot snapshot of Log::IsDebugEnabled() captured at construction.
- [F5] Collapse the duplicated AddModuleRangesToCache declaration in
ManagedCodeCache.h by toggling visibility with a single #ifdef DD_TEST
public: / #else private: / #endif block.
- [F6] Fix the "GetfunctionId" typo and clarify the comment around the
defensive !isR2r.has_value() guard.
- [F7] Drop the stray blank line introduced in LinuxStackFramesCollector
after RegisterHandler.
- [F8] Default-initialize StackFramesCollectorBase::_tracer{nullptr} to
remove any future indeterminate-value hazard.
- [C4] Append a trailing newline to Backtrace2Unwinder.h, HybridUnwinder.h,
IUnwinder.h, LinuxStackFramesCollector.h, TimerCreateCpuProfiler.h.
Made-with: Cursor
- [C7] Explain in profiler/src/Demos/Directory.Build.props why netcoreapp3.1 is excluded on arm64 Linux (the Continuous Profiler refuses to initialize on .NET Core 3.1 / arm64). - [E1] Clarify in PublishProfilerLinux that the linux-arm64 and linux-musl-arm64 RID folders are both populated, via the glibc and Alpine/musl CI legs respectively. - [E2] Add a TODO + tracking-issue placeholder next to the TSAN-disabled-on-arm64 conditions (48-bit VMA requirement on CI hosts). - [E3] Document why we preload libasan.so.5 on arm64 (older gcc 9 image) vs libasan.so.6 on x64. - [E4] Describe in build/cmake/FindLibunwind.cmake the patches carried by DataDog/libunwind@gleocadie/v1.8.1-custom-3 and why we can't move to upstream v1.8.3 yet. Made-with: Cursor
BenchmarksBenchmark execution time: 2026-04-22 14:55:35 Comparing candidate commit 3eee3d7 in PR branch Found 0 performance improvements and 2 performance regressions! Performance is the same for 25 metrics, 0 unstable metrics, 59 known flaky benchmarks, 28 flaky benchmarks without significant changes.
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8499) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (75ms) : 71, 79
master - mean (73ms) : 70, 77
section Bailout
This PR (8499) - mean (79ms) : 75, 83
master - mean (77ms) : 74, 80
section CallTarget+Inlining+NGEN
This PR (8499) - mean (1,077ms) : 1032, 1122
master - mean (1,085ms) : 1036, 1134
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (119ms) : 113, 125
master - mean (114ms) : 110, 119
section Bailout
This PR (8499) - mean (116ms) : 112, 119
master - mean (115ms) : 111, 118
section CallTarget+Inlining+NGEN
This PR (8499) - mean (795ms) : 770, 820
master - mean (794ms) : 765, 824
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (101ms) : 97, 105
master - mean (105ms) : 101, 110
section Bailout
This PR (8499) - mean (104ms) : 97, 110
master - mean (103ms) : 99, 108
section CallTarget+Inlining+NGEN
This PR (8499) - mean (946ms) : 901, 990
master - mean (947ms) : 900, 993
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (101ms) : 96, 107
master - mean (101ms) : 96, 106
section Bailout
This PR (8499) - mean (102ms) : 100, 104
master - mean (105ms) : 101, 110
section CallTarget+Inlining+NGEN
This PR (8499) - mean (826ms) : 788, 864
master - mean (826ms) : 784, 869
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (205ms) : 199, 212
master - mean (203ms) : 195, 212
section Bailout
This PR (8499) - mean (208ms) : 202, 215
master - mean (207ms) : 198, 215
section CallTarget+Inlining+NGEN
This PR (8499) - mean (1,207ms) : 1154, 1261
master - mean (1,202ms) : 1158, 1247
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (293ms) : 281, 306
master - mean (294ms) : 280, 307
section Bailout
This PR (8499) - mean (294ms) : 286, 302
master - mean (295ms) : 280, 311
section CallTarget+Inlining+NGEN
This PR (8499) - mean (980ms) : 939, 1021
master - mean (981ms) : 952, 1011
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (287ms) : 275, 298
master - mean (286ms) : 276, 297
section Bailout
This PR (8499) - mean (288ms) : 278, 297
master - mean (286ms) : 276, 297
section CallTarget+Inlining+NGEN
This PR (8499) - mean (1,167ms) : 1118, 1215
master - mean (1,169ms) : 1122, 1216
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8499) - mean (286ms) : 279, 294
master - mean (289ms) : 276, 301
section Bailout
This PR (8499) - mean (286ms) : 275, 298
master - mean (290ms) : 275, 306
section CallTarget+Inlining+NGEN
This PR (8499) - mean (1,050ms) : 989, 1112
master - mean (1,070ms) : 983, 1158
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Summary of changes
Reason for change
Implementation details
Test coverage
Other details