feat(crashtracking): hook based exception profiling for versions 3.12+#16567
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Codeowners resolved as |
Performance SLOsComparing candidate gyuheon0h/exception-prof-hook (97e337d) with baseline main (03768c2) 📈 Performance Regressions (3 suites)📈 iastaspects - 117/117✅ add_aspectTime: ✅ 105.125µs (SLO: <130.000µs 📉 -19.1%) vs baseline: +2.3% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ add_inplace_aspectTime: ✅ 102.203µs (SLO: <130.000µs 📉 -21.4%) vs baseline: -1.0% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +5.0% ✅ add_inplace_noaspectTime: ✅ 28.350µs (SLO: <40.000µs 📉 -29.1%) vs baseline: +0.8% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ add_noaspectTime: ✅ 48.670µs (SLO: <70.000µs 📉 -30.5%) vs baseline: -0.7% Memory: ✅ 43.922MB (SLO: <46.000MB -4.5%) vs baseline: +5.6% ✅ bytearray_aspectTime: ✅ 252.172µs (SLO: <400.000µs 📉 -37.0%) vs baseline: +1.1% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +4.9% ✅ bytearray_extend_aspectTime: ✅ 645.260µs (SLO: <800.000µs 📉 -19.3%) vs baseline: -1.1% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ bytearray_extend_noaspectTime: ✅ 266.438µs (SLO: <400.000µs 📉 -33.4%) vs baseline: -0.3% Memory: ✅ 43.844MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ bytearray_noaspectTime: ✅ 139.794µs (SLO: <300.000µs 📉 -53.4%) vs baseline: ~same Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +5.0% ✅ bytes_aspectTime: ✅ 217.485µs (SLO: <300.000µs 📉 -27.5%) vs baseline: -0.6% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +4.8% ✅ bytes_noaspectTime: ✅ 134.733µs (SLO: <200.000µs 📉 -32.6%) vs baseline: +1.0% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ bytesio_aspectTime: ✅ 3.773ms (SLO: <5.000ms 📉 -24.5%) vs baseline: -1.3% Memory: ✅ 43.745MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ bytesio_noaspectTime: ✅ 313.916µs (SLO: <420.000µs 📉 -25.3%) vs baseline: -1.3% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ capitalize_aspectTime: ✅ 88.915µs (SLO: <300.000µs 📉 -70.4%) vs baseline: +1.0% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +5.0% ✅ capitalize_noaspectTime: ✅ 247.778µs (SLO: <300.000µs 📉 -17.4%) vs baseline: -2.6% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.0% ✅ casefold_aspectTime: ✅ 91.883µs (SLO: <500.000µs 📉 -81.6%) vs baseline: +4.1% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ casefold_noaspectTime: ✅ 301.294µs (SLO: <500.000µs 📉 -39.7%) vs baseline: -3.2% Memory: ✅ 43.726MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ decode_aspectTime: ✅ 86.781µs (SLO: <100.000µs 📉 -13.2%) vs baseline: +0.2% Memory: ✅ 43.745MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ decode_noaspectTime: ✅ 154.355µs (SLO: <210.000µs 📉 -26.5%) vs baseline: +0.6% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +5.3% ✅ encode_aspectTime: ✅ 84.439µs (SLO: <200.000µs 📉 -57.8%) vs baseline: ~same Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% ✅ encode_noaspectTime: ✅ 140.550µs (SLO: <200.000µs 📉 -29.7%) vs baseline: -1.8% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.5% ✅ format_aspectTime: ✅ 14.596ms (SLO: <19.200ms 📉 -24.0%) vs baseline: -0.4% Memory: ✅ 43.745MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ format_map_aspectTime: ✅ 16.413ms (SLO: <21.500ms 📉 -23.7%) vs baseline: +0.2% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.0% ✅ format_map_noaspectTime: ✅ 368.687µs (SLO: <500.000µs 📉 -26.3%) vs baseline: -0.7% ✅ format_noaspectTime: ✅ 310.820µs (SLO: <500.000µs 📉 -37.8%) vs baseline: +0.4% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.0% ✅ index_aspectTime: ✅ 122.885µs (SLO: <300.000µs 📉 -59.0%) vs baseline: -1.8% Memory: ✅ 43.667MB (SLO: <46.000MB -5.1%) vs baseline: +4.9% ✅ index_noaspectTime: ✅ 40.253µs (SLO: <300.000µs 📉 -86.6%) vs baseline: -1.1% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.6% ✅ join_aspectTime: ✅ 209.544µs (SLO: <300.000µs 📉 -30.2%) vs baseline: -3.4% Memory: ✅ 43.745MB (SLO: <46.000MB -4.9%) vs baseline: +5.0% ✅ join_noaspectTime: ✅ 143.222µs (SLO: <300.000µs 📉 -52.3%) vs baseline: -1.4% Memory: ✅ 43.844MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ ljust_aspectTime: ✅ 491.524µs (SLO: <700.000µs 📉 -29.8%) vs baseline: -4.1% Memory: ✅ 43.745MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ ljust_noaspectTime: ✅ 254.250µs (SLO: <300.000µs 📉 -15.3%) vs baseline: -3.0% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.4% ✅ lower_aspectTime: ✅ 293.128µs (SLO: <500.000µs 📉 -41.4%) vs baseline: -3.8% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.0% ✅ lower_noaspectTime: ✅ 235.911µs (SLO: <300.000µs 📉 -21.4%) vs baseline: -0.8% Memory: ✅ 43.863MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ lstrip_aspectTime: ✅ 0.340ms (SLO: <3.000ms 📉 -88.7%) vs baseline: 📈 +20.2% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +5.1% ✅ lstrip_noaspectTime: ✅ 0.176ms (SLO: <3.000ms 📉 -94.1%) vs baseline: -1.6% Memory: ✅ 43.844MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ modulo_aspectTime: ✅ 14.286ms (SLO: <18.750ms 📉 -23.8%) vs baseline: -0.1% Memory: ✅ 43.903MB (SLO: <46.000MB -4.6%) vs baseline: +5.5% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.796ms (SLO: <19.350ms 📉 -23.5%) vs baseline: -0.4% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.2% ✅ modulo_aspect_for_bytesTime: ✅ 14.426ms (SLO: <18.900ms 📉 -23.7%) vs baseline: +0.3% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.588ms (SLO: <19.150ms 📉 -23.8%) vs baseline: -0.4% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.1% ✅ modulo_noaspectTime: ✅ 0.360ms (SLO: <3.000ms 📉 -88.0%) vs baseline: -1.0% Memory: ✅ 43.824MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ replace_aspectTime: ✅ 18.952ms (SLO: <24.000ms 📉 -21.0%) vs baseline: +3.2% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.1% ✅ replace_noaspectTime: ✅ 281.382µs (SLO: <300.000µs -6.2%) vs baseline: +1.2% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.4% ✅ repr_aspectTime: ✅ 316.369µs (SLO: <420.000µs 📉 -24.7%) vs baseline: -2.1% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.0% ✅ repr_noaspectTime: ✅ 46.658µs (SLO: <90.000µs 📉 -48.2%) vs baseline: ~same Memory: ✅ 43.824MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ rstrip_aspectTime: ✅ 385.153µs (SLO: <500.000µs 📉 -23.0%) vs baseline: -2.8% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.3% ✅ rstrip_noaspectTime: ✅ 183.713µs (SLO: <300.000µs 📉 -38.8%) vs baseline: -3.2% Memory: ✅ 43.785MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ slice_aspectTime: ✅ 181.409µs (SLO: <300.000µs 📉 -39.5%) vs baseline: -1.9% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% ✅ slice_noaspectTime: ✅ 54.075µs (SLO: <90.000µs 📉 -39.9%) vs baseline: -0.7% Memory: ✅ 43.962MB (SLO: <46.000MB -4.4%) vs baseline: +5.7% ✅ stringio_aspectTime: ✅ 3.814ms (SLO: <5.000ms 📉 -23.7%) vs baseline: -0.7% Memory: ✅ 43.726MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ stringio_noaspectTime: ✅ 347.188µs (SLO: <500.000µs 📉 -30.6%) vs baseline: -2.0% Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +5.3% ✅ strip_aspectTime: ✅ 271.755µs (SLO: <350.000µs 📉 -22.4%) vs baseline: -2.7% Memory: ✅ 43.745MB (SLO: <46.000MB -4.9%) vs baseline: +5.1% ✅ strip_noaspectTime: ✅ 175.421µs (SLO: <240.000µs 📉 -26.9%) vs baseline: -2.4% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.2% ✅ swapcase_aspectTime: ✅ 330.887µs (SLO: <500.000µs 📉 -33.8%) vs baseline: -3.0% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.3% ✅ swapcase_noaspectTime: ✅ 265.611µs (SLO: <400.000µs 📉 -33.6%) vs baseline: -3.8% Memory: ✅ 43.844MB (SLO: <46.000MB -4.7%) vs baseline: +5.6% ✅ title_aspectTime: ✅ 319.125µs (SLO: <500.000µs 📉 -36.2%) vs baseline: -4.1% Memory: ✅ 43.706MB (SLO: <46.000MB -5.0%) vs baseline: +5.1% ✅ title_noaspectTime: ✅ 255.607µs (SLO: <400.000µs 📉 -36.1%) vs baseline: -3.0% Memory: ✅ 43.844MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ translate_aspectTime: ✅ 545.810µs (SLO: <700.000µs 📉 -22.0%) vs baseline: +7.8% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.3% ✅ translate_noaspectTime: ✅ 424.116µs (SLO: <500.000µs 📉 -15.2%) vs baseline: -1.7% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +5.1% ✅ upper_aspectTime: ✅ 297.037µs (SLO: <500.000µs 📉 -40.6%) vs baseline: -1.8% Memory: ✅ 43.765MB (SLO: <46.000MB -4.9%) vs baseline: +5.3% ✅ upper_noaspectTime: ✅ 234.249µs (SLO: <400.000µs 📉 -41.4%) vs baseline: -2.8% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 519.905µs (SLO: <700.000µs 📉 -25.7%) vs baseline: 📈 +21.0% Memory: ✅ 43.660MB (SLO: <46.000MB -5.1%) vs baseline: +5.2% ✅ ospathbasename_noaspectTime: ✅ 423.495µs (SLO: <700.000µs 📉 -39.5%) vs baseline: -1.5% Memory: ✅ 43.721MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% ✅ ospathjoin_aspectTime: ✅ 624.287µs (SLO: <700.000µs 📉 -10.8%) vs baseline: +2.2% Memory: ✅ 43.625MB (SLO: <46.000MB -5.2%) vs baseline: +4.8% ✅ ospathjoin_noaspectTime: ✅ 630.949µs (SLO: <700.000µs -9.9%) vs baseline: +1.5% Memory: ✅ 43.679MB (SLO: <46.000MB -5.0%) vs baseline: +5.4% ✅ ospathnormcase_aspectTime: ✅ 347.485µs (SLO: <700.000µs 📉 -50.4%) vs baseline: -0.2% Memory: ✅ 43.612MB (SLO: <46.000MB -5.2%) vs baseline: +5.2% ✅ ospathnormcase_noaspectTime: ✅ 357.245µs (SLO: <700.000µs 📉 -49.0%) vs baseline: +0.6% Memory: ✅ 43.718MB (SLO: <46.000MB -5.0%) vs baseline: +5.3% ✅ ospathsplit_aspectTime: ✅ 482.715µs (SLO: <700.000µs 📉 -31.0%) vs baseline: -0.9% Memory: ✅ 43.691MB (SLO: <46.000MB -5.0%) vs baseline: +5.3% ✅ ospathsplit_noaspectTime: ✅ 499.936µs (SLO: <700.000µs 📉 -28.6%) vs baseline: +0.7% Memory: ✅ 43.707MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% ✅ ospathsplitdrive_aspectTime: ✅ 370.586µs (SLO: <700.000µs 📉 -47.1%) vs baseline: -0.6% Memory: ✅ 43.611MB (SLO: <46.000MB -5.2%) vs baseline: +5.4% ✅ ospathsplitdrive_noaspectTime: ✅ 73.403µs (SLO: <700.000µs 📉 -89.5%) vs baseline: +0.6% Memory: ✅ 43.764MB (SLO: <46.000MB -4.9%) vs baseline: +5.6% ✅ ospathsplitext_aspectTime: ✅ 453.948µs (SLO: <700.000µs 📉 -35.2%) vs baseline: -0.7% Memory: ✅ 43.682MB (SLO: <46.000MB -5.0%) vs baseline: +5.2% ✅ ospathsplitext_noaspectTime: ✅ 463.117µs (SLO: <700.000µs 📉 -33.8%) vs baseline: ~same Memory: ✅ 43.675MB (SLO: <46.000MB -5.1%) vs baseline: +4.8% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 2.333µs (SLO: <20.000µs 📉 -88.3%) vs baseline: 📈 +12.9% Memory: ✅ 36.667MB (SLO: <38.000MB -3.5%) vs baseline: +5.9% ✅ 1-count-metrics-100-timesTime: ✅ 151.814µs (SLO: <220.000µs 📉 -31.0%) vs baseline: +1.7% Memory: ✅ 36.608MB (SLO: <38.000MB -3.7%) vs baseline: +5.8% ✅ 1-distribution-metric-1-timesTime: ✅ 2.404µs (SLO: <20.000µs 📉 -88.0%) vs baseline: +1.8% Memory: ✅ 36.608MB (SLO: <38.000MB -3.7%) vs baseline: +5.5% ✅ 1-distribution-metrics-100-timesTime: ✅ 161.589µs (SLO: <230.000µs 📉 -29.7%) vs baseline: -0.8% Memory: ✅ 36.667MB (SLO: <38.000MB -3.5%) vs baseline: +5.8% ✅ 1-gauge-metric-1-timesTime: ✅ 1.964µs (SLO: <20.000µs 📉 -90.2%) vs baseline: -0.3% Memory: ✅ 36.687MB (SLO: <38.000MB -3.5%) vs baseline: +5.9% ✅ 1-gauge-metrics-100-timesTime: ✅ 136.899µs (SLO: <150.000µs -8.7%) vs baseline: ~same Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +5.7% ✅ 1-rate-metric-1-timesTime: ✅ 2.257µs (SLO: <20.000µs 📉 -88.7%) vs baseline: +2.6% Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +5.7% ✅ 1-rate-metrics-100-timesTime: ✅ 167.425µs (SLO: <250.000µs 📉 -33.0%) vs baseline: +3.0% Memory: ✅ 36.667MB (SLO: <38.000MB -3.5%) vs baseline: +6.1% ✅ 100-count-metrics-100-timesTime: ✅ 15.472ms (SLO: <22.000ms 📉 -29.7%) vs baseline: +3.7% Memory: ✅ 36.451MB (SLO: <38.000MB -4.1%) vs baseline: +5.4% ✅ 100-distribution-metrics-100-timesTime: ✅ 1.749ms (SLO: <2.550ms 📉 -31.4%) vs baseline: +1.7% Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +6.2% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.397ms (SLO: <1.550ms -9.8%) vs baseline: ~same Memory: ✅ 36.471MB (SLO: <38.000MB -4.0%) vs baseline: +5.5% ✅ 100-rate-metrics-100-timesTime: ✅ 1.743ms (SLO: <2.550ms 📉 -31.6%) vs baseline: +4.8% Memory: ✅ 36.549MB (SLO: <38.000MB -3.8%) vs baseline: +5.4% ✅ flush-1-metricTime: ✅ 3.766µs (SLO: <20.000µs 📉 -81.2%) vs baseline: +4.5% Memory: ✅ 36.648MB (SLO: <38.000MB -3.6%) vs baseline: +5.0% ✅ flush-100-metricsTime: ✅ 180.116µs (SLO: <250.000µs 📉 -28.0%) vs baseline: +2.9% Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +5.0% ✅ flush-1000-metricsTime: ✅ 2.257ms (SLO: <2.500ms -9.7%) vs baseline: +1.9% Memory: ✅ 37.454MB (SLO: <38.750MB -3.3%) vs baseline: +5.9% 🟡 Near SLO Breach (2 suites)🟡 djangosimple - 30/30✅ appsecTime: ✅ 19.576ms (SLO: <22.300ms 📉 -12.2%) vs baseline: -0.3% Memory: ✅ 68.666MB (SLO: <73.500MB -6.6%) vs baseline: +4.9% ✅ exception-replay-enabledTime: ✅ 1.385ms (SLO: <1.450ms -4.5%) vs baseline: -0.5% Memory: ✅ 66.855MB (SLO: <71.500MB -6.5%) vs baseline: +5.1% ✅ iastTime: ✅ 19.650ms (SLO: <22.250ms 📉 -11.7%) vs baseline: -0.3% Memory: ✅ 68.674MB (SLO: <75.000MB -8.4%) vs baseline: +5.1% ✅ profilerTime: ✅ 15.264ms (SLO: <16.550ms -7.8%) vs baseline: ~same Memory: ✅ 60.236MB (SLO: <61.000MB 🟡 -1.3%) vs baseline: +5.2% ✅ resource-renamingTime: ✅ 19.493ms (SLO: <21.750ms 📉 -10.4%) vs baseline: -0.7% Memory: ✅ 68.845MB (SLO: <73.500MB -6.3%) vs baseline: +5.2% ✅ span-code-originTime: ✅ 19.977ms (SLO: <28.200ms 📉 -29.2%) vs baseline: +0.8% Memory: ✅ 68.491MB (SLO: <75.000MB -8.7%) vs baseline: +4.5% ✅ tracerTime: ✅ 19.652ms (SLO: <21.750ms -9.6%) vs baseline: ~same Memory: ✅ 68.629MB (SLO: <75.000MB -8.5%) vs baseline: +4.8% ✅ tracer-and-profilerTime: ✅ 21.113ms (SLO: <23.500ms 📉 -10.2%) vs baseline: +0.1% Memory: ✅ 70.493MB (SLO: <75.000MB -6.0%) vs baseline: +5.1% ✅ tracer-dont-create-db-spansTime: ✅ 19.764ms (SLO: <21.500ms -8.1%) vs baseline: +0.2% Memory: ✅ 68.684MB (SLO: <75.000MB -8.4%) vs baseline: +5.0% ✅ tracer-minimalTime: ✅ 16.798ms (SLO: <17.500ms -4.0%) vs baseline: +0.2% Memory: ✅ 68.527MB (SLO: <75.000MB -8.6%) vs baseline: +4.7% ✅ tracer-nativeTime: ✅ 19.506ms (SLO: <21.750ms 📉 -10.3%) vs baseline: -0.2% Memory: ✅ 68.636MB (SLO: <72.500MB -5.3%) vs baseline: +4.7% ✅ tracer-no-cachesTime: ✅ 17.643ms (SLO: <19.650ms 📉 -10.2%) vs baseline: +0.5% Memory: ✅ 68.470MB (SLO: <75.000MB -8.7%) vs baseline: +4.5% ✅ tracer-no-databasesTime: ✅ 19.239ms (SLO: <20.100ms -4.3%) vs baseline: +0.4% Memory: ✅ 68.498MB (SLO: <75.000MB -8.7%) vs baseline: +4.5% ✅ tracer-no-middlewareTime: ✅ 19.437ms (SLO: <21.500ms -9.6%) vs baseline: +0.8% Memory: ✅ 68.461MB (SLO: <75.000MB -8.7%) vs baseline: +4.6% ✅ tracer-no-templatesTime: ✅ 19.567ms (SLO: <22.000ms 📉 -11.1%) vs baseline: +0.9% Memory: ✅ 68.606MB (SLO: <73.500MB -6.7%) vs baseline: +4.9% 🟡 packagespackageforrootmodulemapping - 4/4✅ cache_offTime: ✅ 352.418ms (SLO: <354.300ms 🟡 -0.5%) vs baseline: -1.2% Memory: ✅ 42.699MB (SLO: <46.000MB -7.2%) vs baseline: +6.7% ✅ cache_onTime: ✅ 0.383µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +0.1% Memory: ✅ 40.465MB (SLO: <46.000MB 📉 -12.0%) vs baseline: +5.5% 📉 Performance Improvements (1 suite)📉 iastaspectssplit - 12/12✅ rsplit_aspectTime: ✅ 147.968µs (SLO: <250.000µs 📉 -40.8%) vs baseline: -4.3% Memory: ✅ 43.649MB (SLO: <46.000MB -5.1%) vs baseline: +5.0% ✅ rsplit_noaspectTime: ✅ 151.910µs (SLO: <250.000µs 📉 -39.2%) vs baseline: -9.7% Memory: ✅ 43.672MB (SLO: <46.000MB -5.1%) vs baseline: +5.5% ✅ split_aspectTime: ✅ 145.983µs (SLO: <250.000µs 📉 -41.6%) vs baseline: -5.8% Memory: ✅ 43.674MB (SLO: <46.000MB -5.1%) vs baseline: +5.0% ✅ split_noaspectTime: ✅ 149.808µs (SLO: <250.000µs 📉 -40.1%) vs baseline: 📉 -10.3% Memory: ✅ 43.606MB (SLO: <46.000MB -5.2%) vs baseline: +5.1% ✅ splitlines_aspectTime: ✅ 146.498µs (SLO: <250.000µs 📉 -41.4%) vs baseline: -5.6% Memory: ✅ 43.648MB (SLO: <46.000MB -5.1%) vs baseline: +5.2% ✅ splitlines_noaspectTime: ✅ 149.104µs (SLO: <250.000µs 📉 -40.4%) vs baseline: -8.6% Memory: ✅ 43.632MB (SLO: <46.000MB -5.1%) vs baseline: +5.2%
|
cf3b480 to
d5d2582
Compare
This comment has been minimized.
This comment has been minimized.
d5d2582 to
471df09
Compare
471df09 to
7834aed
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7834aed050
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex can you review this? |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7834aed050
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
brettlangdon
left a comment
There was a problem hiding this comment.
core owned files lgtm
might want to move ddtrace/internal/settings/profiling.pyi to being owned by profiling team.
|
a5ae7f6 to
9b2f155
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9b2f1557e4
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
c1483e1 to
54bd368
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 54bd3689f0
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
54bd368 to
52290a5
Compare
ddtrace/internal/datadog/profiling/dd_wrapper/include/libdatadog_helpers.hpp
Show resolved
Hide resolved
06972ce to
124ad3d
Compare
|
View all feedbacks in Devflow UI.
This pull request is not mergeable according to GitHub. Common reasons include pending required checks, missing approvals, or merge conflicts — but it could also be blocked by other repository rules or settings.
This merge request will be merged without running the pre merge checks for of the following reason: mq broken.
Warning This change was merged without running any pre merge CI checks Reason: mq broken |
13a2133 to
97e337d
Compare

