feat(tracing): [1/n] support Python 3.15 coroutine and generator wrapping #17446#17531
feat(tracing): [1/n] support Python 3.15 coroutine and generator wrapping #17446#17531vlad-scherbich wants to merge 12 commits intomainfrom
Conversation
aa07e99 to
06e9017
Compare
Codeowners resolved as |
This comment has been minimized.
This comment has been minimized.
Performance SLOsComparing candidate vlad/ddtracepy-315-tracing-wrapping (fff2289) with baseline main (f062c81) 📈 Performance Regressions (2 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 105.328µs (SLO: <130.000µs 📉 -19.0%) vs baseline: -2.5% Memory: ✅ 43.865MB (SLO: <46.000MB -4.6%) vs baseline: +5.3% ✅ add_inplace_aspectTime: ✅ 103.189µs (SLO: <130.000µs 📉 -20.6%) vs baseline: -3.0% Memory: ✅ 43.837MB (SLO: <46.000MB -4.7%) vs baseline: +4.8% ✅ add_inplace_noaspectTime: ✅ 28.151µs (SLO: <40.000µs 📉 -29.6%) vs baseline: -0.8% Memory: ✅ 43.786MB (SLO: <46.000MB -4.8%) vs baseline: +4.9% ✅ add_noaspectTime: ✅ 49.297µs (SLO: <70.000µs 📉 -29.6%) vs baseline: -2.1% Memory: ✅ 43.950MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ bytearray_aspectTime: ✅ 272.631µs (SLO: <400.000µs 📉 -31.8%) vs baseline: +6.1% Memory: ✅ 43.838MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ bytearray_extend_aspectTime: ✅ 656.071µs (SLO: <800.000µs 📉 -18.0%) vs baseline: -0.2% Memory: ✅ 43.961MB (SLO: <46.000MB -4.4%) vs baseline: +5.5% ✅ bytearray_extend_noaspectTime: ✅ 265.579µs (SLO: <400.000µs 📉 -33.6%) vs baseline: -2.5% Memory: ✅ 43.927MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ bytearray_noaspectTime: ✅ 141.848µs (SLO: <300.000µs 📉 -52.7%) vs baseline: +0.2% Memory: ✅ 43.910MB (SLO: <46.000MB -4.5%) vs baseline: +5.0% ✅ bytes_aspectTime: ✅ 233.438µs (SLO: <300.000µs 📉 -22.2%) vs baseline: +3.7% Memory: ✅ 43.882MB (SLO: <46.000MB -4.6%) vs baseline: +5.1% ✅ bytes_noaspectTime: ✅ 136.891µs (SLO: <200.000µs 📉 -31.6%) vs baseline: -1.6% Memory: ✅ 43.838MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ bytesio_aspectTime: ✅ 3.832ms (SLO: <5.000ms 📉 -23.4%) vs baseline: -1.3% Memory: ✅ 43.824MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ bytesio_noaspectTime: ✅ 318.060µs (SLO: <420.000µs 📉 -24.3%) vs baseline: -0.8% Memory: ✅ 43.818MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ capitalize_aspectTime: ✅ 89.853µs (SLO: <300.000µs 📉 -70.0%) vs baseline: +0.5% Memory: ✅ 43.845MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ capitalize_noaspectTime: ✅ 263.378µs (SLO: <300.000µs 📉 -12.2%) vs baseline: +2.3% Memory: ✅ 43.980MB (SLO: <46.000MB -4.4%) vs baseline: +5.4% ✅ casefold_aspectTime: ✅ 89.500µs (SLO: <500.000µs 📉 -82.1%) vs baseline: -1.4% Memory: ✅ 43.954MB (SLO: <46.000MB -4.4%) vs baseline: +5.4% ✅ casefold_noaspectTime: ✅ 314.296µs (SLO: <500.000µs 📉 -37.1%) vs baseline: -4.2% Memory: ✅ 43.831MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ decode_aspectTime: ✅ 87.037µs (SLO: <100.000µs 📉 -13.0%) vs baseline: -0.3% Memory: ✅ 43.814MB (SLO: <46.000MB -4.8%) vs baseline: +4.9% ✅ decode_noaspectTime: ✅ 155.697µs (SLO: <210.000µs 📉 -25.9%) vs baseline: -1.0% Memory: ✅ 43.812MB (SLO: <46.000MB -4.8%) vs baseline: +5.1% ✅ encode_aspectTime: ✅ 84.755µs (SLO: <200.000µs 📉 -57.6%) vs baseline: +0.5% Memory: ✅ 43.889MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ encode_noaspectTime: ✅ 145.199µs (SLO: <200.000µs 📉 -27.4%) vs baseline: +0.6% Memory: ✅ 43.880MB (SLO: <46.000MB -4.6%) vs baseline: +4.9% ✅ format_aspectTime: ✅ 14.618ms (SLO: <19.200ms 📉 -23.9%) vs baseline: ~same Memory: ✅ 44.004MB (SLO: <46.000MB -4.3%) vs baseline: +4.6% ✅ format_map_aspectTime: ✅ 16.321ms (SLO: <21.500ms 📉 -24.1%) vs baseline: -0.3% Memory: ✅ 43.887MB (SLO: <46.000MB -4.6%) vs baseline: +4.7% ✅ format_map_noaspectTime: ✅ 373.594µs (SLO: <500.000µs 📉 -25.3%) vs baseline: -0.4% Memory: ✅ 43.948MB (SLO: <46.000MB -4.5%) vs baseline: +5.4% ✅ format_noaspectTime: ✅ 315.521µs (SLO: <500.000µs 📉 -36.9%) vs baseline: -1.9% Memory: ✅ 43.867MB (SLO: <46.000MB -4.6%) vs baseline: +4.9% ✅ index_aspectTime: ✅ 146.817µs (SLO: <300.000µs 📉 -51.1%) vs baseline: 📈 +14.7% Memory: ✅ 43.857MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ index_noaspectTime: ✅ 40.366µs (SLO: <300.000µs 📉 -86.5%) vs baseline: -1.5% Memory: ✅ 43.856MB (SLO: <46.000MB -4.7%) vs baseline: +5.5% ✅ join_aspectTime: ✅ 218.960µs (SLO: <300.000µs 📉 -27.0%) vs baseline: +0.9% Memory: ✅ 43.846MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ join_noaspectTime: ✅ 145.853µs (SLO: <300.000µs 📉 -51.4%) vs baseline: +1.3% Memory: ✅ 43.808MB (SLO: <46.000MB -4.8%) vs baseline: +4.8% ✅ ljust_aspectTime: ✅ 518.270µs (SLO: <700.000µs 📉 -26.0%) vs baseline: -0.8% Memory: ✅ 43.847MB (SLO: <46.000MB -4.7%) vs baseline: +4.8% ✅ ljust_noaspectTime: ✅ 274.925µs (SLO: <300.000µs -8.4%) vs baseline: +1.4% Memory: ✅ 43.786MB (SLO: <46.000MB -4.8%) vs baseline: +4.8% ✅ lower_aspectTime: ✅ 307.202µs (SLO: <500.000µs 📉 -38.6%) vs baseline: -0.5% Memory: ✅ 43.933MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ lower_noaspectTime: ✅ 239.086µs (SLO: <300.000µs 📉 -20.3%) vs baseline: -1.0% Memory: ✅ 43.805MB (SLO: <46.000MB -4.8%) vs baseline: +5.0% ✅ lstrip_aspectTime: ✅ 0.274ms (SLO: <3.000ms 📉 -90.9%) vs baseline: -1.9% Memory: ✅ 43.879MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ lstrip_noaspectTime: ✅ 0.178ms (SLO: <3.000ms 📉 -94.1%) vs baseline: -1.1% Memory: ✅ 43.879MB (SLO: <46.000MB -4.6%) vs baseline: +4.9% ✅ modulo_aspectTime: ✅ 14.239ms (SLO: <18.750ms 📉 -24.1%) vs baseline: +0.1% Memory: ✅ 43.962MB (SLO: <46.000MB -4.4%) vs baseline: +4.9% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.782ms (SLO: <19.350ms 📉 -23.6%) vs baseline: ~same Memory: ✅ 43.825MB (SLO: <46.000MB -4.7%) vs baseline: +4.6% ✅ modulo_aspect_for_bytesTime: ✅ 14.362ms (SLO: <18.900ms 📉 -24.0%) vs baseline: +0.2% Memory: ✅ 44.004MB (SLO: <46.000MB -4.3%) vs baseline: +4.7% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.579ms (SLO: <19.150ms 📉 -23.9%) vs baseline: +0.2% Memory: ✅ 43.937MB (SLO: <46.000MB -4.5%) vs baseline: +4.8% ✅ modulo_noaspectTime: ✅ 0.373ms (SLO: <3.000ms 📉 -87.6%) vs baseline: -1.3% Memory: ✅ 43.852MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ replace_aspectTime: ✅ 18.353ms (SLO: <24.000ms 📉 -23.5%) vs baseline: -0.5% Memory: ✅ 43.972MB (SLO: <46.000MB -4.4%) vs baseline: +4.9% ✅ replace_noaspectTime: ✅ 286.309µs (SLO: <400.000µs 📉 -28.4%) vs baseline: -3.1% Memory: ✅ 43.839MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ repr_aspectTime: ✅ 340.345µs (SLO: <420.000µs 📉 -19.0%) vs baseline: +3.3% Memory: ✅ 43.944MB (SLO: <46.000MB -4.5%) vs baseline: +5.4% ✅ repr_noaspectTime: ✅ 47.531µs (SLO: <90.000µs 📉 -47.2%) vs baseline: +0.2% Memory: ✅ 43.951MB (SLO: <46.000MB -4.5%) vs baseline: +5.4% ✅ rstrip_aspectTime: ✅ 390.343µs (SLO: <500.000µs 📉 -21.9%) vs baseline: +0.4% Memory: ✅ 43.868MB (SLO: <46.000MB -4.6%) vs baseline: +5.0% ✅ rstrip_noaspectTime: ✅ 182.078µs (SLO: <300.000µs 📉 -39.3%) vs baseline: -5.5% Memory: ✅ 43.941MB (SLO: <46.000MB -4.5%) vs baseline: +5.3% ✅ slice_aspectTime: ✅ 183.751µs (SLO: <300.000µs 📉 -38.7%) vs baseline: ~same Memory: ✅ 43.932MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ slice_noaspectTime: ✅ 53.956µs (SLO: <90.000µs 📉 -40.0%) vs baseline: -2.0% Memory: ✅ 43.889MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ stringio_aspectTime: ✅ 4.506ms (SLO: <5.000ms -9.9%) vs baseline: 📈 +14.7% Memory: ✅ 43.832MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ stringio_noaspectTime: ✅ 352.528µs (SLO: <500.000µs 📉 -29.5%) vs baseline: -0.5% Memory: ✅ 43.993MB (SLO: <46.000MB -4.4%) vs baseline: +5.3% ✅ strip_aspectTime: ✅ 273.345µs (SLO: <350.000µs 📉 -21.9%) vs baseline: -2.4% Memory: ✅ 43.792MB (SLO: <46.000MB -4.8%) vs baseline: +4.9% ✅ strip_noaspectTime: ✅ 175.800µs (SLO: <240.000µs 📉 -26.8%) vs baseline: -3.0% Memory: ✅ 43.877MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ swapcase_aspectTime: ✅ 347.621µs (SLO: <500.000µs 📉 -30.5%) vs baseline: +2.5% Memory: ✅ 43.807MB (SLO: <46.000MB -4.8%) vs baseline: +5.1% ✅ swapcase_noaspectTime: ✅ 274.105µs (SLO: <400.000µs 📉 -31.5%) vs baseline: -1.0% Memory: ✅ 43.878MB (SLO: <46.000MB -4.6%) vs baseline: +5.4% ✅ title_aspectTime: ✅ 333.555µs (SLO: <500.000µs 📉 -33.3%) vs baseline: -0.1% Memory: ✅ 43.841MB (SLO: <46.000MB -4.7%) vs baseline: +4.9% ✅ title_noaspectTime: ✅ 265.490µs (SLO: <400.000µs 📉 -33.6%) vs baseline: +1.8% Memory: ✅ 43.720MB (SLO: <46.000MB -5.0%) vs baseline: +4.8% ✅ translate_aspectTime: ✅ 511.575µs (SLO: <700.000µs 📉 -26.9%) vs baseline: +0.4% Memory: ✅ 43.841MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ translate_noaspectTime: ✅ 431.852µs (SLO: <500.000µs 📉 -13.6%) vs baseline: -2.5% Memory: ✅ 43.880MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ upper_aspectTime: ✅ 312.271µs (SLO: <500.000µs 📉 -37.5%) vs baseline: +2.4% Memory: ✅ 43.824MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ upper_noaspectTime: ✅ 238.717µs (SLO: <400.000µs 📉 -40.3%) vs baseline: -1.0% Memory: ✅ 43.806MB (SLO: <46.000MB -4.8%) vs baseline: +5.1% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 544.960µs (SLO: <700.000µs 📉 -22.1%) vs baseline: 📈 +25.7% Memory: ✅ 43.819MB (SLO: <46.000MB -4.7%) vs baseline: +5.4% ✅ ospathbasename_noaspectTime: ✅ 438.802µs (SLO: <700.000µs 📉 -37.3%) vs baseline: +0.5% Memory: ✅ 43.866MB (SLO: <46.000MB -4.6%) vs baseline: +5.2% ✅ ospathjoin_aspectTime: ✅ 641.709µs (SLO: <700.000µs -8.3%) vs baseline: +0.6% Memory: ✅ 43.984MB (SLO: <46.000MB -4.4%) vs baseline: +6.1% ✅ ospathjoin_noaspectTime: ✅ 649.764µs (SLO: <700.000µs -7.2%) vs baseline: +1.9% Memory: ✅ 43.939MB (SLO: <46.000MB -4.5%) vs baseline: +5.2% ✅ ospathnormcase_aspectTime: ✅ 358.796µs (SLO: <700.000µs 📉 -48.7%) vs baseline: +2.1% Memory: ✅ 43.940MB (SLO: <46.000MB -4.5%) vs baseline: +5.5% ✅ ospathnormcase_noaspectTime: ✅ 366.829µs (SLO: <700.000µs 📉 -47.6%) vs baseline: ~same Memory: ✅ 43.974MB (SLO: <46.000MB -4.4%) vs baseline: +5.7% ✅ ospathsplit_aspectTime: ✅ 498.734µs (SLO: <700.000µs 📉 -28.8%) vs baseline: -0.3% Memory: ✅ 43.826MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ ospathsplit_noaspectTime: ✅ 513.556µs (SLO: <700.000µs 📉 -26.6%) vs baseline: +2.0% Memory: ✅ 43.847MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% ✅ ospathsplitdrive_aspectTime: ✅ 378.875µs (SLO: <700.000µs 📉 -45.9%) vs baseline: +0.2% Memory: ✅ 43.861MB (SLO: <46.000MB -4.7%) vs baseline: +5.9% ✅ ospathsplitdrive_noaspectTime: ✅ 71.879µs (SLO: <700.000µs 📉 -89.7%) vs baseline: -1.4% Memory: ✅ 43.847MB (SLO: <46.000MB -4.7%) vs baseline: +5.0% ✅ ospathsplitext_aspectTime: ✅ 467.649µs (SLO: <700.000µs 📉 -33.2%) vs baseline: -0.3% Memory: ✅ 43.840MB (SLO: <46.000MB -4.7%) vs baseline: +5.2% ✅ ospathsplitext_noaspectTime: ✅ 473.769µs (SLO: <700.000µs 📉 -32.3%) vs baseline: -0.8% Memory: ✅ 43.857MB (SLO: <46.000MB -4.7%) vs baseline: +5.3% 🟡 Near SLO Breach (5 suites)🟡 djangosimple - 28/28✅ appsecTime: ✅ 19.652ms (SLO: <22.300ms 📉 -11.9%) vs baseline: ~same Memory: ✅ 71.467MB (SLO: <73.500MB -2.8%) vs baseline: +4.9% ✅ exception-replay-enabledTime: ✅ 1.365ms (SLO: <1.450ms -5.9%) vs baseline: +0.1% Memory: ✅ 69.599MB (SLO: <71.500MB -2.7%) vs baseline: +4.9% ✅ iastTime: ✅ 19.662ms (SLO: <22.250ms 📉 -11.6%) vs baseline: -0.1% Memory: ✅ 71.447MB (SLO: <75.000MB -4.7%) vs baseline: +4.9% ✅ profilerTime: ✅ 15.167ms (SLO: <16.550ms -8.4%) vs baseline: -0.4% Memory: ✅ 60.282MB (SLO: <61.000MB 🟡 -1.2%) vs baseline: +4.8% ✅ resource-renamingTime: ✅ 19.563ms (SLO: <21.750ms 📉 -10.1%) vs baseline: +0.4% Memory: ✅ 71.565MB (SLO: <73.500MB -2.6%) vs baseline: +5.1% ✅ span-code-originTime: ✅ 20.165ms (SLO: <28.200ms 📉 -28.5%) vs baseline: +1.4% Memory: ✅ 71.782MB (SLO: <75.000MB -4.3%) vs baseline: +5.3% ✅ tracerTime: ✅ 19.712ms (SLO: <21.750ms -9.4%) vs baseline: +0.2% Memory: ✅ 71.487MB (SLO: <75.000MB -4.7%) vs baseline: +4.9% ✅ tracer-and-profilerTime: ✅ 20.992ms (SLO: <23.500ms 📉 -10.7%) vs baseline: ~same Memory: ✅ 73.453MB (SLO: <75.000MB -2.1%) vs baseline: +5.2% ✅ tracer-dont-create-db-spansTime: ✅ 19.753ms (SLO: <21.500ms -8.1%) vs baseline: +0.2% Memory: ✅ 71.447MB (SLO: <75.000MB -4.7%) vs baseline: +5.0% ✅ tracer-minimalTime: ✅ 17.873ms (SLO: <18.500ms -3.4%) vs baseline: +0.2% Memory: ✅ 71.457MB (SLO: <75.000MB -4.7%) vs baseline: +4.9% ✅ tracer-no-cachesTime: ✅ 18.888ms (SLO: <19.650ms -3.9%) vs baseline: ~same Memory: ✅ 71.447MB (SLO: <75.000MB -4.7%) vs baseline: +4.9% ✅ tracer-no-databasesTime: ✅ 20.635ms (SLO: <21.100ms -2.2%) vs baseline: -0.4% Memory: ✅ 71.467MB (SLO: <75.000MB -4.7%) vs baseline: +4.9% ✅ tracer-no-middlewareTime: ✅ 20.718ms (SLO: <21.500ms -3.6%) vs baseline: -0.7% Memory: ✅ 71.447MB (SLO: <75.000MB -4.7%) vs baseline: +4.9% ✅ tracer-no-templatesTime: ✅ 19.646ms (SLO: <22.000ms 📉 -10.7%) vs baseline: +1.6% Memory: ✅ 71.346MB (SLO: <73.500MB -2.9%) vs baseline: +4.7% 🟡 otelspan - 22/22✅ add-eventTime: ✅ 41.591ms (SLO: <47.150ms 📉 -11.8%) vs baseline: +0.4% Memory: ✅ 41.659MB (SLO: <47.000MB 📉 -11.4%) vs baseline: +5.4% ✅ add-metricsTime: ✅ 236.010ms (SLO: <344.800ms 📉 -31.6%) vs baseline: +0.1% Memory: ✅ 45.510MB (SLO: <47.500MB -4.2%) vs baseline: +5.4% ✅ add-tagsTime: ✅ 264.216ms (SLO: <330.000ms 📉 -19.9%) vs baseline: -0.5% Memory: ✅ 45.450MB (SLO: <47.500MB -4.3%) vs baseline: +5.0% ✅ get-contextTime: ✅ 80.801ms (SLO: <92.350ms 📉 -12.5%) vs baseline: +0.6% Memory: ✅ 41.209MB (SLO: <46.500MB 📉 -11.4%) vs baseline: +5.4% ✅ is-recordingTime: ✅ 37.667ms (SLO: <44.500ms 📉 -15.4%) vs baseline: +0.1% Memory: ✅ 41.122MB (SLO: <47.500MB 📉 -13.4%) vs baseline: +5.5% ✅ record-exceptionTime: ✅ 62.757ms (SLO: <67.650ms -7.2%) vs baseline: +0.1% Memory: ✅ 41.820MB (SLO: <47.000MB 📉 -11.0%) vs baseline: +5.2% ✅ set-statusTime: ✅ 43.574ms (SLO: <50.400ms 📉 -13.5%) vs baseline: +0.4% Memory: ✅ 41.021MB (SLO: <47.000MB 📉 -12.7%) vs baseline: +4.8% ✅ startTime: ✅ 38.785ms (SLO: <44.500ms 📉 -12.8%) vs baseline: +4.8% Memory: ✅ 41.009MB (SLO: <47.000MB 📉 -12.7%) vs baseline: +5.2% ✅ start-finishTime: ✅ 89.771ms (SLO: <92.000ms -2.4%) vs baseline: -0.5% Memory: ✅ 38.810MB (SLO: <46.500MB 📉 -16.5%) vs baseline: +5.4% ✅ start-finish-telemetryTime: ✅ 91.651ms (SLO: <93.000ms 🟡 -1.5%) vs baseline: -0.3% Memory: ✅ 38.712MB (SLO: <46.500MB 📉 -16.7%) vs baseline: +5.1% ✅ update-nameTime: ✅ 38.968ms (SLO: <45.150ms 📉 -13.7%) vs baseline: +0.4% Memory: ✅ 41.018MB (SLO: <47.000MB 📉 -12.7%) vs baseline: +5.0% 🟡 recursivecomputation - 8/8✅ deepTime: ✅ 311.897ms (SLO: <320.950ms -2.8%) vs baseline: ~same Memory: ✅ 37.316MB (SLO: <38.750MB -3.7%) vs baseline: +5.9% ✅ deep-profiledTime: ✅ 331.470ms (SLO: <359.150ms -7.7%) vs baseline: +0.4% Memory: ✅ 43.529MB (SLO: <46.000MB -5.4%) vs baseline: +5.7% ✅ mediumTime: ✅ 7.339ms (SLO: <7.450ms 🟡 -1.5%) vs baseline: +0.1% Memory: ✅ 36.156MB (SLO: <38.000MB -4.9%) vs baseline: +4.9% ✅ shallowTime: ✅ 1.039ms (SLO: <1.050ms 🟡 -1.0%) vs baseline: +2.4% Memory: ✅ 36.176MB (SLO: <38.000MB -4.8%) vs baseline: +5.0% 🟡 span - 26/26✅ add-eventTime: ✅ 20.449ms (SLO: <22.500ms -9.1%) vs baseline: +0.5% Memory: ✅ 38.614MB (SLO: <53.000MB 📉 -27.1%) vs baseline: +5.0% ✅ add-metricsTime: ✅ 89.807ms (SLO: <93.500ms -3.9%) vs baseline: -0.9% Memory: ✅ 42.880MB (SLO: <53.000MB 📉 -19.1%) vs baseline: +5.0% ✅ add-tagsTime: ✅ 135.365ms (SLO: <155.000ms 📉 -12.7%) vs baseline: -0.4% Memory: ✅ 42.729MB (SLO: <53.000MB 📉 -19.4%) vs baseline: +5.0% ✅ get-contextTime: ✅ 17.905ms (SLO: <20.500ms 📉 -12.7%) vs baseline: +1.0% Memory: ✅ 38.142MB (SLO: <53.000MB 📉 -28.0%) vs baseline: +5.9% ✅ is-recordingTime: ✅ 18.074ms (SLO: <20.500ms 📉 -11.8%) vs baseline: +1.8% Memory: ✅ 38.083MB (SLO: <53.000MB 📉 -28.1%) vs baseline: +5.8% ✅ record-exceptionTime: ✅ 41.727ms (SLO: <42.000ms 🟡 -0.6%) vs baseline: -0.7% Memory: ✅ 39.007MB (SLO: <53.000MB 📉 -26.4%) vs baseline: +5.2% ✅ set-statusTime: ✅ 19.580ms (SLO: <22.000ms 📉 -11.0%) vs baseline: +0.8% Memory: ✅ 38.201MB (SLO: <53.000MB 📉 -27.9%) vs baseline: +5.8% ✅ startTime: ✅ 18.848ms (SLO: <20.500ms -8.1%) vs baseline: +6.9% Memory: ✅ 38.181MB (SLO: <53.000MB 📉 -28.0%) vs baseline: +6.0% ✅ start-finishTime: ✅ 58.071ms (SLO: <58.500ms 🟡 -0.7%) vs baseline: +0.2% Memory: ✅ 36.196MB (SLO: <38.000MB -4.7%) vs baseline: +4.7% ✅ start-finish-telemetryTime: ✅ 59.165ms (SLO: <60.000ms 🟡 -1.4%) vs baseline: -0.6% Memory: ✅ 36.196MB (SLO: <38.000MB -4.7%) vs baseline: +4.7% ✅ start-finish-traceid128Time: ✅ 60.314ms (SLO: <62.000ms -2.7%) vs baseline: -0.4% Memory: ✅ 36.117MB (SLO: <38.000MB -5.0%) vs baseline: +4.7% ✅ start-traceid128Time: ✅ 17.733ms (SLO: <22.500ms 📉 -21.2%) vs baseline: +0.2% Memory: ✅ 38.083MB (SLO: <53.000MB 📉 -28.1%) vs baseline: +5.0% ✅ update-nameTime: ✅ 18.496ms (SLO: <22.000ms 📉 -15.9%) vs baseline: +1.7% Memory: ✅ 38.248MB (SLO: <53.000MB 📉 -27.8%) vs baseline: +5.2% 🟡 tracer - 6/6✅ largeTime: ✅ 32.873ms (SLO: <33.950ms -3.2%) vs baseline: +1.0% Memory: ✅ 37.493MB (SLO: <39.250MB -4.5%) vs baseline: +5.3% ✅ mediumTime: ✅ 3.190ms (SLO: <3.500ms -8.9%) vs baseline: +1.3% Memory: ✅ 36.294MB (SLO: <38.750MB -6.3%) vs baseline: +5.0% ✅ smallTime: ✅ 385.855µs (SLO: <390.000µs 🟡 -1.1%) vs baseline: +4.2% Memory: ✅ 36.117MB (SLO: <38.750MB -6.8%) vs baseline: +4.7%
|
|
FYI I'm hoping we can get python/cpython#146182 merged before the 3.15 beta is cut so that we can move away from bytecode manipulations 🤞. |
d39d6bc to
085f281
Compare
4526b3b to
4d5a9de
Compare
d379be4 to
8f689cf
Compare
CPython 3.15 changed two bytecode operands in async/generator code paths: - YIELD_VALUE in SEND loops (await): 0 → 1 - RESUME after async gen yield-to-caller: 1 → 5 asyncs.py: new 3.15 branch with updated operands; ASYNC_HEAD and COROUTINE_ASSEMBLY structure identical to 3.14, ASYNC_GEN_ASSEMBLY yield_value updated in all three await loops (presend0/1/2) and resume updated in the yield-to-caller section. generators.py: new 3.15 branch identical to 3.14 — generator yields inside try blocks still use RESUME 1 in 3.15 (only unprotected yields changed to RESUME 5). context.py: extended 3.13 branch to cover 3.15 — no bytecode changes needed for context enter/exit/return assembly. All version guards bumped from >= (3,15) to >= (3,16). Validated on Python 3.15.0a7: coroutine, generator, async generator, and generator throw all pass.
The 3.13 INJECTION_ASSEMBLY (load_const/push_null/call/pop_top) is valid on 3.15 — no call convention changes were made. Bump the NotImplementedError guard from 3.15 to 3.16.
…can't parse Python 3.15 code bytecode 0.17.0 (max Python 3.14) raises IndexError in Bytecode.from_code() on some Python 3.15 code objects. Catch it and return early rather than propagating to callers — e.g. @lazy in module.py and product plugin loading — which would log an ERROR to stderr and fail subprocess tests.
… context wrapping bytecode 0.17.0 does not know the stack effect of CLEANUP_THROW (new in 3.15 for async-generator throw handling), causing cfg.compute_stacksize() to raise RuntimeError. Fall back to an explicit stacksize when this happens on 3.15+.
…ing verified working
8f689cf to
4cada08
Compare
@vlad-scherbich The PR is merged so we can look into the sys.monitoring alternative implementation instead. |
| Next PR >
• https://datadoghq.atlassian.net/browse/PROF-14200
Description
This is [1/n] in the Python 3.15 support stack for
dd-trace-py. It is a prerequisite for the profiling PR (2/n), since CPython 3.15 changed two bytecode operands used by ddtrace's async/generator wrapping machinery. It is causing ddtrace to raiseNotImplementedErrorat import time.This PR adds the 3.15 assembly branches to
asyncs.py,generators.py, andcontext.py.Changed bytecode operands:
YIELD_VALUEin SEND loops (await):0 → 1RESUMEafter async gen yield-to-caller:1 → 5Code Changes
asyncs.py: new 3.15 branch with updated operands; ASYNC_HEAD and COROUTINE_ASSEMBLY structure identical to 3.14, ASYNC_GEN_ASSEMBLY yield_value updated in all three await loops (presend0/1/2) and resume updated in the yield-to-caller section.
generators.py: new 3.15 branch identical to 3.14 — generator yields inside try blocks still use RESUME 1 in 3.15 (only unprotected yields changed to RESUME 5).
context.py: extended 3.13 branch to cover 3.15 — no bytecode changes needed for context enter/exit/return assembly.
Testing
Risks
Additional Notes
python/cpython #146182 may land before 3.15 beta and eliminate the need for bytecode manipulation. In that case, we'll follow up with another PR.