-
Notifications
You must be signed in to change notification settings - Fork 468
fix(profiling): remove unnecessary access to frame.f_locals [backport 3.19]
#15469
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
|
We've been seeing a low number of crashes that have the following stack traces. ``` PyFrame_FastToLocalsWithError _PyObject_GenericGetAttrWithDict __pyx_f_7ddtrace_9profiling_9collector_10_traceback__extract_class_name.constprop.0 __pyx_pw_7ddtrace_9profiling_9collector_10_traceback_5pyframe_to_frames ``` which corresponds to `value = frame.f_locals[argname]` in `extract_class_name()` function. Fore more details see notebook, https://app.datadoghq.com/notebook/13515661/pyframe-to-frames-crashes The reason this could lead to a crash is that the `frame` could be in an invalid state, partially deallocated, or corrupted. And this doesn't happen on our stack sampler (Echion) as it doesn't use it, and just use `co_qualname` (Python 3.11+) or `co_name` (Python < 3.11) This code is no longer needed as we don't use `class_name` field from `DDFrame` named tuple. Memory profiler has been putting an empty string. Lock profiler populated it but then it didn't export it in the sample. More appropriate way to populate the class name for Python versions 3.11+ would be using `co_qualname` as Echion does. I'll follow up with this in a separate PR. And this is why we see fully qualified name on our CPU time view, but function name only on memory/lock views. CPU time view <img width="206" height="94" alt="Screenshot 2025-11-26 at 2 02 50 PM" src="https://github.com/user-attachments/assets/a56efc8a-0dd2-41c2-8fab-5cc786d3a737" /> Memory view <img width="141" height="94" alt="Screenshot 2025-11-26 at 2 02 35 PM" src="https://github.com/user-attachments/assets/efa917f8-40c8-4818-88e7-9c157bdfd5cf" /> <!-- Provide an overview of the change and motivation for the change --> <!-- Describe your testing strategy or note what tests are included --> <!-- Note any risks associated with this change, or "None" if no risks --> <!-- Any other information that would be helpful for reviewers --> (cherry picked from commit 124b19d)
c0939ac to
512a7c7
Compare
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 264 ± 5 ms. The average import time from base is: 263 ± 5 ms. The import time difference between this PR and base is: 0.1 ± 0.2 ms. The difference is not statistically significant (z = 0.46). Import time breakdownThe following import paths have shrunk:
|
Performance SLOsComparing candidate backport-15434-to-3.19 (512a7c7) with baseline 3.19 (ea3cfae) 📈 Performance Regressions (2 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 0.406µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +0.3% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.9% ✅ add_inplace_aspectTime: ✅ 0.409µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +1.1% Memory: ✅ 39.754MB (SLO: <41.500MB -4.2%) vs baseline: +5.0% ✅ add_inplace_noaspectTime: ✅ 0.320µs (SLO: <10.000µs 📉 -96.8%) vs baseline: +1.6% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +4.6% ✅ add_noaspectTime: ✅ 0.280µs (SLO: <10.000µs 📉 -97.2%) vs baseline: +0.5% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.9% ✅ bytearray_aspectTime: ✅ 1.275µs (SLO: <10.000µs 📉 -87.2%) vs baseline: +0.5% Memory: ✅ 39.734MB (SLO: <41.500MB -4.3%) vs baseline: +4.4% ✅ bytearray_extend_aspectTime: ✅ 1.521µs (SLO: <10.000µs 📉 -84.8%) vs baseline: -0.8% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +5.0% ✅ bytearray_extend_noaspectTime: ✅ 0.614µs (SLO: <10.000µs 📉 -93.9%) vs baseline: +0.3% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.9% ✅ bytearray_noaspectTime: ✅ 0.481µs (SLO: <10.000µs 📉 -95.2%) vs baseline: -0.7% Memory: ✅ 39.872MB (SLO: <41.500MB -3.9%) vs baseline: +5.1% ✅ bytes_aspectTime: ✅ 1.317µs (SLO: <10.000µs 📉 -86.8%) vs baseline: +3.0% Memory: ✅ 39.754MB (SLO: <41.500MB -4.2%) vs baseline: +4.6% ✅ bytes_noaspectTime: ✅ 0.498µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +0.9% Memory: ✅ 39.715MB (SLO: <41.500MB -4.3%) vs baseline: +4.6% ✅ bytesio_aspectTime: ✅ 1.339µs (SLO: <10.000µs 📉 -86.6%) vs baseline: +2.0% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.9% ✅ bytesio_noaspectTime: ✅ 0.495µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.9% Memory: ✅ 39.892MB (SLO: <41.500MB -3.9%) vs baseline: +5.1% ✅ capitalize_aspectTime: ✅ 0.738µs (SLO: <10.000µs 📉 -92.6%) vs baseline: ~same Memory: ✅ 39.911MB (SLO: <41.500MB -3.8%) vs baseline: +5.5% ✅ capitalize_noaspectTime: ✅ 0.432µs (SLO: <10.000µs 📉 -95.7%) vs baseline: -1.1% Memory: ✅ 39.852MB (SLO: <41.500MB -4.0%) vs baseline: +4.8% ✅ casefold_aspectTime: ✅ 0.734µs (SLO: <10.000µs 📉 -92.7%) vs baseline: -0.8% Memory: ✅ 39.734MB (SLO: <41.500MB -4.3%) vs baseline: +4.5% ✅ casefold_noaspectTime: ✅ 0.369µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +0.7% Memory: ✅ 39.911MB (SLO: <41.500MB -3.8%) vs baseline: +5.0% ✅ decode_aspectTime: ✅ 0.723µs (SLO: <10.000µs 📉 -92.8%) vs baseline: -0.3% Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +4.8% ✅ decode_noaspectTime: ✅ 0.416µs (SLO: <10.000µs 📉 -95.8%) vs baseline: -0.8% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +4.9% ✅ encode_aspectTime: ✅ 0.710µs (SLO: <10.000µs 📉 -92.9%) vs baseline: -0.7% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.8% ✅ encode_noaspectTime: ✅ 0.403µs (SLO: <10.000µs 📉 -96.0%) vs baseline: +0.3% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +5.0% ✅ format_aspectTime: ✅ 3.359µs (SLO: <10.000µs 📉 -66.4%) vs baseline: +0.4% Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +5.0% ✅ format_map_aspectTime: ✅ 3.523µs (SLO: <10.000µs 📉 -64.8%) vs baseline: ~same Memory: ✅ 39.892MB (SLO: <41.500MB -3.9%) vs baseline: +5.0% ✅ format_map_noaspectTime: ✅ 0.774µs (SLO: <10.000µs 📉 -92.3%) vs baseline: -0.2% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.9% ✅ format_noaspectTime: ✅ 0.591µs (SLO: <10.000µs 📉 -94.1%) vs baseline: -1.0% Memory: ✅ 39.715MB (SLO: <41.500MB -4.3%) vs baseline: +4.7% ✅ index_aspectTime: ✅ 0.361µs (SLO: <10.000µs 📉 -96.4%) vs baseline: +0.3% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +5.0% ✅ index_noaspectTime: ✅ 0.279µs (SLO: <10.000µs 📉 -97.2%) vs baseline: -1.1% Memory: ✅ 39.715MB (SLO: <41.500MB -4.3%) vs baseline: +4.7% ✅ join_aspectTime: ✅ 1.391µs (SLO: <10.000µs 📉 -86.1%) vs baseline: -0.3% Memory: ✅ 39.754MB (SLO: <41.500MB -4.2%) vs baseline: +4.6% ✅ join_noaspectTime: ✅ 0.489µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.5% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +5.0% ✅ ljust_aspectTime: ✅ 2.743µs (SLO: <20.000µs 📉 -86.3%) vs baseline: +8.5% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +4.9% ✅ ljust_noaspectTime: ✅ 0.405µs (SLO: <10.000µs 📉 -96.0%) vs baseline: -0.7% Memory: ✅ 39.754MB (SLO: <41.500MB -4.2%) vs baseline: +5.0% ✅ lower_aspectTime: ✅ 2.372µs (SLO: <10.000µs 📉 -76.3%) vs baseline: +7.2% Memory: ✅ 39.734MB (SLO: <41.500MB -4.3%) vs baseline: +4.5% ✅ lower_noaspectTime: ✅ 0.366µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +0.4% Memory: ✅ 39.931MB (SLO: <41.500MB -3.8%) vs baseline: +5.1% ✅ lstrip_aspectTime: ✅ 2.398µs (SLO: <20.000µs 📉 -88.0%) vs baseline: +7.9% Memory: ✅ 39.754MB (SLO: <41.500MB -4.2%) vs baseline: +4.9% ✅ lstrip_noaspectTime: ✅ 0.382µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -1.3% Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +5.1% ✅ modulo_aspectTime: ✅ 1.001µs (SLO: <10.000µs 📉 -90.0%) vs baseline: +1.3% Memory: ✅ 39.852MB (SLO: <41.500MB -4.0%) vs baseline: +5.0% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 1.527µs (SLO: <10.000µs 📉 -84.7%) vs baseline: -0.2% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.7% ✅ modulo_aspect_for_bytesTime: ✅ 0.985µs (SLO: <10.000µs 📉 -90.2%) vs baseline: -0.5% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.9% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 1.196µs (SLO: <10.000µs 📉 -88.0%) vs baseline: -0.4% Memory: ✅ 39.931MB (SLO: <41.500MB -3.8%) vs baseline: +5.2% ✅ modulo_noaspectTime: ✅ 0.625µs (SLO: <10.000µs 📉 -93.7%) vs baseline: -0.1% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.8% ✅ replace_aspectTime: ✅ 4.949µs (SLO: <10.000µs 📉 -50.5%) vs baseline: +1.0% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.8% ✅ replace_noaspectTime: ✅ 0.462µs (SLO: <10.000µs 📉 -95.4%) vs baseline: ~same Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +5.1% ✅ repr_aspectTime: ✅ 0.901µs (SLO: <10.000µs 📉 -91.0%) vs baseline: -0.7% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.7% ✅ repr_noaspectTime: ✅ 0.419µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +1.1% Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +4.8% ✅ rstrip_aspectTime: ✅ 1.914µs (SLO: <20.000µs 📉 -90.4%) vs baseline: +2.4% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +5.0% ✅ rstrip_noaspectTime: ✅ 0.383µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +0.6% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.8% ✅ slice_aspectTime: ✅ 0.500µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +0.6% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.9% ✅ slice_noaspectTime: ✅ 0.451µs (SLO: <10.000µs 📉 -95.5%) vs baseline: +1.8% Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +4.7% ✅ stringio_aspectTime: ✅ 1.523µs (SLO: <10.000µs 📉 -84.8%) vs baseline: ~same Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +4.8% ✅ stringio_noaspectTime: ✅ 0.730µs (SLO: <10.000µs 📉 -92.7%) vs baseline: ~same Memory: ✅ 39.754MB (SLO: <41.500MB -4.2%) vs baseline: +4.8% ✅ strip_aspectTime: ✅ 2.474µs (SLO: <20.000µs 📉 -87.6%) vs baseline: 📈 +12.0% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +4.8% ✅ strip_noaspectTime: ✅ 0.385µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -1.3% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +4.8% ✅ swapcase_aspectTime: ✅ 2.412µs (SLO: <10.000µs 📉 -75.9%) vs baseline: +0.5% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.8% ✅ swapcase_noaspectTime: ✅ 0.541µs (SLO: <10.000µs 📉 -94.6%) vs baseline: +0.6% Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +4.5% ✅ title_aspectTime: ✅ 2.344µs (SLO: <10.000µs 📉 -76.6%) vs baseline: ~same Memory: ✅ 39.636MB (SLO: <41.500MB -4.5%) vs baseline: +4.7% ✅ title_noaspectTime: ✅ 0.500µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -0.4% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +4.9% ✅ translate_aspectTime: ✅ 3.238µs (SLO: <10.000µs 📉 -67.6%) vs baseline: +0.5% Memory: ✅ 39.774MB (SLO: <41.500MB -4.2%) vs baseline: +5.0% ✅ translate_noaspectTime: ✅ 1.042µs (SLO: <10.000µs 📉 -89.6%) vs baseline: +0.3% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +5.1% ✅ upper_aspectTime: ✅ 2.294µs (SLO: <10.000µs 📉 -77.1%) vs baseline: +5.6% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +5.0% ✅ upper_noaspectTime: ✅ 0.372µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +1.2% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +5.0% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 4.084µs (SLO: <10.000µs 📉 -59.2%) vs baseline: +0.5% Memory: ✅ 39.793MB (SLO: <41.000MB -2.9%) vs baseline: +4.9% ✅ ospathbasename_noaspectTime: ✅ 1.076µs (SLO: <10.000µs 📉 -89.2%) vs baseline: -0.7% Memory: ✅ 39.852MB (SLO: <41.000MB -2.8%) vs baseline: +5.0% ✅ ospathjoin_aspectTime: ✅ 6.074µs (SLO: <10.000µs 📉 -39.3%) vs baseline: +1.2% Memory: ✅ 39.813MB (SLO: <41.000MB -2.9%) vs baseline: +5.0% ✅ ospathjoin_noaspectTime: ✅ 2.281µs (SLO: <10.000µs 📉 -77.2%) vs baseline: -0.6% Memory: ✅ 39.734MB (SLO: <41.000MB -3.1%) vs baseline: +4.9% ✅ ospathnormcase_aspectTime: ✅ 4.023µs (SLO: <10.000µs 📉 -59.8%) vs baseline: 📈 +18.3% Memory: ✅ 39.774MB (SLO: <41.000MB -3.0%) vs baseline: +4.8% ✅ ospathnormcase_noaspectTime: ✅ 0.581µs (SLO: <10.000µs 📉 -94.2%) vs baseline: +1.1% Memory: ✅ 39.793MB (SLO: <41.000MB -2.9%) vs baseline: +5.1% ✅ ospathsplit_aspectTime: ✅ 5.589µs (SLO: <10.000µs 📉 -44.1%) vs baseline: 📈 +21.3% Memory: ✅ 39.813MB (SLO: <41.000MB -2.9%) vs baseline: +5.0% ✅ ospathsplit_noaspectTime: ✅ 1.576µs (SLO: <10.000µs 📉 -84.2%) vs baseline: -0.5% Memory: ✅ 39.793MB (SLO: <41.000MB -2.9%) vs baseline: +4.5% ✅ ospathsplitdrive_aspectTime: ✅ 3.602µs (SLO: <10.000µs 📉 -64.0%) vs baseline: +3.1% Memory: ✅ 39.951MB (SLO: <41.000MB -2.6%) vs baseline: +5.2% ✅ ospathsplitdrive_noaspectTime: ✅ 0.693µs (SLO: <10.000µs 📉 -93.1%) vs baseline: ~same Memory: ✅ 39.793MB (SLO: <41.000MB -2.9%) vs baseline: +5.0% ✅ ospathsplitext_aspectTime: ✅ 4.430µs (SLO: <10.000µs 📉 -55.7%) vs baseline: +0.9% Memory: ✅ 39.734MB (SLO: <41.000MB -3.1%) vs baseline: +4.8% ✅ ospathsplitext_noaspectTime: ✅ 1.361µs (SLO: <10.000µs 📉 -86.4%) vs baseline: -1.3% Memory: ✅ 39.793MB (SLO: <41.000MB -2.9%) vs baseline: +4.9% 🟡 Near SLO Breach (2 suites)🟡 packagespackageforrootmodulemapping - 4/4✅ cache_offTime: ✅ 337.290ms (SLO: <354.300ms -4.8%) vs baseline: -0.8% Memory: ✅ 40.924MB (SLO: <41.500MB 🟡 -1.4%) vs baseline: +4.0% ✅ cache_onTime: ✅ 0.388µs (SLO: <10.000µs 📉 -96.1%) vs baseline: ~same Memory: ✅ 39.311MB (SLO: <41.000MB -4.1%) vs baseline: +4.3% 🟡 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 2.948µs (SLO: <20.000µs 📉 -85.3%) vs baseline: +0.6% Memory: ✅ 34.485MB (SLO: <35.500MB -2.9%) vs baseline: +4.9% ✅ 1-count-metrics-100-timesTime: ✅ 202.052µs (SLO: <220.000µs -8.2%) vs baseline: -0.4% Memory: ✅ 34.485MB (SLO: <35.500MB -2.9%) vs baseline: +4.7% ✅ 1-distribution-metric-1-timesTime: ✅ 3.240µs (SLO: <20.000µs 📉 -83.8%) vs baseline: -1.2% Memory: ✅ 34.465MB (SLO: <35.500MB -2.9%) vs baseline: +4.9% ✅ 1-distribution-metrics-100-timesTime: ✅ 213.681µs (SLO: <220.000µs -2.9%) vs baseline: +0.6% Memory: ✅ 34.446MB (SLO: <35.500MB -3.0%) vs baseline: +4.8% ✅ 1-gauge-metric-1-timesTime: ✅ 2.176µs (SLO: <20.000µs 📉 -89.1%) vs baseline: -0.3% Memory: ✅ 34.446MB (SLO: <35.500MB -3.0%) vs baseline: +4.5% ✅ 1-gauge-metrics-100-timesTime: ✅ 136.497µs (SLO: <150.000µs -9.0%) vs baseline: -0.3% Memory: ✅ 34.485MB (SLO: <35.500MB -2.9%) vs baseline: +4.7% ✅ 1-rate-metric-1-timesTime: ✅ 3.147µs (SLO: <20.000µs 📉 -84.3%) vs baseline: +1.7% Memory: ✅ 34.544MB (SLO: <35.500MB -2.7%) vs baseline: +5.0% ✅ 1-rate-metrics-100-timesTime: ✅ 216.484µs (SLO: <250.000µs 📉 -13.4%) vs baseline: +0.6% Memory: ✅ 34.505MB (SLO: <35.500MB -2.8%) vs baseline: +5.0% ✅ 100-count-metrics-100-timesTime: ✅ 20.253ms (SLO: <22.000ms -7.9%) vs baseline: +0.6% Memory: ✅ 34.485MB (SLO: <35.500MB -2.9%) vs baseline: +4.8% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.229ms (SLO: <2.300ms -3.1%) vs baseline: -0.3% Memory: ✅ 34.426MB (SLO: <35.500MB -3.0%) vs baseline: +4.4% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.394ms (SLO: <1.550ms 📉 -10.0%) vs baseline: ~same Memory: ✅ 34.505MB (SLO: <35.500MB -2.8%) vs baseline: +5.0% ✅ 100-rate-metrics-100-timesTime: ✅ 2.208ms (SLO: <2.550ms 📉 -13.4%) vs baseline: +0.1% Memory: ✅ 34.505MB (SLO: <35.500MB -2.8%) vs baseline: +4.9% ✅ flush-1-metricTime: ✅ 4.465µs (SLO: <20.000µs 📉 -77.7%) vs baseline: +0.8% Memory: ✅ 34.485MB (SLO: <35.500MB -2.9%) vs baseline: +4.8% ✅ flush-100-metricsTime: ✅ 175.156µs (SLO: <250.000µs 📉 -29.9%) vs baseline: -0.6% Memory: ✅ 34.859MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.8% ✅ flush-1000-metricsTime: ✅ 2.123ms (SLO: <2.500ms 📉 -15.1%) vs baseline: +0.2% Memory: ✅ 35.271MB (SLO: <36.500MB -3.4%) vs baseline: +4.7%
|
Backport 124b19d from #15434
3.19 branch still has Stack v1, which pushes
class_nameto profile Samples. Given that this fixes crashing bugs, it would be more beneficial to have this than losing some tiny bit of information for code path that is mostly deprecated.We've been seeing a low number of crashes that have the following stack traces.
which corresponds to
value = frame.f_locals[argname]inextract_class_name()function.Fore more details see notebook,
https://app.datadoghq.com/notebook/13515661/pyframe-to-frames-crashes
The reason this could lead to a crash is that the
framecould be in an invalid state, partially deallocated, or corrupted. And this doesn't happen on our stack sampler (Echion) as it doesn't use it, and just useco_qualname(Python 3.11+) orco_name(Python < 3.11)This code is no longer needed as we don't use
class_namefield fromDDFramenamed tuple. Memory profiler has been putting an empty string. Lock profiler populated it but then it didn't export it in the sample.More appropriate way to populate the class name for Python versions 3.11+ would be using
co_qualnameas Echion does. I'll follow up with this in a separate PR. And this is why we see fully qualified name on our CPU time view, but function name only on memory/lock views.CPU time view

Memory view

(cherry picked from commit 124b19d)
Description
Testing
Risks
Additional Notes