Description
This PR adds exception profiling to dd-trace-py for Python versions 3.12+. The exception collector captures handled exceptions along with their stack traces and reports them as profiling samples. This gives users visibility into exception hotspots in their applications: which exception types are thrown most frequently, where they originate, and optionally what messages they carry.
Architecture
RFC
The
ExceptionCollectoris a new profiling collector that hooks into the Python runtime to detect when exceptions are handled. It uses two different mechanisms depending on the Python version:Python 3.12+:
sys.monitoringAPI:The collector registers a callback for
sys.monitoring.events.EXCEPTION_HANDLEDusing thePROFILER_IDtool slot. When an exception is caught by anexceptblock anywhere in the application, CPython fires theEXCEPTION_HANDLEDevent and our_on_exception_handledcallback receives the code object, instruction offset, and the exception object directly.sys.monitoringis an API introduced in PEP 669.Sampling
Both callbacks use Poisson sampling to limit overhead. A Cython implementation (
_fast_poisson.pyx) draws the next sample interval from a Poisson distribution with configurable mean (default: 100). This means on average 1 in every 100 exceptions is captured, enough for statistical profiling while keeping hot-path overhead to a single integer comparison and increment for non-sampled exceptions. The PRNG uses SplitMix64 seeded fromos.urandom.Sample collection
When an exception is sampled,
_collect_exceptioncreates addup.SampleHandleand pushes:module.ClassName)collect_messageis enabled; new C++ labelexception_messageadded to the libdatadog bridge)max_nframe, reversed to bottom-up order)The sample is flushed to the ddup C++ library which encodes it in pprof format for upload.
Configuration
New environment variables under
DD_PROFILING_EXCEPTION_*:DD_PROFILING_EXCEPTION_ENABLEDfalseDD_PROFILING_EXCEPTION_SAMPLING_INTERVAL100DD_PROFILING_EXCEPTION_COLLECT_MESSAGEtrueTesting
Unit tests. Ran on a test app. Will write prof-correctness for this also
Risks
Additional Notes