-
Notifications
You must be signed in to change notification settings - Fork 469
feat(profiling): profile asyncio.Semaphore primitives with Python Lock profiler #15531
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
|
|
d973e54 to
9d28979
Compare
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 211 ± 3 ms. The average import time from base is: 212 ± 4 ms. The import time difference between this PR and base is: -0.4 ± 0.2 ms. The difference is not statistically significant (z = -2.62). Import time breakdownThe following import paths have shrunk:
|
Performance SLOsComparing candidate vlad/lockprof-asyncio-semaphore (ed892a6) with baseline main (ca3c521) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 0.404µs (SLO: <10.000µs 📉 -96.0%) vs baseline: -1.3% Memory: ✅ 40.180MB (SLO: <41.500MB -3.2%) vs baseline: +3.9% ✅ add_inplace_aspectTime: ✅ 0.408µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +0.2% Memory: ✅ 40.134MB (SLO: <41.500MB -3.3%) vs baseline: +4.5% ✅ add_inplace_noaspectTime: ✅ 0.316µs (SLO: <10.000µs 📉 -96.8%) vs baseline: +0.6% Memory: ✅ 40.131MB (SLO: <41.500MB -3.3%) vs baseline: +4.1% ✅ add_noaspectTime: ✅ 0.279µs (SLO: <10.000µs 📉 -97.2%) vs baseline: +1.4% Memory: ✅ 40.015MB (SLO: <41.500MB -3.6%) vs baseline: +4.2% ✅ bytearray_aspectTime: ✅ 1.353µs (SLO: <10.000µs 📉 -86.5%) vs baseline: +0.6% Memory: ✅ 40.251MB (SLO: <41.500MB -3.0%) vs baseline: +4.8% ✅ bytearray_extend_aspectTime: ✅ 1.495µs (SLO: <10.000µs 📉 -85.1%) vs baseline: -1.2% Memory: ✅ 40.062MB (SLO: <41.500MB -3.5%) vs baseline: +4.4% ✅ bytearray_extend_noaspectTime: ✅ 0.611µs (SLO: <10.000µs 📉 -93.9%) vs baseline: -0.4% Memory: ✅ 40.129MB (SLO: <41.500MB -3.3%) vs baseline: +4.2% ✅ bytearray_noaspectTime: ✅ 0.484µs (SLO: <10.000µs 📉 -95.2%) vs baseline: +0.9% Memory: ✅ 40.149MB (SLO: <41.500MB -3.3%) vs baseline: +4.3% ✅ bytes_aspectTime: ✅ 1.300µs (SLO: <10.000µs 📉 -87.0%) vs baseline: +1.9% Memory: ✅ 40.241MB (SLO: <41.500MB -3.0%) vs baseline: +3.8% ✅ bytes_noaspectTime: ✅ 0.497µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +1.1% Memory: ✅ 40.253MB (SLO: <41.500MB -3.0%) vs baseline: +5.0% ✅ bytesio_aspectTime: ✅ 1.346µs (SLO: <10.000µs 📉 -86.5%) vs baseline: +1.3% Memory: ✅ 40.213MB (SLO: <41.500MB -3.1%) vs baseline: +4.5% ✅ bytesio_noaspectTime: ✅ 0.501µs (SLO: <10.000µs 📉 -95.0%) vs baseline: ~same Memory: ✅ 40.272MB (SLO: <41.500MB -3.0%) vs baseline: +4.7% ✅ capitalize_aspectTime: ✅ 0.736µs (SLO: <10.000µs 📉 -92.6%) vs baseline: -0.6% Memory: ✅ 40.313MB (SLO: <41.500MB -2.9%) vs baseline: +5.1% ✅ capitalize_noaspectTime: ✅ 0.434µs (SLO: <10.000µs 📉 -95.7%) vs baseline: +0.5% Memory: ✅ 40.110MB (SLO: <41.500MB -3.3%) vs baseline: +4.1% ✅ casefold_aspectTime: ✅ 0.737µs (SLO: <10.000µs 📉 -92.6%) vs baseline: +0.3% Memory: ✅ 40.151MB (SLO: <41.500MB -3.3%) vs baseline: +4.2% ✅ casefold_noaspectTime: ✅ 0.369µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +1.3% Memory: ✅ 40.092MB (SLO: <41.500MB -3.4%) vs baseline: +4.3% ✅ decode_aspectTime: ✅ 0.719µs (SLO: <10.000µs 📉 -92.8%) vs baseline: -0.8% Memory: ✅ 40.194MB (SLO: <41.500MB -3.1%) vs baseline: +4.9% ✅ decode_noaspectTime: ✅ 0.421µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +0.9% Memory: ✅ 40.293MB (SLO: <41.500MB -2.9%) vs baseline: +5.1% ✅ encode_aspectTime: ✅ 0.711µs (SLO: <10.000µs 📉 -92.9%) vs baseline: +0.4% Memory: ✅ 40.054MB (SLO: <41.500MB -3.5%) vs baseline: +4.5% ✅ encode_noaspectTime: ✅ 0.404µs (SLO: <10.000µs 📉 -96.0%) vs baseline: +0.3% Memory: ✅ 40.274MB (SLO: <41.500MB -3.0%) vs baseline: +5.4% ✅ format_aspectTime: ✅ 3.443µs (SLO: <10.000µs 📉 -65.6%) vs baseline: -0.6% Memory: ✅ 40.380MB (SLO: <41.500MB -2.7%) vs baseline: +4.3% ✅ format_map_aspectTime: ✅ 3.528µs (SLO: <10.000µs 📉 -64.7%) vs baseline: -2.1% Memory: ✅ 40.170MB (SLO: <41.500MB -3.2%) vs baseline: +4.8% ✅ format_map_noaspectTime: ✅ 0.774µs (SLO: <10.000µs 📉 -92.3%) vs baseline: -0.1% Memory: ✅ 40.210MB (SLO: <41.500MB -3.1%) vs baseline: +4.3% ✅ format_noaspectTime: ✅ 0.595µs (SLO: <10.000µs 📉 -94.1%) vs baseline: -0.2% Memory: ✅ 40.195MB (SLO: <41.500MB -3.1%) vs baseline: +4.8% ✅ index_aspectTime: ✅ 0.358µs (SLO: <10.000µs 📉 -96.4%) vs baseline: +0.4% Memory: ✅ 40.259MB (SLO: <41.500MB -3.0%) vs baseline: +4.4% ✅ index_noaspectTime: ✅ 0.275µs (SLO: <10.000µs 📉 -97.3%) vs baseline: -1.2% Memory: ✅ 40.213MB (SLO: <41.500MB -3.1%) vs baseline: +4.8% ✅ join_aspectTime: ✅ 1.342µs (SLO: <10.000µs 📉 -86.6%) vs baseline: +0.8% Memory: ✅ 40.079MB (SLO: <41.500MB -3.4%) vs baseline: +3.7% ✅ join_noaspectTime: ✅ 0.493µs (SLO: <10.000µs 📉 -95.1%) vs baseline: +0.5% Memory: ✅ 40.176MB (SLO: <41.500MB -3.2%) vs baseline: +4.6% ✅ ljust_aspectTime: ✅ 2.603µs (SLO: <20.000µs 📉 -87.0%) vs baseline: +1.5% Memory: ✅ 40.392MB (SLO: <41.500MB -2.7%) vs baseline: +5.3% ✅ ljust_noaspectTime: ✅ 0.409µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +0.3% Memory: ✅ 40.213MB (SLO: <41.500MB -3.1%) vs baseline: +4.4% ✅ lower_aspectTime: ✅ 2.309µs (SLO: <10.000µs 📉 -76.9%) vs baseline: +2.8% Memory: ✅ 40.092MB (SLO: <41.500MB -3.4%) vs baseline: +4.7% ✅ lower_noaspectTime: ✅ 0.367µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -1.6% Memory: ✅ 40.173MB (SLO: <41.500MB -3.2%) vs baseline: +4.9% ✅ lstrip_aspectTime: ✅ 2.257µs (SLO: <20.000µs 📉 -88.7%) vs baseline: +0.7% Memory: ✅ 40.264MB (SLO: <41.500MB -3.0%) vs baseline: +4.0% ✅ lstrip_noaspectTime: ✅ 0.379µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -0.3% Memory: ✅ 40.093MB (SLO: <41.500MB -3.4%) vs baseline: +4.4% ✅ modulo_aspectTime: ✅ 1.062µs (SLO: <10.000µs 📉 -89.4%) vs baseline: +6.1% Memory: ✅ 40.170MB (SLO: <41.500MB -3.2%) vs baseline: +4.5% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 1.544µs (SLO: <10.000µs 📉 -84.6%) vs baseline: -0.1% Memory: ✅ 40.022MB (SLO: <41.500MB -3.6%) vs baseline: +4.4% ✅ modulo_aspect_for_bytesTime: ✅ 0.973µs (SLO: <10.000µs 📉 -90.3%) vs baseline: -0.4% Memory: ✅ 40.122MB (SLO: <41.500MB -3.3%) vs baseline: +4.1% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 1.244µs (SLO: <10.000µs 📉 -87.6%) vs baseline: +2.1% Memory: ✅ 40.215MB (SLO: <41.500MB -3.1%) vs baseline: +4.3% ✅ modulo_noaspectTime: ✅ 0.629µs (SLO: <10.000µs 📉 -93.7%) vs baseline: +0.5% Memory: ✅ 40.232MB (SLO: <41.500MB -3.1%) vs baseline: +4.9% ✅ replace_aspectTime: ✅ 4.885µs (SLO: <10.000µs 📉 -51.2%) vs baseline: -1.0% Memory: ✅ 40.157MB (SLO: <41.500MB -3.2%) vs baseline: +4.2% ✅ replace_noaspectTime: ✅ 0.459µs (SLO: <10.000µs 📉 -95.4%) vs baseline: -0.4% Memory: ✅ 40.253MB (SLO: <41.500MB -3.0%) vs baseline: +4.7% ✅ repr_aspectTime: ✅ 0.907µs (SLO: <10.000µs 📉 -90.9%) vs baseline: -0.1% Memory: ✅ 40.299MB (SLO: <41.500MB -2.9%) vs baseline: +4.3% ✅ repr_noaspectTime: ✅ 0.419µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +0.4% Memory: ✅ 40.314MB (SLO: <41.500MB -2.9%) vs baseline: +5.2% ✅ rstrip_aspectTime: ✅ 1.935µs (SLO: <20.000µs 📉 -90.3%) vs baseline: +1.3% Memory: ✅ 40.224MB (SLO: <41.500MB -3.1%) vs baseline: +4.0% ✅ rstrip_noaspectTime: ✅ 0.384µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +2.6% Memory: ✅ 40.293MB (SLO: <41.500MB -2.9%) vs baseline: +5.0% ✅ slice_aspectTime: ✅ 0.491µs (SLO: <10.000µs 📉 -95.1%) vs baseline: ~same Memory: ✅ 40.259MB (SLO: <41.500MB -3.0%) vs baseline: +4.3% ✅ slice_noaspectTime: ✅ 0.441µs (SLO: <10.000µs 📉 -95.6%) vs baseline: -0.5% Memory: ✅ 40.352MB (SLO: <41.500MB -2.8%) vs baseline: +5.0% ✅ stringio_aspectTime: ✅ 1.778µs (SLO: <10.000µs 📉 -82.2%) vs baseline: 📈 +15.0% Memory: ✅ 40.116MB (SLO: <41.500MB -3.3%) vs baseline: +4.5% ✅ stringio_noaspectTime: ✅ 0.710µs (SLO: <10.000µs 📉 -92.9%) vs baseline: -0.3% Memory: ✅ 40.172MB (SLO: <41.500MB -3.2%) vs baseline: +4.8% ✅ strip_aspectTime: ✅ 2.219µs (SLO: <20.000µs 📉 -88.9%) vs baseline: -0.9% Memory: ✅ 40.131MB (SLO: <41.500MB -3.3%) vs baseline: +4.5% ✅ strip_noaspectTime: ✅ 0.388µs (SLO: <10.000µs 📉 -96.1%) vs baseline: +1.4% Memory: ✅ 40.134MB (SLO: <41.500MB -3.3%) vs baseline: +4.8% ✅ swapcase_aspectTime: ✅ 2.536µs (SLO: <10.000µs 📉 -74.6%) vs baseline: +4.1% Memory: ✅ 40.137MB (SLO: <41.500MB -3.3%) vs baseline: +4.6% ✅ swapcase_noaspectTime: ✅ 0.537µs (SLO: <10.000µs 📉 -94.6%) vs baseline: -0.3% Memory: ✅ 40.253MB (SLO: <41.500MB -3.0%) vs baseline: +4.5% ✅ title_aspectTime: ✅ 2.432µs (SLO: <10.000µs 📉 -75.7%) vs baseline: +3.3% Memory: ✅ 40.092MB (SLO: <41.500MB -3.4%) vs baseline: +4.4% ✅ title_noaspectTime: ✅ 0.503µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +0.1% Memory: ✅ 40.330MB (SLO: <41.500MB -2.8%) vs baseline: +5.2% ✅ translate_aspectTime: ✅ 3.313µs (SLO: <10.000µs 📉 -66.9%) vs baseline: -0.2% Memory: ✅ 40.236MB (SLO: <41.500MB -3.0%) vs baseline: +4.6% ✅ translate_noaspectTime: ✅ 1.034µs (SLO: <10.000µs 📉 -89.7%) vs baseline: -0.2% Memory: ✅ 40.150MB (SLO: <41.500MB -3.3%) vs baseline: +4.3% ✅ upper_aspectTime: ✅ 2.289µs (SLO: <10.000µs 📉 -77.1%) vs baseline: +1.3% Memory: ✅ 40.310MB (SLO: <41.500MB -2.9%) vs baseline: +5.0% ✅ upper_noaspectTime: ✅ 0.366µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -0.5% Memory: ✅ 40.152MB (SLO: <41.500MB -3.2%) vs baseline: +4.5% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 5.152µs (SLO: <10.000µs 📉 -48.5%) vs baseline: 📈 +25.8% Memory: ✅ 40.167MB (SLO: <41.000MB -2.0%) vs baseline: +4.4% ✅ ospathbasename_noaspectTime: ✅ 1.084µs (SLO: <10.000µs 📉 -89.2%) vs baseline: ~same Memory: ✅ 40.324MB (SLO: <41.000MB 🟡 -1.6%) vs baseline: +5.1% ✅ ospathjoin_aspectTime: ✅ 6.153µs (SLO: <10.000µs 📉 -38.5%) vs baseline: -0.1% Memory: ✅ 40.187MB (SLO: <41.000MB 🟡 -2.0%) vs baseline: +4.7% ✅ ospathjoin_noaspectTime: ✅ 2.276µs (SLO: <10.000µs 📉 -77.2%) vs baseline: -0.7% Memory: ✅ 40.383MB (SLO: <41.000MB 🟡 -1.5%) vs baseline: +5.1% ✅ ospathnormcase_aspectTime: ✅ 3.442µs (SLO: <10.000µs 📉 -65.6%) vs baseline: +0.8% Memory: ✅ 40.383MB (SLO: <41.000MB 🟡 -1.5%) vs baseline: +5.3% ✅ ospathnormcase_noaspectTime: ✅ 0.569µs (SLO: <10.000µs 📉 -94.3%) vs baseline: -0.6% Memory: ✅ 40.187MB (SLO: <41.000MB 🟡 -2.0%) vs baseline: +4.4% ✅ ospathsplit_aspectTime: ✅ 4.697µs (SLO: <10.000µs 📉 -53.0%) vs baseline: -0.8% Memory: ✅ 40.285MB (SLO: <41.000MB 🟡 -1.7%) vs baseline: +5.4% ✅ ospathsplit_noaspectTime: ✅ 1.594µs (SLO: <10.000µs 📉 -84.1%) vs baseline: -0.6% Memory: ✅ 40.187MB (SLO: <41.000MB 🟡 -2.0%) vs baseline: +4.7% ✅ ospathsplitdrive_aspectTime: ✅ 3.595µs (SLO: <10.000µs 📉 -64.0%) vs baseline: -1.0% Memory: ✅ 40.147MB (SLO: <41.000MB -2.1%) vs baseline: +4.3% ✅ ospathsplitdrive_noaspectTime: ✅ 0.707µs (SLO: <10.000µs 📉 -92.9%) vs baseline: +0.4% Memory: ✅ 40.069MB (SLO: <41.000MB -2.3%) vs baseline: +4.1% ✅ ospathsplitext_aspectTime: ✅ 4.497µs (SLO: <10.000µs 📉 -55.0%) vs baseline: -0.4% Memory: ✅ 40.108MB (SLO: <41.000MB -2.2%) vs baseline: +4.5% ✅ ospathsplitext_noaspectTime: ✅ 1.377µs (SLO: <10.000µs 📉 -86.2%) vs baseline: -0.4% Memory: ✅ 40.108MB (SLO: <41.000MB -2.2%) vs baseline: +4.6% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.374µs (SLO: <20.000µs 📉 -83.1%) vs baseline: 📈 +13.4% Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ 1-count-metrics-100-timesTime: ✅ 200.891µs (SLO: <220.000µs -8.7%) vs baseline: -1.2% Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +4.8% ✅ 1-distribution-metric-1-timesTime: ✅ 3.275µs (SLO: <20.000µs 📉 -83.6%) vs baseline: -2.5% Memory: ✅ 35.114MB (SLO: <35.500MB 🟡 -1.1%) vs baseline: +5.1% ✅ 1-distribution-metrics-100-timesTime: ✅ 217.933µs (SLO: <230.000µs -5.2%) vs baseline: -0.3% Memory: ✅ 35.154MB (SLO: <35.500MB 🟡 -1.0%) vs baseline: +4.9% ✅ 1-gauge-metric-1-timesTime: ✅ 2.180µs (SLO: <20.000µs 📉 -89.1%) vs baseline: +0.6% Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +4.9% ✅ 1-gauge-metrics-100-timesTime: ✅ 136.652µs (SLO: <150.000µs -8.9%) vs baseline: -0.4% Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ 1-rate-metric-1-timesTime: ✅ 3.079µs (SLO: <20.000µs 📉 -84.6%) vs baseline: -1.5% Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +4.7% ✅ 1-rate-metrics-100-timesTime: ✅ 215.365µs (SLO: <250.000µs 📉 -13.9%) vs baseline: -1.2% Memory: ✅ 35.134MB (SLO: <35.500MB 🟡 -1.0%) vs baseline: +4.9% ✅ 100-count-metrics-100-timesTime: ✅ 20.415ms (SLO: <22.000ms -7.2%) vs baseline: +0.5% Memory: ✅ 34.800MB (SLO: <35.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.294ms (SLO: <2.550ms 📉 -10.1%) vs baseline: +1.3% Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.403ms (SLO: <1.550ms -9.5%) vs baseline: -0.2% Memory: ✅ 34.701MB (SLO: <35.500MB -2.2%) vs baseline: +4.7% ✅ 100-rate-metrics-100-timesTime: ✅ 2.222ms (SLO: <2.550ms 📉 -12.9%) vs baseline: +0.7% Memory: ✅ 34.800MB (SLO: <35.500MB 🟡 -2.0%) vs baseline: +4.7% ✅ flush-1-metricTime: ✅ 4.603µs (SLO: <20.000µs 📉 -77.0%) vs baseline: +0.5% Memory: ✅ 35.154MB (SLO: <35.500MB 🟡 -1.0%) vs baseline: +4.9% ✅ flush-100-metricsTime: ✅ 173.638µs (SLO: <250.000µs 📉 -30.5%) vs baseline: -0.3% Memory: ✅ 35.173MB (SLO: <35.500MB 🟡 -0.9%) vs baseline: +4.9% ✅ flush-1000-metricsTime: ✅ 2.180ms (SLO: <2.500ms 📉 -12.8%) vs baseline: +0.3% Memory: ✅ 35.960MB (SLO: <36.500MB 🟡 -1.5%) vs baseline: +5.0% 🟡 Near SLO Breach (15 suites)🟡 coreapiscenario - 10/10 (1 unstable)
|
15c46fb to
ed892a6
Compare
https://datadoghq.atlassian.net/browse/PROF-13185
Description
Add support for profiling
asyncio.Semaphoreobjects in the Python Lock profiler.Changes
note: This follows the same pattern established in PR #15368 for
threading.BoundedSemaphore.AsyncioSemaphoreCollectorforasyncio.SemaphoreprofilingMODULEandPATCHED_LOCK_NAMEattributes instead of overriding_get_patch_target/_set_patch_targetmethodsImportErrorhandling forasyncio(core library since Python 3.4)BaseAsyncioLockCollectorTestclass hierarchy to reduce code duplication betweenLockandSemaphoretestsWhy no internal lock detection?
Unlike
threading.Semaphorewhich internally uses athreading.LockviaCondition,asyncio.Semaphoredoes not compose other asyncio primitives internally. This means we don't need theis_internaldetection logic that exists for threading semaphores.Testing
TestAsyncioSemaphoreCollectortest class inheriting fromBaseAsyncioLockCollectorTesttest_collector_reprto cover all collector types