-
Notifications
You must be signed in to change notification settings - Fork 463
perf(tracer): improve performance of DefaultContextProvider #14920
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
|
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 246 ± 4 ms. The average import time from base is: 247 ± 5 ms. The import time difference between this PR and base is: -1.6 ± 0.2 ms. Import time breakdownThe following import paths have shrunk:
|
Performance SLOsComparing candidate APMLP-474/improve.provider (964e140) with baseline main (28fecf2) 📈 Performance Regressions (1 suite)📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.445µs (SLO: <20.000µs 📉 -82.8%) vs baseline: +9.1% Memory: ✅ 32.086MB (SLO: <34.000MB -5.6%) vs baseline: +4.6% ✅ 1-count-metrics-100-timesTime: ✅ 217.481µs (SLO: <250.000µs 📉 -13.0%) vs baseline: +0.8% Memory: ✅ 32.106MB (SLO: <34.000MB -5.6%) vs baseline: +4.9% ✅ 1-distribution-metric-1-timesTime: ✅ 2.961µs (SLO: <20.000µs 📉 -85.2%) vs baseline: +0.9% Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +4.9% ✅ 1-distribution-metrics-100-timesTime: ✅ 196.316µs (SLO: <220.000µs 📉 -10.8%) vs baseline: +1.7% Memory: ✅ 32.185MB (SLO: <34.000MB -5.3%) vs baseline: +5.1% ✅ 1-gauge-metric-1-timesTime: ✅ 2.318µs (SLO: <20.000µs 📉 -88.4%) vs baseline: 📈 +13.3% Memory: ✅ 32.067MB (SLO: <34.000MB -5.7%) vs baseline: +4.7% ✅ 1-gauge-metrics-100-timesTime: ✅ 125.046µs (SLO: <150.000µs 📉 -16.6%) vs baseline: +0.8% Memory: ✅ 32.086MB (SLO: <34.000MB -5.6%) vs baseline: +4.8% ✅ 1-rate-metric-1-timesTime: ✅ 3.443µs (SLO: <20.000µs 📉 -82.8%) vs baseline: +9.3% Memory: ✅ 32.027MB (SLO: <34.000MB -5.8%) vs baseline: +4.5% ✅ 1-rate-metrics-100-timesTime: ✅ 214.859µs (SLO: <250.000µs 📉 -14.1%) vs baseline: -0.6% Memory: ✅ 32.126MB (SLO: <34.000MB -5.5%) vs baseline: +4.7% ✅ 100-count-metrics-100-timesTime: ✅ 21.821ms (SLO: <23.500ms -7.1%) vs baseline: +1.9% Memory: ✅ 32.106MB (SLO: <34.000MB -5.6%) vs baseline: +5.0% ✅ 100-distribution-metrics-100-timesTime: ✅ 1.990ms (SLO: <2.250ms 📉 -11.6%) vs baseline: +0.2% Memory: ✅ 32.165MB (SLO: <34.000MB -5.4%) vs baseline: +5.0% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.301ms (SLO: <1.550ms 📉 -16.0%) vs baseline: +1.1% Memory: ✅ 32.165MB (SLO: <34.000MB -5.4%) vs baseline: +5.0% ✅ 100-rate-metrics-100-timesTime: ✅ 2.249ms (SLO: <2.550ms 📉 -11.8%) vs baseline: +2.4% Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +4.9% ✅ flush-1-metricTime: ✅ 4.281µs (SLO: <20.000µs 📉 -78.6%) vs baseline: +0.6% Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +5.1% ✅ flush-100-metricsTime: ✅ 181.614µs (SLO: <250.000µs 📉 -27.4%) vs baseline: ~same Memory: ✅ 32.106MB (SLO: <34.000MB -5.6%) vs baseline: +5.1% ✅ flush-1000-metricsTime: ✅ 2.225ms (SLO: <2.500ms 📉 -11.0%) vs baseline: -0.5% Memory: ✅ 32.893MB (SLO: <34.500MB -4.7%) vs baseline: +4.8% 🟡 Near SLO Breach (5 suites)🟡 djangosimple - 30/30✅ appsecTime: ✅ 20.439ms (SLO: <22.300ms -8.3%) vs baseline: ~same Memory: ✅ 65.484MB (SLO: <67.000MB -2.3%) vs baseline: +5.0% ✅ exception-replay-enabledTime: ✅ 1.345ms (SLO: <1.450ms -7.3%) vs baseline: -0.3% Memory: ✅ 64.604MB (SLO: <67.000MB -3.6%) vs baseline: +4.8% ✅ iastTime: ✅ 20.411ms (SLO: <22.250ms -8.3%) vs baseline: ~same Memory: ✅ 65.486MB (SLO: <67.000MB -2.3%) vs baseline: +4.9% ✅ profilerTime: ✅ 15.247ms (SLO: <16.550ms -7.9%) vs baseline: ~same Memory: ✅ 53.654MB (SLO: <54.500MB 🟡 -1.6%) vs baseline: +4.4% ✅ resource-renamingTime: ✅ 20.572ms (SLO: <21.750ms -5.4%) vs baseline: +0.3% Memory: ✅ 65.484MB (SLO: <67.000MB -2.3%) vs baseline: +4.9% ✅ span-code-originTime: ✅ 26.142ms (SLO: <28.200ms -7.3%) vs baseline: -0.5% Memory: ✅ 67.604MB (SLO: <69.500MB -2.7%) vs baseline: +4.9% ✅ tracerTime: ✅ 20.402ms (SLO: <21.750ms -6.2%) vs baseline: -0.5% Memory: ✅ 65.446MB (SLO: <67.000MB -2.3%) vs baseline: +4.9% ✅ tracer-and-profilerTime: ✅ 22.032ms (SLO: <23.500ms -6.2%) vs baseline: -0.3% Memory: ✅ 66.572MB (SLO: <67.500MB 🟡 -1.4%) vs baseline: +4.9% ✅ tracer-dont-create-db-spansTime: ✅ 19.322ms (SLO: <21.500ms 📉 -10.1%) vs baseline: ~same Memory: ✅ 65.480MB (SLO: <66.000MB 🟡 -0.8%) vs baseline: +4.9% ✅ tracer-minimalTime: ✅ 16.593ms (SLO: <17.500ms -5.2%) vs baseline: ~same Memory: ✅ 65.452MB (SLO: <66.000MB 🟡 -0.8%) vs baseline: +4.9% ✅ tracer-nativeTime: ✅ 20.424ms (SLO: <21.750ms -6.1%) vs baseline: -0.6% Memory: ✅ 71.397MB (SLO: <72.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ tracer-no-cachesTime: ✅ 18.456ms (SLO: <19.650ms -6.1%) vs baseline: ~same Memory: ✅ 65.466MB (SLO: <67.000MB -2.3%) vs baseline: +4.9% ✅ tracer-no-databasesTime: ✅ 18.763ms (SLO: <20.100ms -6.6%) vs baseline: +0.2% Memory: ✅ 65.222MB (SLO: <67.000MB -2.7%) vs baseline: +4.5% ✅ tracer-no-middlewareTime: ✅ 20.121ms (SLO: <21.500ms -6.4%) vs baseline: -0.4% Memory: ✅ 65.469MB (SLO: <67.000MB -2.3%) vs baseline: +4.9% ✅ tracer-no-templatesTime: ✅ 20.265ms (SLO: <22.000ms -7.9%) vs baseline: -0.2% Memory: ✅ 65.407MB (SLO: <67.000MB -2.4%) vs baseline: +4.8% 🟡 errortrackingdjangosimple - 6/6✅ errortracking-enabled-allTime: ✅ 18.064ms (SLO: <19.850ms -9.0%) vs baseline: ~same Memory: ✅ 65.313MB (SLO: <66.500MB 🟡 -1.8%) vs baseline: +5.0% ✅ errortracking-enabled-userTime: ✅ 18.104ms (SLO: <19.400ms -6.7%) vs baseline: +0.2% Memory: ✅ 65.176MB (SLO: <66.500MB 🟡 -2.0%) vs baseline: +4.8% ✅ tracer-enabledTime: ✅ 18.036ms (SLO: <19.450ms -7.3%) vs baseline: -0.3% Memory: ✅ 65.195MB (SLO: <66.500MB 🟡 -2.0%) vs baseline: +4.8% 🟡 flasksimple - 18/18✅ appsec-getTime: ✅ 4.543ms (SLO: <4.750ms -4.4%) vs baseline: -0.4% Memory: ✅ 61.971MB (SLO: <65.000MB -4.7%) vs baseline: +4.9% ✅ appsec-postTime: ✅ 6.564ms (SLO: <6.750ms -2.7%) vs baseline: -0.2% Memory: ✅ 61.991MB (SLO: <65.000MB -4.6%) vs baseline: +4.7% ✅ appsec-telemetryTime: ✅ 4.540ms (SLO: <4.750ms -4.4%) vs baseline: -0.8% Memory: ✅ 62.010MB (SLO: <65.000MB -4.6%) vs baseline: +4.8% ✅ debuggerTime: ✅ 1.855ms (SLO: <2.000ms -7.2%) vs baseline: -0.4% Memory: ✅ 45.436MB (SLO: <47.000MB -3.3%) vs baseline: +4.7% ✅ iast-getTime: ✅ 1.859ms (SLO: <2.000ms -7.0%) vs baseline: +0.1% Memory: ✅ 42.330MB (SLO: <49.000MB 📉 -13.6%) vs baseline: +4.8% ✅ profilerTime: ✅ 1.907ms (SLO: <2.100ms -9.2%) vs baseline: -0.2% Memory: ✅ 46.498MB (SLO: <47.000MB 🟡 -1.1%) vs baseline: +5.0% ✅ resource-renamingTime: ✅ 3.369ms (SLO: <3.650ms -7.7%) vs baseline: -0.4% Memory: ✅ 52.219MB (SLO: <53.500MB -2.4%) vs baseline: +4.9% ✅ tracerTime: ✅ 3.351ms (SLO: <3.650ms -8.2%) vs baseline: ~same Memory: ✅ 52.258MB (SLO: <53.500MB -2.3%) vs baseline: +4.8% ✅ tracer-nativeTime: ✅ 3.354ms (SLO: <3.650ms -8.1%) vs baseline: -0.2% Memory: ✅ 58.402MB (SLO: <60.000MB -2.7%) vs baseline: +5.1% 🟡 otelspan - 22/22✅ add-eventTime: ✅ 41.082ms (SLO: <47.150ms 📉 -12.9%) vs baseline: +0.3% Memory: ✅ 44.184MB (SLO: <47.000MB -6.0%) vs baseline: +5.0% ✅ add-metricsTime: ✅ 319.844ms (SLO: <344.800ms -7.2%) vs baseline: +1.0% Memory: ✅ 616.415MB (SLO: <630.000MB -2.2%) vs baseline: +4.8% ✅ add-tagsTime: ✅ 287.891ms (SLO: <314.000ms -8.3%) vs baseline: ~same Memory: ✅ 618.729MB (SLO: <630.000MB 🟡 -1.8%) vs baseline: +4.9% ✅ get-contextTime: ✅ 81.036ms (SLO: <92.350ms 📉 -12.3%) vs baseline: +0.2% Memory: ✅ 39.785MB (SLO: <46.500MB 📉 -14.4%) vs baseline: +5.0% ✅ is-recordingTime: ✅ 38.307ms (SLO: <44.500ms 📉 -13.9%) vs baseline: -0.5% Memory: ✅ 43.551MB (SLO: <47.500MB -8.3%) vs baseline: +4.9% ✅ record-exceptionTime: ✅ 58.469ms (SLO: <67.650ms 📉 -13.6%) vs baseline: +0.2% Memory: ✅ 40.106MB (SLO: <47.000MB 📉 -14.7%) vs baseline: +4.8% ✅ set-statusTime: ✅ 44.198ms (SLO: <50.400ms 📉 -12.3%) vs baseline: ~same Memory: ✅ 43.583MB (SLO: <47.000MB -7.3%) vs baseline: +4.8% ✅ startTime: ✅ 37.701ms (SLO: <43.450ms 📉 -13.2%) vs baseline: +0.2% Memory: ✅ 43.558MB (SLO: <47.000MB -7.3%) vs baseline: +5.0% ✅ start-finishTime: ✅ 82.955ms (SLO: <88.000ms -5.7%) vs baseline: ~same Memory: ✅ 34.603MB (SLO: <46.500MB 📉 -25.6%) vs baseline: +5.0% ✅ start-finish-telemetryTime: ✅ 84.313ms (SLO: <89.000ms -5.3%) vs baseline: ~same Memory: ✅ 34.564MB (SLO: <46.500MB 📉 -25.7%) vs baseline: +4.9% ✅ update-nameTime: ✅ 39.221ms (SLO: <45.150ms 📉 -13.1%) vs baseline: ~same Memory: ✅ 43.967MB (SLO: <47.000MB -6.5%) vs baseline: +4.9% 🟡 span - 26/26✅ add-eventTime: ✅ 20.993ms (SLO: <22.500ms -6.7%) vs baseline: +2.3% Memory: ✅ 49.662MB (SLO: <53.000MB -6.3%) vs baseline: +4.7% ✅ add-metricsTime: ✅ 90.845ms (SLO: <93.500ms -2.8%) vs baseline: +0.5% Memory: ✅ 690.369MB (SLO: <961.000MB 📉 -28.2%) vs baseline: +4.9% ✅ add-tagsTime: ✅ 148.063ms (SLO: <155.000ms -4.5%) vs baseline: +0.4% Memory: ✅ 690.212MB (SLO: <962.500MB 📉 -28.3%) vs baseline: +4.9% ✅ get-contextTime: ✅ 18.736ms (SLO: <20.500ms -8.6%) vs baseline: ~same Memory: ✅ 48.403MB (SLO: <53.000MB -8.7%) vs baseline: +4.7% ✅ is-recordingTime: ✅ 19.608ms (SLO: <20.500ms -4.4%) vs baseline: +2.8% Memory: ✅ 48.400MB (SLO: <53.000MB -8.7%) vs baseline: +4.7% ✅ record-exceptionTime: ✅ 37.960ms (SLO: <40.000ms -5.1%) vs baseline: +1.2% Memory: ✅ 42.477MB (SLO: <53.000MB 📉 -19.9%) vs baseline: +5.0% ✅ set-statusTime: ✅ 20.714ms (SLO: <22.000ms -5.8%) vs baseline: +0.4% Memory: ✅ 48.442MB (SLO: <53.000MB -8.6%) vs baseline: +5.0% ✅ startTime: ✅ 18.748ms (SLO: <20.500ms -8.5%) vs baseline: -0.3% Memory: ✅ 48.426MB (SLO: <53.000MB -8.6%) vs baseline: +4.9% ✅ start-finishTime: ✅ 51.672ms (SLO: <52.500ms 🟡 -1.6%) vs baseline: +1.0% Memory: ✅ 32.126MB (SLO: <34.000MB -5.5%) vs baseline: +4.9% ✅ start-finish-telemetryTime: ✅ 52.758ms (SLO: <54.500ms -3.2%) vs baseline: +0.4% Memory: ✅ 32.126MB (SLO: <34.000MB -5.5%) vs baseline: +4.8% ✅ start-finish-traceid128Time: ✅ 55.004ms (SLO: <56.000ms 🟡 -1.8%) vs baseline: +0.3% Memory: ✅ 32.145MB (SLO: <34.000MB -5.5%) vs baseline: +5.1% ✅ start-traceid128Time: ✅ 19.257ms (SLO: <22.500ms 📉 -14.4%) vs baseline: -0.3% Memory: ✅ 48.364MB (SLO: <53.000MB -8.7%) vs baseline: +4.7% ✅ update-nameTime: ✅ 19.144ms (SLO: <22.000ms 📉 -13.0%) vs baseline: -0.3% Memory: ✅ 49.055MB (SLO: <53.000MB -7.4%) vs baseline: +4.7%
|
Small performance gain (~1%) in the tracer scenarios. |
|
||
# PERF: type(item) is Span is about the same perf as isinstance(item, Span) | ||
# when item is a Span, but slower when item is a Context | ||
if type(item) is Span: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't expect subclasses of Span
to ever appear?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The only one I see in our codebase is:
tests/utils.py:745:class TestSpan(Span):
Not sure when/why we would subclass Span
Description
Two small tweaks to improve the overhead of DefaultContextProvider.
isinstance(item, Span) with
type(item) is Span`isinstance
check because we should only ever have this exact class and not a subclassSpan.finished
which is a computed propertyTesting
Risks
Additional Notes