-
Notifications
You must be signed in to change notification settings - Fork 461
chore(internal): add native based event system #14760
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
base: main
Are you sure you want to change the base?
Conversation
|
97617a2
to
9c1a22c
Compare
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 247 ± 3 ms. The average import time from base is: 249 ± 3 ms. The import time difference between this PR and base is: -1.2 ± 0.1 ms. Import time breakdownThe following import paths have appeared:
|
Performance SLOsComparing candidate brettlangdon/native-event-hub (a71ca11) with baseline main (d033f37) 📈 Performance Regressions (1 suite)📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 4.431µs (SLO: <10.000µs 📉 -55.7%) vs baseline: +6.6% Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +4.9% ✅ ospathbasename_noaspectTime: ✅ 1.077µs (SLO: <10.000µs 📉 -89.2%) vs baseline: -0.9% Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.1% ✅ ospathjoin_aspectTime: ✅ 6.262µs (SLO: <10.000µs 📉 -37.4%) vs baseline: +2.4% Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.1% ✅ ospathjoin_noaspectTime: ✅ 2.295µs (SLO: <10.000µs 📉 -77.1%) vs baseline: -0.3% Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.2% ✅ ospathnormcase_aspectTime: ✅ 3.628µs (SLO: <10.000µs 📉 -63.7%) vs baseline: +5.5% Memory: ✅ 37.670MB (SLO: <39.000MB -3.4%) vs baseline: +4.9% ✅ ospathnormcase_noaspectTime: ✅ 0.577µs (SLO: <10.000µs 📉 -94.2%) vs baseline: +1.2% Memory: ✅ 37.690MB (SLO: <39.000MB -3.4%) vs baseline: +5.0% ✅ ospathsplit_aspectTime: ✅ 4.932µs (SLO: <10.000µs 📉 -50.7%) vs baseline: +3.3% Memory: ✅ 37.650MB (SLO: <39.000MB -3.5%) vs baseline: +4.9% ✅ ospathsplit_noaspectTime: ✅ 1.595µs (SLO: <10.000µs 📉 -84.1%) vs baseline: -0.9% Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.1% ✅ ospathsplitdrive_aspectTime: ✅ 4.341µs (SLO: <10.000µs 📉 -56.6%) vs baseline: 📈 +20.0% Memory: ✅ 37.670MB (SLO: <39.000MB -3.4%) vs baseline: +4.9% ✅ ospathsplitdrive_noaspectTime: ✅ 0.692µs (SLO: <10.000µs 📉 -93.1%) vs baseline: -0.7% Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +5.0% ✅ ospathsplitext_aspectTime: ✅ 5.397µs (SLO: <10.000µs 📉 -46.0%) vs baseline: 📈 +20.9% Memory: ✅ 37.768MB (SLO: <39.000MB -3.2%) vs baseline: +5.0% ✅ ospathsplitext_noaspectTime: ✅ 1.374µs (SLO: <10.000µs 📉 -86.3%) vs baseline: -0.9% Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +4.8% 🟡 Near SLO Breach (3 suites)🟡 djangosimple - 30/30✅ appsecTime: ✅ 20.532ms (SLO: <22.300ms -7.9%) vs baseline: +0.2% Memory: ✅ 65.425MB (SLO: <67.000MB -2.4%) vs baseline: +4.8% ✅ exception-replay-enabledTime: ✅ 1.355ms (SLO: <1.450ms -6.6%) vs baseline: +0.4% Memory: ✅ 64.392MB (SLO: <67.000MB -3.9%) vs baseline: +4.8% ✅ iastTime: ✅ 20.606ms (SLO: <22.250ms -7.4%) vs baseline: +0.6% Memory: ✅ 65.387MB (SLO: <67.000MB -2.4%) vs baseline: +4.8% ✅ profilerTime: ✅ 15.318ms (SLO: <16.550ms -7.4%) vs baseline: +0.4% Memory: ✅ 53.819MB (SLO: <54.500MB 🟡 -1.2%) vs baseline: +4.7% ✅ resource-renamingTime: ✅ 20.613ms (SLO: <21.750ms -5.2%) vs baseline: ~same Memory: ✅ 65.355MB (SLO: <67.000MB -2.5%) vs baseline: +4.7% ✅ span-code-originTime: ✅ 26.210ms (SLO: <28.200ms -7.1%) vs baseline: ~same Memory: ✅ 67.383MB (SLO: <69.500MB -3.0%) vs baseline: +4.7% ✅ tracerTime: ✅ 20.571ms (SLO: <21.750ms -5.4%) vs baseline: +0.2% Memory: ✅ 65.267MB (SLO: <67.000MB -2.6%) vs baseline: +4.5% ✅ tracer-and-profilerTime: ✅ 22.099ms (SLO: <23.500ms -6.0%) vs baseline: +0.8% Memory: ✅ 66.699MB (SLO: <67.500MB 🟡 -1.2%) vs baseline: +4.9% ✅ tracer-dont-create-db-spansTime: ✅ 19.383ms (SLO: <21.500ms -9.8%) vs baseline: +0.2% Memory: ✅ 65.346MB (SLO: <66.000MB 🟡 -1.0%) vs baseline: +4.7% ✅ tracer-minimalTime: ✅ 16.600ms (SLO: <17.500ms -5.1%) vs baseline: -0.3% Memory: ✅ 65.238MB (SLO: <66.000MB 🟡 -1.2%) vs baseline: +4.3% ✅ tracer-nativeTime: ✅ 20.592ms (SLO: <21.750ms -5.3%) vs baseline: +0.2% Memory: ✅ 71.571MB (SLO: <72.500MB 🟡 -1.3%) vs baseline: +5.1% ✅ tracer-no-cachesTime: ✅ 18.491ms (SLO: <19.650ms -5.9%) vs baseline: +0.3% Memory: ✅ 65.328MB (SLO: <67.000MB -2.5%) vs baseline: +4.6% ✅ tracer-no-databasesTime: ✅ 18.792ms (SLO: <20.100ms -6.5%) vs baseline: ~same Memory: ✅ 65.299MB (SLO: <67.000MB -2.5%) vs baseline: +4.8% ✅ tracer-no-middlewareTime: ✅ 20.247ms (SLO: <21.500ms -5.8%) vs baseline: +0.6% Memory: ✅ 65.272MB (SLO: <67.000MB -2.6%) vs baseline: +4.6% ✅ tracer-no-templatesTime: ✅ 20.347ms (SLO: <22.000ms -7.5%) vs baseline: +0.4% Memory: ✅ 65.333MB (SLO: <67.000MB -2.5%) vs baseline: +4.8% 🟡 flasksimple - 18/18✅ appsec-getTime: ✅ 4.590ms (SLO: <4.750ms -3.4%) vs baseline: -0.2% Memory: ✅ 61.833MB (SLO: <65.000MB -4.9%) vs baseline: +4.6% ✅ appsec-postTime: ✅ 6.580ms (SLO: <6.750ms -2.5%) vs baseline: +0.3% Memory: ✅ 61.873MB (SLO: <65.000MB -4.8%) vs baseline: +4.8% ✅ appsec-telemetryTime: ✅ 4.583ms (SLO: <4.750ms -3.5%) vs baseline: -0.2% Memory: ✅ 61.774MB (SLO: <65.000MB -5.0%) vs baseline: +4.5% ✅ debuggerTime: ✅ 1.860ms (SLO: <2.000ms -7.0%) vs baseline: -0.3% Memory: ✅ 45.416MB (SLO: <47.000MB -3.4%) vs baseline: +4.8% ✅ iast-getTime: ✅ 1.860ms (SLO: <2.000ms -7.0%) vs baseline: -0.4% Memory: ✅ 42.389MB (SLO: <49.000MB 📉 -13.5%) vs baseline: +5.2% ✅ profilerTime: ✅ 1.911ms (SLO: <2.100ms -9.0%) vs baseline: +0.1% Memory: ✅ 46.478MB (SLO: <47.000MB 🟡 -1.1%) vs baseline: +5.0% ✅ resource-renamingTime: ✅ 3.392ms (SLO: <3.650ms -7.1%) vs baseline: +0.6% Memory: ✅ 52.121MB (SLO: <53.500MB -2.6%) vs baseline: +4.6% ✅ tracerTime: ✅ 3.380ms (SLO: <3.650ms -7.4%) vs baseline: ~same Memory: ✅ 52.101MB (SLO: <53.500MB -2.6%) vs baseline: +4.5% ✅ tracer-nativeTime: ✅ 3.383ms (SLO: <3.650ms -7.3%) vs baseline: ~same Memory: ✅ 58.322MB (SLO: <60.000MB -2.8%) vs baseline: +4.8% 🟡 otelspan - 22/22✅ add-eventTime: ✅ 45.358ms (SLO: <47.150ms -3.8%) vs baseline: +0.3% Memory: ✅ 45.398MB (SLO: <47.000MB -3.4%) vs baseline: +5.0% ✅ add-metricsTime: ✅ 321.720ms (SLO: <344.800ms -6.7%) vs baseline: +0.2% Memory: ✅ 552.473MB (SLO: <562.000MB 🟡 -1.7%) vs baseline: +4.7% ✅ add-tagsTime: ✅ 290.816ms (SLO: <314.000ms -7.4%) vs baseline: +1.0% Memory: ✅ 555.168MB (SLO: <563.500MB 🟡 -1.5%) vs baseline: +5.0% ✅ get-contextTime: ✅ 84.195ms (SLO: <92.350ms -8.8%) vs baseline: +0.5% Memory: ✅ 40.328MB (SLO: <46.500MB 📉 -13.3%) vs baseline: +4.9% ✅ is-recordingTime: ✅ 42.762ms (SLO: <44.500ms -3.9%) vs baseline: -0.3% Memory: ✅ 44.822MB (SLO: <47.500MB -5.6%) vs baseline: +5.4% ✅ record-exceptionTime: ✅ 61.689ms (SLO: <67.650ms -8.8%) vs baseline: -0.4% Memory: ✅ 40.780MB (SLO: <47.000MB 📉 -13.2%) vs baseline: +5.1% ✅ set-statusTime: ✅ 48.738ms (SLO: <50.400ms -3.3%) vs baseline: +0.2% Memory: ✅ 44.763MB (SLO: <47.000MB -4.8%) vs baseline: +5.3% ✅ startTime: ✅ 41.983ms (SLO: <43.450ms -3.4%) vs baseline: -0.7% Memory: ✅ 44.721MB (SLO: <47.000MB -4.8%) vs baseline: +5.1% ✅ start-finishTime: ✅ 85.327ms (SLO: <88.000ms -3.0%) vs baseline: +0.4% Memory: ✅ 34.662MB (SLO: <46.500MB 📉 -25.5%) vs baseline: +5.0% ✅ start-finish-telemetryTime: ✅ 86.849ms (SLO: <89.000ms -2.4%) vs baseline: +0.4% Memory: ✅ 34.662MB (SLO: <46.500MB 📉 -25.5%) vs baseline: +5.0% ✅ update-nameTime: ✅ 44.007ms (SLO: <45.150ms -2.5%) vs baseline: -0.5% Memory: ✅ 45.034MB (SLO: <47.000MB -4.2%) vs baseline: +4.8%
|
This reverts commit 0e44946.
Description
This PR introduces a new Rust based event system to replace
ddtrace.internal.core.{on,dispatch}
.The primary goals of this approach are:
ddtrace/internal/events.pyi
file based on type signature defined in macros.ddtrace/_trace/events.pyi
)Testing
Migrated the existing
trace.span_start
andtrace.span_finish
core events to the new event system as a POC of it working. This event is used by LLMObs, and is a core part of how their product works. Their tests passing should be enough indication that the functionality is working.Risks
Added
_DD_TRACE_NATIVE_EVENTS
env variable to control at startup whether native events or core dispatch is used fortrace.span_start
events.IMHO, this flag shouldn't live for a long time unless we plan to introduce some helpers for registering/dispatching that will pick between the two options, otherwise the code will be littered with the config check and both logic (see the LLMObs example). Once we have some confidence this appears to be working, we can remove the flag, and start to migrate more events to the new system only.
Additional Notes