ci(profiling): wire py3.15 into build matrix, riotfile, and CI (PROF-14200) - #17624
Conversation
8f689cf to
4cada08
Compare
2288ffc to
234be41
Compare
234be41 to
e0b910a
Compare
Codeowners resolved as |
0179a7e to
017fe3d
Compare
Performance SLOsComparing candidate vlad/ddtracepy-315-profiling-only (70f6878) with baseline vlad/ddtracepy-315-tracing-wrapping (b17e204) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 105.170µs (SLO: <130.000µs 📉 -19.1%) vs baseline: +0.7% Memory: ✅ 43.549MB (SLO: <46.000MB -5.3%) vs baseline: +4.3% ✅ add_inplace_aspectTime: ✅ 101.430µs (SLO: <130.000µs 📉 -22.0%) vs baseline: -2.3% Memory: ✅ 43.613MB (SLO: <46.000MB -5.2%) vs baseline: +4.4% ✅ add_inplace_noaspectTime: ✅ 28.199µs (SLO: <40.000µs 📉 -29.5%) vs baseline: -0.7% Memory: ✅ 43.559MB (SLO: <46.000MB -5.3%) vs baseline: +4.3% ✅ add_noaspectTime: ✅ 48.969µs (SLO: <70.000µs 📉 -30.0%) vs baseline: -0.6% Memory: ✅ 43.497MB (SLO: <46.000MB -5.4%) vs baseline: +4.5% ✅ bytearray_aspectTime: ✅ 255.944µs (SLO: <400.000µs 📉 -36.0%) vs baseline: -2.6% Memory: ✅ 43.512MB (SLO: <46.000MB -5.4%) vs baseline: +4.2% ✅ bytearray_extend_aspectTime: ✅ 642.569µs (SLO: <800.000µs 📉 -19.7%) vs baseline: -2.3% Memory: ✅ 43.664MB (SLO: <46.000MB -5.1%) vs baseline: +4.5% ✅ bytearray_extend_noaspectTime: ✅ 269.036µs (SLO: <400.000µs 📉 -32.7%) vs baseline: -0.1% Memory: ✅ 43.585MB (SLO: <46.000MB -5.3%) vs baseline: +4.4% ✅ bytearray_noaspectTime: ✅ 145.357µs (SLO: <300.000µs 📉 -51.5%) vs baseline: -1.0% Memory: ✅ 43.439MB (SLO: <46.000MB -5.6%) vs baseline: +3.9% ✅ bytes_aspectTime: ✅ 224.247µs (SLO: <300.000µs 📉 -25.3%) vs baseline: -3.1% Memory: ✅ 43.409MB (SLO: <46.000MB -5.6%) vs baseline: +4.2% ✅ bytes_noaspectTime: ✅ 135.104µs (SLO: <200.000µs 📉 -32.4%) vs baseline: -1.0% Memory: ✅ 43.407MB (SLO: <46.000MB -5.6%) vs baseline: +3.9% ✅ bytesio_aspectTime: ✅ 3.816ms (SLO: <5.000ms 📉 -23.7%) vs baseline: -1.8% Memory: ✅ 43.517MB (SLO: <46.000MB -5.4%) vs baseline: +4.1% ✅ bytesio_noaspectTime: ✅ 320.244µs (SLO: <420.000µs 📉 -23.8%) vs baseline: ~same Memory: ✅ 43.613MB (SLO: <46.000MB -5.2%) vs baseline: +4.2% ✅ capitalize_aspectTime: ✅ 89.658µs (SLO: <300.000µs 📉 -70.1%) vs baseline: -0.4% Memory: ✅ 43.503MB (SLO: <46.000MB -5.4%) vs baseline: +4.1% ✅ capitalize_noaspectTime: ✅ 265.261µs (SLO: <300.000µs 📉 -11.6%) vs baseline: +3.0% Memory: ✅ 43.480MB (SLO: <46.000MB -5.5%) vs baseline: +4.2% ✅ casefold_aspectTime: ✅ 89.637µs (SLO: <500.000µs 📉 -82.1%) vs baseline: -0.3% Memory: ✅ 43.546MB (SLO: <46.000MB -5.3%) vs baseline: +4.5% ✅ casefold_noaspectTime: ✅ 301.869µs (SLO: <500.000µs 📉 -39.6%) vs baseline: -4.8% Memory: ✅ 43.450MB (SLO: <46.000MB -5.5%) vs baseline: +3.9% ✅ decode_aspectTime: ✅ 87.080µs (SLO: <100.000µs 📉 -12.9%) vs baseline: -0.4% Memory: ✅ 43.453MB (SLO: <46.000MB -5.5%) vs baseline: +4.1% ✅ decode_noaspectTime: ✅ 153.295µs (SLO: <210.000µs 📉 -27.0%) vs baseline: -0.9% Memory: ✅ 43.420MB (SLO: <46.000MB -5.6%) vs baseline: +3.9% ✅ encode_aspectTime: ✅ 84.817µs (SLO: <200.000µs 📉 -57.6%) vs baseline: +0.1% Memory: ✅ 43.453MB (SLO: <46.000MB -5.5%) vs baseline: +4.0% ✅ encode_noaspectTime: ✅ 141.907µs (SLO: <200.000µs 📉 -29.0%) vs baseline: -1.7% Memory: ✅ 43.476MB (SLO: <46.000MB -5.5%) vs baseline: +4.4% ✅ format_aspectTime: ✅ 14.543ms (SLO: <19.200ms 📉 -24.3%) vs baseline: ~same Memory: ✅ 43.614MB (SLO: <46.000MB -5.2%) vs baseline: +4.0% ✅ format_map_aspectTime: ✅ 16.533ms (SLO: <21.500ms 📉 -23.1%) vs baseline: +0.8% Memory: ✅ 43.648MB (SLO: <46.000MB -5.1%) vs baseline: +4.0% ✅ format_map_noaspectTime: ✅ 374.727µs (SLO: <500.000µs 📉 -25.1%) vs baseline: +0.4% Memory: ✅ 43.514MB (SLO: <46.000MB -5.4%) vs baseline: +4.2% ✅ format_noaspectTime: ✅ 306.910µs (SLO: <500.000µs 📉 -38.6%) vs baseline: -4.0% Memory: ✅ 43.529MB (SLO: <46.000MB -5.4%) vs baseline: +4.1% ✅ index_aspectTime: ✅ 138.948µs (SLO: <300.000µs 📉 -53.7%) vs baseline: +7.2% Memory: ✅ 43.430MB (SLO: <46.000MB -5.6%) vs baseline: +4.1% ✅ index_noaspectTime: ✅ 40.419µs (SLO: <300.000µs 📉 -86.5%) vs baseline: -1.4% Memory: ✅ 43.496MB (SLO: <46.000MB -5.4%) vs baseline: +4.1% ✅ join_aspectTime: ✅ 213.862µs (SLO: <300.000µs 📉 -28.7%) vs baseline: -2.5% Memory: ✅ 43.514MB (SLO: <46.000MB -5.4%) vs baseline: +4.1% ✅ join_noaspectTime: ✅ 143.393µs (SLO: <300.000µs 📉 -52.2%) vs baseline: -3.0% Memory: ✅ 43.708MB (SLO: <46.000MB -5.0%) vs baseline: +4.9% ✅ ljust_aspectTime: ✅ 505.638µs (SLO: <700.000µs 📉 -27.8%) vs baseline: -1.2% Memory: ✅ 43.595MB (SLO: <46.000MB -5.2%) vs baseline: +4.1% ✅ ljust_noaspectTime: ✅ 273.705µs (SLO: <300.000µs -8.8%) vs baseline: +4.7% Memory: ✅ 43.431MB (SLO: <46.000MB -5.6%) vs baseline: +3.9% ✅ lower_aspectTime: ✅ 303.663µs (SLO: <500.000µs 📉 -39.3%) vs baseline: -2.8% Memory: ✅ 43.516MB (SLO: <46.000MB -5.4%) vs baseline: +4.2% ✅ lower_noaspectTime: ✅ 236.651µs (SLO: <300.000µs 📉 -21.1%) vs baseline: -3.9% Memory: ✅ 43.488MB (SLO: <46.000MB -5.5%) vs baseline: +4.0% ✅ lstrip_aspectTime: ✅ 0.268ms (SLO: <3.000ms 📉 -91.1%) vs baseline: -1.7% Memory: ✅ 43.472MB (SLO: <46.000MB -5.5%) vs baseline: +4.3% ✅ lstrip_noaspectTime: ✅ 0.175ms (SLO: <3.000ms 📉 -94.2%) vs baseline: -1.8% Memory: ✅ 43.456MB (SLO: <46.000MB -5.5%) vs baseline: +4.1% ✅ modulo_aspectTime: ✅ 14.296ms (SLO: <18.750ms 📉 -23.8%) vs baseline: +0.6% Memory: ✅ 43.524MB (SLO: <46.000MB -5.4%) vs baseline: +3.9% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.873ms (SLO: <19.350ms 📉 -23.1%) vs baseline: +0.7% Memory: ✅ 43.590MB (SLO: <46.000MB -5.2%) vs baseline: +3.8% ✅ modulo_aspect_for_bytesTime: ✅ 14.375ms (SLO: <18.900ms 📉 -23.9%) vs baseline: +0.3% Memory: ✅ 43.623MB (SLO: <46.000MB -5.2%) vs baseline: +4.0% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.514ms (SLO: <19.150ms 📉 -24.2%) vs baseline: ~same Memory: ✅ 43.642MB (SLO: <46.000MB -5.1%) vs baseline: +4.0% ✅ modulo_noaspectTime: ✅ 0.363ms (SLO: <3.000ms 📉 -87.9%) vs baseline: -2.3% Memory: ✅ 43.552MB (SLO: <46.000MB -5.3%) vs baseline: +4.3% ✅ replace_aspectTime: ✅ 18.328ms (SLO: <24.000ms 📉 -23.6%) vs baseline: -0.2% Memory: ✅ 43.686MB (SLO: <46.000MB -5.0%) vs baseline: +4.1% ✅ replace_noaspectTime: ✅ 283.834µs (SLO: <400.000µs 📉 -29.0%) vs baseline: -0.2% Memory: ✅ 43.529MB (SLO: <46.000MB -5.4%) vs baseline: +4.2% ✅ repr_aspectTime: ✅ 319.882µs (SLO: <420.000µs 📉 -23.8%) vs baseline: -1.8% Memory: ✅ 43.497MB (SLO: <46.000MB -5.4%) vs baseline: +4.0% ✅ repr_noaspectTime: ✅ 46.602µs (SLO: <90.000µs 📉 -48.2%) vs baseline: -0.7% Memory: ✅ 43.570MB (SLO: <46.000MB -5.3%) vs baseline: +4.4% ✅ rstrip_aspectTime: ✅ 384.240µs (SLO: <500.000µs 📉 -23.2%) vs baseline: -0.8% Memory: ✅ 43.622MB (SLO: <46.000MB -5.2%) vs baseline: +4.2% ✅ rstrip_noaspectTime: ✅ 183.220µs (SLO: <300.000µs 📉 -38.9%) vs baseline: -1.0% Memory: ✅ 43.460MB (SLO: <46.000MB -5.5%) vs baseline: +4.1% ✅ slice_aspectTime: ✅ 184.893µs (SLO: <300.000µs 📉 -38.4%) vs baseline: ~same Memory: ✅ 43.440MB (SLO: <46.000MB -5.6%) vs baseline: +4.0% ✅ slice_noaspectTime: ✅ 54.113µs (SLO: <90.000µs 📉 -39.9%) vs baseline: ~same Memory: ✅ 43.399MB (SLO: <46.000MB -5.7%) vs baseline: +4.0% ✅ stringio_aspectTime: ✅ 4.470ms (SLO: <5.000ms 📉 -10.6%) vs baseline: 📈 +13.7% Memory: ✅ 43.533MB (SLO: <46.000MB -5.4%) vs baseline: +4.2% ✅ stringio_noaspectTime: ✅ 350.531µs (SLO: <500.000µs 📉 -29.9%) vs baseline: -0.7% Memory: ✅ 43.584MB (SLO: <46.000MB -5.3%) vs baseline: +4.3% ✅ strip_aspectTime: ✅ 266.744µs (SLO: <350.000µs 📉 -23.8%) vs baseline: -1.3% Memory: ✅ 43.472MB (SLO: <46.000MB -5.5%) vs baseline: +4.2% ✅ strip_noaspectTime: ✅ 174.959µs (SLO: <240.000µs 📉 -27.1%) vs baseline: -1.6% Memory: ✅ 43.514MB (SLO: <46.000MB -5.4%) vs baseline: +4.2% ✅ swapcase_aspectTime: ✅ 337.407µs (SLO: <500.000µs 📉 -32.5%) vs baseline: -4.5% Memory: ✅ 43.622MB (SLO: <46.000MB -5.2%) vs baseline: +4.2% ✅ swapcase_noaspectTime: ✅ 275.731µs (SLO: <400.000µs 📉 -31.1%) vs baseline: -3.9% Memory: ✅ 43.636MB (SLO: <46.000MB -5.1%) vs baseline: +4.6% ✅ title_aspectTime: ✅ 328.280µs (SLO: <500.000µs 📉 -34.3%) vs baseline: -2.6% Memory: ✅ 43.532MB (SLO: <46.000MB -5.4%) vs baseline: +4.6% ✅ title_noaspectTime: ✅ 259.418µs (SLO: <400.000µs 📉 -35.1%) vs baseline: -1.8% Memory: ✅ 43.500MB (SLO: <46.000MB -5.4%) vs baseline: +4.0% ✅ translate_aspectTime: ✅ 497.433µs (SLO: <700.000µs 📉 -28.9%) vs baseline: -3.0% Memory: ✅ 43.385MB (SLO: <46.000MB -5.7%) vs baseline: +3.9% ✅ translate_noaspectTime: ✅ 421.574µs (SLO: <500.000µs 📉 -15.7%) vs baseline: -2.9% Memory: ✅ 43.486MB (SLO: <46.000MB -5.5%) vs baseline: +4.3% ✅ upper_aspectTime: ✅ 306.133µs (SLO: <500.000µs 📉 -38.8%) vs baseline: -4.3% Memory: ✅ 43.608MB (SLO: <46.000MB -5.2%) vs baseline: +4.2% ✅ upper_noaspectTime: ✅ 235.028µs (SLO: <400.000µs 📉 -41.2%) vs baseline: -4.1% Memory: ✅ 43.555MB (SLO: <46.000MB -5.3%) vs baseline: +4.3% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 530.720µs (SLO: <700.000µs 📉 -24.2%) vs baseline: 📈 +22.2% Memory: ✅ 43.523MB (SLO: <46.000MB -5.4%) vs baseline: +4.4% ✅ ospathbasename_noaspectTime: ✅ 441.691µs (SLO: <700.000µs 📉 -36.9%) vs baseline: -0.7% Memory: ✅ 43.437MB (SLO: <46.000MB -5.6%) vs baseline: +3.9% ✅ ospathjoin_aspectTime: ✅ 635.453µs (SLO: <700.000µs -9.2%) vs baseline: -1.0% Memory: ✅ 43.494MB (SLO: <46.000MB -5.4%) vs baseline: +4.4% ✅ ospathjoin_noaspectTime: ✅ 647.150µs (SLO: <700.000µs -7.5%) vs baseline: +0.2% Memory: ✅ 43.545MB (SLO: <46.000MB -5.3%) vs baseline: +4.7% ✅ ospathnormcase_aspectTime: ✅ 363.889µs (SLO: <700.000µs 📉 -48.0%) vs baseline: -0.5% Memory: ✅ 43.504MB (SLO: <46.000MB -5.4%) vs baseline: +4.3% ✅ ospathnormcase_noaspectTime: ✅ 367.104µs (SLO: <700.000µs 📉 -47.6%) vs baseline: -2.4% Memory: ✅ 43.479MB (SLO: <46.000MB -5.5%) vs baseline: +4.3% ✅ ospathsplit_aspectTime: ✅ 500.133µs (SLO: <700.000µs 📉 -28.6%) vs baseline: -1.0% Memory: ✅ 43.463MB (SLO: <46.000MB -5.5%) vs baseline: +4.4% ✅ ospathsplit_noaspectTime: ✅ 505.884µs (SLO: <700.000µs 📉 -27.7%) vs baseline: -1.3% Memory: ✅ 43.421MB (SLO: <46.000MB -5.6%) vs baseline: +4.7% ✅ ospathsplitdrive_aspectTime: ✅ 382.126µs (SLO: <700.000µs 📉 -45.4%) vs baseline: -1.6% Memory: ✅ 43.572MB (SLO: <46.000MB -5.3%) vs baseline: +4.3% ✅ ospathsplitdrive_noaspectTime: ✅ 72.787µs (SLO: <700.000µs 📉 -89.6%) vs baseline: -0.7% Memory: ✅ 43.563MB (SLO: <46.000MB -5.3%) vs baseline: +5.0% ✅ ospathsplitext_aspectTime: ✅ 478.626µs (SLO: <700.000µs 📉 -31.6%) vs baseline: -0.4% Memory: ✅ 43.573MB (SLO: <46.000MB -5.3%) vs baseline: +4.1% ✅ ospathsplitext_noaspectTime: ✅ 479.097µs (SLO: <700.000µs 📉 -31.6%) vs baseline: -1.6% Memory: ✅ 43.463MB (SLO: <46.000MB -5.5%) vs baseline: +4.3% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 2.328µs (SLO: <20.000µs 📉 -88.4%) vs baseline: 📈 +12.8% Memory: ✅ 36.235MB (SLO: <38.000MB -4.6%) vs baseline: +5.1% ✅ 1-count-metrics-100-timesTime: ✅ 152.109µs (SLO: <220.000µs 📉 -30.9%) vs baseline: +1.9% Memory: ✅ 36.235MB (SLO: <38.000MB -4.6%) vs baseline: +5.1% ✅ 1-distribution-metric-1-timesTime: ✅ 2.439µs (SLO: <20.000µs 📉 -87.8%) vs baseline: +1.4% Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +4.7% ✅ 1-distribution-metrics-100-timesTime: ✅ 165.899µs (SLO: <230.000µs 📉 -27.9%) vs baseline: ~same Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +5.1% ✅ 1-gauge-metric-1-timesTime: ✅ 2.286µs (SLO: <20.000µs 📉 -88.6%) vs baseline: +1.7% Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +5.0% ✅ 1-gauge-metrics-100-timesTime: ✅ 167.495µs (SLO: <190.000µs 📉 -11.8%) vs baseline: +2.8% Memory: ✅ 36.176MB (SLO: <38.000MB -4.8%) vs baseline: +5.0% ✅ 1-rate-metric-1-timesTime: ✅ 2.192µs (SLO: <20.000µs 📉 -89.0%) vs baseline: -0.3% Memory: ✅ 36.235MB (SLO: <38.000MB -4.6%) vs baseline: +4.9% ✅ 1-rate-metrics-100-timesTime: ✅ 164.973µs (SLO: <250.000µs 📉 -34.0%) vs baseline: +0.8% Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +5.0% ✅ 100-count-metrics-100-timesTime: ✅ 15.231ms (SLO: <22.000ms 📉 -30.8%) vs baseline: +1.4% Memory: ✅ 35.822MB (SLO: <38.000MB -5.7%) vs baseline: +3.8% ✅ 100-distribution-metrics-100-timesTime: ✅ 1.751ms (SLO: <2.550ms 📉 -31.3%) vs baseline: +1.4% Memory: ✅ 35.822MB (SLO: <38.000MB -5.7%) vs baseline: +3.7% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.708ms (SLO: <1.850ms -7.7%) vs baseline: +2.0% Memory: ✅ 35.802MB (SLO: <38.000MB -5.8%) vs baseline: +4.1% ✅ 100-rate-metrics-100-timesTime: ✅ 1.703ms (SLO: <2.550ms 📉 -33.2%) vs baseline: +2.1% Memory: ✅ 35.842MB (SLO: <38.000MB -5.7%) vs baseline: +3.8% ✅ flush-1-metricTime: ✅ 3.529µs (SLO: <20.000µs 📉 -82.4%) vs baseline: -1.1% Memory: ✅ 36.156MB (SLO: <38.000MB -4.9%) vs baseline: +3.6% ✅ flush-100-metricsTime: ✅ 174.995µs (SLO: <250.000µs 📉 -30.0%) vs baseline: -2.0% Memory: ✅ 36.274MB (SLO: <38.000MB -4.5%) vs baseline: +3.8% ✅ flush-1000-metricsTime: ✅ 2.199ms (SLO: <2.500ms 📉 -12.1%) vs baseline: -0.4% Memory: ✅ 37.041MB (SLO: <38.750MB -4.4%) vs baseline: +4.0% 🟡 Near SLO Breach (6 suites)🟡 djangosimple - 28/28✅ appsecTime: ✅ 19.702ms (SLO: <22.300ms 📉 -11.7%) vs baseline: +0.2% Memory: ✅ 71.192MB (SLO: <73.500MB -3.1%) vs baseline: +4.4% ✅ exception-replay-enabledTime: ✅ 1.370ms (SLO: <1.450ms -5.5%) vs baseline: ~same Memory: ✅ 69.403MB (SLO: <71.500MB -2.9%) vs baseline: +4.6% ✅ iastTime: ✅ 19.669ms (SLO: <22.250ms 📉 -11.6%) vs baseline: -0.3% Memory: ✅ 71.211MB (SLO: <75.000MB -5.1%) vs baseline: +4.5% ✅ profilerTime: ✅ 15.245ms (SLO: <16.550ms -7.9%) vs baseline: +0.3% Memory: ✅ 60.145MB (SLO: <61.000MB 🟡 -1.4%) vs baseline: +4.5% ✅ resource-renamingTime: ✅ 19.582ms (SLO: <21.750ms -10.0%) vs baseline: ~same Memory: ✅ 71.270MB (SLO: <73.500MB -3.0%) vs baseline: +4.6% ✅ span-code-originTime: ✅ 20.164ms (SLO: <28.200ms 📉 -28.5%) vs baseline: +1.6% Memory: ✅ 71.152MB (SLO: <75.000MB -5.1%) vs baseline: +4.5% ✅ tracerTime: ✅ 19.708ms (SLO: <21.750ms -9.4%) vs baseline: +0.2% Memory: ✅ 71.270MB (SLO: <75.000MB -5.0%) vs baseline: +4.7% ✅ tracer-and-profilerTime: ✅ 21.121ms (SLO: <23.500ms 📉 -10.1%) vs baseline: +0.4% Memory: ✅ 73.079MB (SLO: <75.000MB -2.6%) vs baseline: +4.7% ✅ tracer-dont-create-db-spansTime: ✅ 19.720ms (SLO: <21.500ms -8.3%) vs baseline: -0.4% Memory: ✅ 71.192MB (SLO: <75.000MB -5.1%) vs baseline: +4.5% ✅ tracer-minimalTime: ✅ 17.832ms (SLO: <18.500ms -3.6%) vs baseline: -0.9% Memory: ✅ 71.251MB (SLO: <75.000MB -5.0%) vs baseline: +4.7% ✅ tracer-no-cachesTime: ✅ 18.864ms (SLO: <19.650ms -4.0%) vs baseline: -0.1% Memory: ✅ 71.211MB (SLO: <75.000MB -5.1%) vs baseline: +4.5% ✅ tracer-no-databasesTime: ✅ 20.611ms (SLO: <21.100ms -2.3%) vs baseline: -0.4% Memory: ✅ 71.270MB (SLO: <75.000MB -5.0%) vs baseline: +4.7% ✅ tracer-no-middlewareTime: ✅ 19.402ms (SLO: <21.500ms -9.8%) vs baseline: ~same Memory: ✅ 71.172MB (SLO: <75.000MB -5.1%) vs baseline: +4.5% ✅ tracer-no-templatesTime: ✅ 19.530ms (SLO: <22.000ms 📉 -11.2%) vs baseline: +0.7% Memory: ✅ 71.231MB (SLO: <73.500MB -3.1%) vs baseline: +4.7% 🟡 otelspan - 22/22✅ add-eventTime: ✅ 41.391ms (SLO: <47.150ms 📉 -12.2%) vs baseline: -0.5% Memory: ✅ 41.207MB (SLO: <47.000MB 📉 -12.3%) vs baseline: +4.1% ✅ add-metricsTime: ✅ 233.419ms (SLO: <344.800ms 📉 -32.3%) vs baseline: -0.6% Memory: ✅ 45.055MB (SLO: <47.500MB -5.1%) vs baseline: +3.9% ✅ add-tagsTime: ✅ 264.752ms (SLO: <330.000ms 📉 -19.8%) vs baseline: ~same Memory: ✅ 45.162MB (SLO: <47.500MB -4.9%) vs baseline: +4.2% ✅ get-contextTime: ✅ 80.978ms (SLO: <92.350ms 📉 -12.3%) vs baseline: +0.3% Memory: ✅ 40.914MB (SLO: <46.500MB 📉 -12.0%) vs baseline: +4.5% ✅ is-recordingTime: ✅ 37.765ms (SLO: <44.500ms 📉 -15.1%) vs baseline: +0.2% Memory: ✅ 40.646MB (SLO: <47.500MB 📉 -14.4%) vs baseline: +4.4% ✅ record-exceptionTime: ✅ 62.520ms (SLO: <67.650ms -7.6%) vs baseline: ~same Memory: ✅ 41.455MB (SLO: <47.000MB 📉 -11.8%) vs baseline: +4.3% ✅ set-statusTime: ✅ 43.393ms (SLO: <50.400ms 📉 -13.9%) vs baseline: -0.3% Memory: ✅ 40.557MB (SLO: <47.000MB 📉 -13.7%) vs baseline: +4.3% ✅ startTime: ✅ 38.726ms (SLO: <44.500ms 📉 -13.0%) vs baseline: +4.0% Memory: ✅ 40.685MB (SLO: <47.000MB 📉 -13.4%) vs baseline: +4.5% ✅ start-finishTime: ✅ 89.893ms (SLO: <92.000ms -2.3%) vs baseline: ~same Memory: ✅ 38.378MB (SLO: <46.500MB 📉 -17.5%) vs baseline: +3.7% ✅ start-finish-telemetryTime: ✅ 91.503ms (SLO: <93.000ms 🟡 -1.6%) vs baseline: -0.4% Memory: ✅ 38.398MB (SLO: <46.500MB 📉 -17.4%) vs baseline: +4.1% ✅ update-nameTime: ✅ 38.931ms (SLO: <45.150ms 📉 -13.8%) vs baseline: ~same Memory: ✅ 40.661MB (SLO: <47.000MB 📉 -13.5%) vs baseline: +4.2% 🟡 packagesupdateimporteddependencies - 24/24 (1 unstable)✅ import_manyTime: ✅ 167.952µs (SLO: <170.000µs 🟡 -1.2%) vs baseline: -0.2% Memory: ✅ 40.583MB (SLO: <46.000MB 📉 -11.8%) vs baseline: +4.2% ✅ import_many_cachedTime: ✅ 132.594µs (SLO: <170.000µs 📉 -22.0%) vs baseline: +0.6% Memory: ✅ 40.535MB (SLO: <46.000MB 📉 -11.9%) vs baseline: +3.9% ✅ import_many_stdlibTime: ✅ 1.263ms (SLO: <1.750ms 📉 -27.8%) vs baseline: +0.9% Memory: ✅ 40.567MB (SLO: <46.000MB 📉 -11.8%) vs baseline: +4.1%
|
184925e to
98ba33c
Compare
8a7bce4 to
85097be
Compare
98ba33c to
78d3887
Compare
85097be to
5f74207
Compare
78d3887 to
ae99f09
Compare
6c0f38f to
2020708
Compare
ae99f09 to
6965f36
Compare
48a0ae1 to
21d0945
Compare
6965f36 to
61619cc
Compare
21d0945 to
4ec133f
Compare
61619cc to
0c6e6a4
Compare
There was a problem hiding this comment.
Pull request overview
This PR extends Continuous Profiler + crashtracker support to CPython 3.15 (non-free-threaded), adapting to CPython internal ABI changes in frame ownership/state and updating the Python-side asyncio task-linking integration. It also adjusts build/packaging/CI to allow 3.15 builds (including ABI3 forward-compat for transitive pyo3 deps) and adds native tests to lock in CPython layout assumptions.
Changes:
- Update native stack profiler (Echion) and crashtracker to handle CPython 3.15 frame ABI changes; add compile-time/runtime native tests for enum/layout contracts.
- Harden asyncio integration for Python 3.15+ by guarding
asyncio.current_task()when invoked outside a running event loop. - Expand build/CI matrices and tooling to include Python 3.15, plus a new CMake helper for resolving Rust-generated native headers.
Reviewed changes
Copilot reviewed 27 out of 28 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/profiling/test_scheduler.py | Avoid real ddup uploads in a logging-focused scheduler test by patching upload. |
| ddtrace/profiling/_asyncio.py | Guard task-linking wrappers against current_task() RuntimeError on 3.15+. |
| ddtrace/internal/wrapping/asyncs.py | Add explicit “unsupported for 3.16+” guard; keep 3.15 bytecode branch. |
| ddtrace/internal/datadog/profiling/stack/src/echion/frame.cc | Handle _frameowner changes (incl. 3.15 removal of CSTACK) with explicit switch handling. |
| ddtrace/internal/datadog/profiling/stack/echion/echion/cpython/tasks.h | Add 3.15 PyGen_yf branch to account for new frame state in nogil builds. |
| ddtrace/internal/datadog/profiling/stack/test/test_frame_state_315.cpp | New gtest validating 3.15 frame-state behavior and guards. |
| ddtrace/internal/datadog/profiling/stack/test/test_cpython_layout_contracts.cpp | New compile-time contracts (static_assert) for CPython enum values relied on by Echion. |
| ddtrace/internal/datadog/profiling/stack/test/CMakeLists.txt | Ensure test targets get the same include dirs/defs as the extension; add 3.15-only test. |
| ddtrace/internal/datadog/profiling/stack/CMakeLists.txt | Use NativeHeaders.cmake to locate Rust-generated headers via a single resolved dir. |
| ddtrace/internal/datadog/profiling/stack/fuzz/CMakeLists.txt | Switch fuzz target include path to resolved native headers directory. |
| ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt | Use NativeHeaders.cmake for Rust-generated headers. |
| ddtrace/internal/datadog/profiling/dd_wrapper/src/sample.cpp | Include Python.h first to avoid _POSIX_C_SOURCE redefinition warnings/errors on 3.15+. |
| ddtrace/internal/datadog/profiling/cmake/NativeHeaders.cmake | New module to resolve Rust-generated native header path (env-provided or computed fallback). |
| ddtrace/internal/datadog/profiling/cmake/FindLibNative.cmake | Use NativeHeaders.cmake to locate include dir instead of hardcoded per-minor path. |
| src/native/crashtracker/crashtracker_runtime_stacks.rs | Guard frame-walking: avoid PyFrame_GetBack where unavailable (3.14+ / limited API). |
| src/native/crashtracker.rs | Update pyo3 0.28 skip_from_py_object placement and document rationale. |
| src/native/tracer_flare.rs | Update pyo3 0.28 from_py_object usage and document rationale. |
| src/native/Cargo.lock | Dependency lock updates (incl. pyo3 ecosystem bumps) to enable 3.15 support. |
| setup.py | Set PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 on Python 3.15 builds as a safety net. |
| riotfile.py | Keep 3.15 opt-in scoped to profiling/crashtracker; set ABI3 forward-compat env for builds. |
| .riot/requirements/e26245b.txt | Add compiled 3.15 requirements set. |
| .riot/requirements/95077af.txt | Add compiled 3.15 requirements set. |
| .riot/requirements/1c6cb02.txt | Add compiled 3.15 requirements set. |
| .riot/requirements/1bfec91.txt | Add compiled 3.15 requirements set. |
| .riot/requirements/1857594.txt | Add compiled 3.15 requirements set. |
| .gitlab/package.yml | Add separate allow-failure cp315 build job pending manylinux image support. |
| .gitlab-ci.yml | Add separate allow-failure profiling_native_py315 job pending base image updates. |
| .github/workflows/generate-package-versions.yml | Add Python 3.15 to the version-generation workflow matrix. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
35010b5 to
c40b339
Compare
8d45b56 to
fb4efb9
Compare
fb4efb9 to
9564e7a
Compare
13b2e13 to
6314017
Compare
217187a to
e1f83fe
Compare
ee85127 to
3f47516
Compare
e1f83fe to
905a3d8
Compare
905a3d8 to
49c1ffe
Compare
|
This pull request has been automatically closed after a period of inactivity. |
← Prev: collectors PR | Next → #18389
Description
Wires Python 3.15 into the build matrix, riotfile, and CI after the native components
(previous PRs in this stack) are in place.
riot / venvs (
riotfile.py,.riot/requirements/):profile(nested 3.14+ venv),profile-memalloc(select_pys() + 3.15), andcrashtracker(select_pys(min_version=3.12) + 3.15)Dependencies (
requirements.csv,lib-injection/sources/requirements.csv):bytecodeentryCI matrices:
.gitlab-ci.yml: 3.15 added toprofiling_nativematrices (sanitizers, valgrind).gitlab/package.yml: cp315 added to wheel build matrix.gitlab/templates/build-base-venvs.yml: 3.15 added.github/workflows/generate-package-versions.yml: 3.15 addedci: remove detect-global-locks.yml(superseded by riot migration in ci: migrate detect_global_locks to riot #17117)Build (
setup.py):PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1on 3.15 builds so pyo3 0.27.x transitivedeps (e.g.
rpds-py) build via stable ABI. Harmless on 3.9–3.14.Testing
CI: wheel build matrix exercising cp315 on x86_64 + aarch64;
profiling_nativesanitizer jobs.Risks
None. CI config only; no runtime behavior changes.
Additional Notes
Part of the Python 3.15 support stack. Relates to #17809.