-
Notifications
You must be signed in to change notification settings - Fork 469
feat(profiling): profile threading.BoundedSemaphore primitives with Python Lock profiler #15375
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
|
|
80caf31 to
b4ee979
Compare
b4ee979 to
27dc90f
Compare
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 261 ± 6 ms. The average import time from base is: 270 ± 10 ms. The import time difference between this PR and base is: -8.0 ± 0.5 ms. Import time breakdownThe following import paths have shrunk:
|
Performance SLOsComparing candidate vlad/proflock-implement-bounded-semaphore-v2 (27dc90f) with baseline main (a14402e) 📈 Performance Regressions (2 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 0.409µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +1.0% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +4.8% ✅ add_inplace_aspectTime: ✅ 0.407µs (SLO: <10.000µs 📉 -95.9%) vs baseline: -0.4% Memory: ✅ 39.499MB (SLO: <41.500MB -4.8%) vs baseline: +4.0% ✅ add_inplace_noaspectTime: ✅ 0.321µs (SLO: <10.000µs 📉 -96.8%) vs baseline: +1.3% Memory: ✅ 39.538MB (SLO: <41.500MB -4.7%) vs baseline: +3.8% ✅ add_noaspectTime: ✅ 0.275µs (SLO: <10.000µs 📉 -97.3%) vs baseline: -0.6% Memory: ✅ 39.518MB (SLO: <41.500MB -4.8%) vs baseline: +4.3% ✅ bytearray_aspectTime: ✅ 1.327µs (SLO: <10.000µs 📉 -86.7%) vs baseline: ~same Memory: ✅ 39.892MB (SLO: <41.500MB -3.9%) vs baseline: +6.2% ✅ bytearray_extend_aspectTime: ✅ 1.542µs (SLO: <10.000µs 📉 -84.6%) vs baseline: +1.0% Memory: ✅ 39.931MB (SLO: <41.500MB -3.8%) vs baseline: +6.0% ✅ bytearray_extend_noaspectTime: ✅ 0.610µs (SLO: <10.000µs 📉 -93.9%) vs baseline: -0.7% Memory: ✅ 39.558MB (SLO: <41.500MB -4.7%) vs baseline: +4.8% ✅ bytearray_noaspectTime: ✅ 0.487µs (SLO: <10.000µs 📉 -95.1%) vs baseline: +1.0% Memory: ✅ 39.459MB (SLO: <41.500MB -4.9%) vs baseline: +4.1% ✅ bytes_aspectTime: ✅ 1.307µs (SLO: <10.000µs 📉 -86.9%) vs baseline: +1.7% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +5.1% ✅ bytes_noaspectTime: ✅ 0.492µs (SLO: <10.000µs 📉 -95.1%) vs baseline: +0.2% Memory: ✅ 39.518MB (SLO: <41.500MB -4.8%) vs baseline: +4.9% ✅ bytesio_aspectTime: ✅ 1.288µs (SLO: <10.000µs 📉 -87.1%) vs baseline: -2.1% Memory: ✅ 39.931MB (SLO: <41.500MB -3.8%) vs baseline: +6.2% ✅ bytesio_noaspectTime: ✅ 0.503µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -0.8% Memory: ✅ 39.459MB (SLO: <41.500MB -4.9%) vs baseline: +4.6% ✅ capitalize_aspectTime: ✅ 0.732µs (SLO: <10.000µs 📉 -92.7%) vs baseline: -1.0% Memory: ✅ 39.479MB (SLO: <41.500MB -4.9%) vs baseline: +4.6% ✅ capitalize_noaspectTime: ✅ 0.431µs (SLO: <10.000µs 📉 -95.7%) vs baseline: -1.6% Memory: ✅ 39.499MB (SLO: <41.500MB -4.8%) vs baseline: +3.9% ✅ casefold_aspectTime: ✅ 0.736µs (SLO: <10.000µs 📉 -92.6%) vs baseline: -0.8% Memory: ✅ 39.951MB (SLO: <41.500MB -3.7%) vs baseline: +6.0% ✅ casefold_noaspectTime: ✅ 0.366µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -0.2% Memory: ✅ 39.558MB (SLO: <41.500MB -4.7%) vs baseline: +5.2% ✅ decode_aspectTime: ✅ 0.727µs (SLO: <10.000µs 📉 -92.7%) vs baseline: -0.4% Memory: ✅ 39.479MB (SLO: <41.500MB -4.9%) vs baseline: +4.3% ✅ decode_noaspectTime: ✅ 0.418µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +0.4% Memory: ✅ 39.499MB (SLO: <41.500MB -4.8%) vs baseline: +5.1% ✅ encode_aspectTime: ✅ 0.708µs (SLO: <10.000µs 📉 -92.9%) vs baseline: -0.7% Memory: ✅ 39.577MB (SLO: <41.500MB -4.6%) vs baseline: +4.6% ✅ encode_noaspectTime: ✅ 0.404µs (SLO: <10.000µs 📉 -96.0%) vs baseline: +0.5% Memory: ✅ 39.420MB (SLO: <41.500MB -5.0%) vs baseline: +4.7% ✅ format_aspectTime: ✅ 3.349µs (SLO: <10.000µs 📉 -66.5%) vs baseline: -0.3% Memory: ✅ 39.813MB (SLO: <41.500MB -4.1%) vs baseline: +5.6% ✅ format_map_aspectTime: ✅ 3.512µs (SLO: <10.000µs 📉 -64.9%) vs baseline: +0.4% Memory: ✅ 39.892MB (SLO: <41.500MB -3.9%) vs baseline: +5.1% ✅ format_map_noaspectTime: ✅ 0.770µs (SLO: <10.000µs 📉 -92.3%) vs baseline: -0.8% Memory: ✅ 39.479MB (SLO: <41.500MB -4.9%) vs baseline: +3.9% ✅ format_noaspectTime: ✅ 0.594µs (SLO: <10.000µs 📉 -94.1%) vs baseline: +0.1% Memory: ✅ 39.479MB (SLO: <41.500MB -4.9%) vs baseline: +4.9% ✅ index_aspectTime: ✅ 0.360µs (SLO: <10.000µs 📉 -96.4%) vs baseline: -0.1% Memory: ✅ 39.852MB (SLO: <41.500MB -4.0%) vs baseline: +5.0% ✅ index_noaspectTime: ✅ 0.274µs (SLO: <10.000µs 📉 -97.3%) vs baseline: -0.7% Memory: ✅ 39.499MB (SLO: <41.500MB -4.8%) vs baseline: +5.0% ✅ join_aspectTime: ✅ 1.408µs (SLO: <10.000µs 📉 -85.9%) vs baseline: +1.7% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +5.2% ✅ join_noaspectTime: ✅ 0.490µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.4% Memory: ✅ 39.440MB (SLO: <41.500MB -5.0%) vs baseline: +4.1% ✅ ljust_aspectTime: ✅ 2.510µs (SLO: <20.000µs 📉 -87.4%) vs baseline: ~same Memory: ✅ 39.459MB (SLO: <41.500MB -4.9%) vs baseline: +4.0% ✅ ljust_noaspectTime: ✅ 0.405µs (SLO: <10.000µs 📉 -96.0%) vs baseline: -0.1% Memory: ✅ 39.420MB (SLO: <41.500MB -5.0%) vs baseline: +4.8% ✅ lower_aspectTime: ✅ 2.280µs (SLO: <10.000µs 📉 -77.2%) vs baseline: +2.2% Memory: ✅ 39.558MB (SLO: <41.500MB -4.7%) vs baseline: +4.0% ✅ lower_noaspectTime: ✅ 0.369µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +0.9% Memory: ✅ 39.518MB (SLO: <41.500MB -4.8%) vs baseline: +5.3% ✅ lstrip_aspectTime: ✅ 2.520µs (SLO: <20.000µs 📉 -87.4%) vs baseline: 📈 +12.9% Memory: ✅ 39.793MB (SLO: <41.500MB -4.1%) vs baseline: +5.7% ✅ lstrip_noaspectTime: ✅ 0.382µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -1.0% Memory: ✅ 39.361MB (SLO: <41.500MB -5.2%) vs baseline: +4.5% ✅ modulo_aspectTime: ✅ 1.043µs (SLO: <10.000µs 📉 -89.6%) vs baseline: -0.8% Memory: ✅ 39.656MB (SLO: <41.500MB -4.4%) vs baseline: +4.7% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 1.556µs (SLO: <10.000µs 📉 -84.4%) vs baseline: +0.7% Memory: ✅ 39.538MB (SLO: <41.500MB -4.7%) vs baseline: +5.1% ✅ modulo_aspect_for_bytesTime: ✅ 0.980µs (SLO: <10.000µs 📉 -90.2%) vs baseline: -0.6% Memory: ✅ 39.754MB (SLO: <41.500MB -4.2%) vs baseline: +5.5% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 1.257µs (SLO: <10.000µs 📉 -87.4%) vs baseline: -0.3% Memory: ✅ 39.440MB (SLO: <41.500MB -5.0%) vs baseline: +4.9% ✅ modulo_noaspectTime: ✅ 0.627µs (SLO: <10.000µs 📉 -93.7%) vs baseline: -0.2% Memory: ✅ 39.538MB (SLO: <41.500MB -4.7%) vs baseline: +5.1% ✅ replace_aspectTime: ✅ 5.421µs (SLO: <10.000µs 📉 -45.8%) vs baseline: 📈 +11.0% Memory: ✅ 39.499MB (SLO: <41.500MB -4.8%) vs baseline: +5.0% ✅ replace_noaspectTime: ✅ 0.463µs (SLO: <10.000µs 📉 -95.4%) vs baseline: ~same Memory: ✅ 39.420MB (SLO: <41.500MB -5.0%) vs baseline: +4.9% ✅ repr_aspectTime: ✅ 0.910µs (SLO: <10.000µs 📉 -90.9%) vs baseline: +0.9% Memory: ✅ 39.892MB (SLO: <41.500MB -3.9%) vs baseline: +5.0% ✅ repr_noaspectTime: ✅ 0.421µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +1.6% Memory: ✅ 39.459MB (SLO: <41.500MB -4.9%) vs baseline: +4.0% ✅ rstrip_aspectTime: ✅ 1.915µs (SLO: <20.000µs 📉 -90.4%) vs baseline: +1.3% Memory: ✅ 39.833MB (SLO: <41.500MB -4.0%) vs baseline: +6.0% ✅ rstrip_noaspectTime: ✅ 0.379µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +0.2% Memory: ✅ 39.440MB (SLO: <41.500MB -5.0%) vs baseline: +4.9% ✅ slice_aspectTime: ✅ 0.499µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +1.0% Memory: ✅ 39.892MB (SLO: <41.500MB -3.9%) vs baseline: +4.8% ✅ slice_noaspectTime: ✅ 0.446µs (SLO: <10.000µs 📉 -95.5%) vs baseline: +0.2% Memory: ✅ 39.420MB (SLO: <41.500MB -5.0%) vs baseline: +4.6% ✅ stringio_aspectTime: ✅ 1.524µs (SLO: <10.000µs 📉 -84.8%) vs baseline: ~same Memory: ✅ 39.872MB (SLO: <41.500MB -3.9%) vs baseline: +6.0% ✅ stringio_noaspectTime: ✅ 0.729µs (SLO: <10.000µs 📉 -92.7%) vs baseline: +1.9% Memory: ✅ 39.440MB (SLO: <41.500MB -5.0%) vs baseline: +4.6% ✅ strip_aspectTime: ✅ 2.479µs (SLO: <20.000µs 📉 -87.6%) vs baseline: 📈 +12.2% Memory: ✅ 39.459MB (SLO: <41.500MB -4.9%) vs baseline: +3.9% ✅ strip_noaspectTime: ✅ 0.388µs (SLO: <10.000µs 📉 -96.1%) vs baseline: +0.3% Memory: ✅ 39.440MB (SLO: <41.500MB -5.0%) vs baseline: +5.0% ✅ swapcase_aspectTime: ✅ 2.386µs (SLO: <10.000µs 📉 -76.1%) vs baseline: -0.5% Memory: ✅ 39.440MB (SLO: <41.500MB -5.0%) vs baseline: +4.7% ✅ swapcase_noaspectTime: ✅ 0.535µs (SLO: <10.000µs 📉 -94.7%) vs baseline: ~same Memory: ✅ 39.479MB (SLO: <41.500MB -4.9%) vs baseline: +5.0% ✅ title_aspectTime: ✅ 2.389µs (SLO: <10.000µs 📉 -76.1%) vs baseline: +2.3% Memory: ✅ 39.499MB (SLO: <41.500MB -4.8%) vs baseline: +4.0% ✅ title_noaspectTime: ✅ 0.498µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -1.8% Memory: ✅ 39.440MB (SLO: <41.500MB -5.0%) vs baseline: +4.8% ✅ translate_aspectTime: ✅ 3.200µs (SLO: <10.000µs 📉 -68.0%) vs baseline: -1.0% Memory: ✅ 39.361MB (SLO: <41.500MB -5.2%) vs baseline: +4.4% ✅ translate_noaspectTime: ✅ 1.042µs (SLO: <10.000µs 📉 -89.6%) vs baseline: +0.1% Memory: ✅ 39.341MB (SLO: <41.500MB -5.2%) vs baseline: +3.7% ✅ upper_aspectTime: ✅ 2.187µs (SLO: <10.000µs 📉 -78.1%) vs baseline: -0.8% Memory: ✅ 39.518MB (SLO: <41.500MB -4.8%) vs baseline: +4.0% ✅ upper_noaspectTime: ✅ 0.374µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +0.5% Memory: ✅ 39.420MB (SLO: <41.500MB -5.0%) vs baseline: +4.5% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 4.798µs (SLO: <10.000µs 📉 -52.0%) vs baseline: 📈 +11.2% Memory: ✅ 39.833MB (SLO: <41.000MB -2.8%) vs baseline: +5.0% ✅ ospathbasename_noaspectTime: ✅ 1.087µs (SLO: <10.000µs 📉 -89.1%) vs baseline: -0.2% Memory: ✅ 39.911MB (SLO: <41.000MB -2.7%) vs baseline: +5.0% ✅ ospathjoin_aspectTime: ✅ 7.135µs (SLO: <10.000µs 📉 -28.7%) vs baseline: 📈 +14.9% Memory: ✅ 39.852MB (SLO: <41.000MB -2.8%) vs baseline: +4.9% ✅ ospathjoin_noaspectTime: ✅ 2.303µs (SLO: <10.000µs 📉 -77.0%) vs baseline: -0.1% Memory: ✅ 39.951MB (SLO: <41.000MB -2.6%) vs baseline: +5.2% ✅ ospathnormcase_aspectTime: ✅ 3.836µs (SLO: <10.000µs 📉 -61.6%) vs baseline: +7.4% Memory: ✅ 39.813MB (SLO: <41.000MB -2.9%) vs baseline: +4.7% ✅ ospathnormcase_noaspectTime: ✅ 0.568µs (SLO: <10.000µs 📉 -94.3%) vs baseline: -0.7% Memory: ✅ 39.852MB (SLO: <41.000MB -2.8%) vs baseline: +4.7% ✅ ospathsplit_aspectTime: ✅ 5.694µs (SLO: <10.000µs 📉 -43.1%) vs baseline: 📈 +16.0% Memory: ✅ 39.813MB (SLO: <41.000MB -2.9%) vs baseline: +4.8% ✅ ospathsplit_noaspectTime: ✅ 1.590µs (SLO: <10.000µs 📉 -84.1%) vs baseline: -0.2% Memory: ✅ 39.833MB (SLO: <41.000MB -2.8%) vs baseline: +4.7% ✅ ospathsplitdrive_aspectTime: ✅ 3.737µs (SLO: <10.000µs 📉 -62.6%) vs baseline: +0.3% Memory: ✅ 39.911MB (SLO: <41.000MB -2.7%) vs baseline: +5.0% ✅ ospathsplitdrive_noaspectTime: ✅ 0.692µs (SLO: <10.000µs 📉 -93.1%) vs baseline: -0.2% Memory: ✅ 39.892MB (SLO: <41.000MB -2.7%) vs baseline: +5.1% ✅ ospathsplitext_aspectTime: ✅ 4.655µs (SLO: <10.000µs 📉 -53.5%) vs baseline: ~same Memory: ✅ 39.892MB (SLO: <41.000MB -2.7%) vs baseline: +4.9% ✅ ospathsplitext_noaspectTime: ✅ 1.378µs (SLO: <10.000µs 📉 -86.2%) vs baseline: -0.3% Memory: ✅ 39.852MB (SLO: <41.000MB -2.8%) vs baseline: +4.9% 🟡 Near SLO Breach (3 suites)🟡 flasksimple - 18/18✅ appsec-getTime: ✅ 4.607ms (SLO: <4.750ms -3.0%) vs baseline: +0.7% Memory: ✅ 64.004MB (SLO: <66.500MB -3.8%) vs baseline: +4.7% ✅ appsec-postTime: ✅ 6.642ms (SLO: <6.750ms 🟡 -1.6%) vs baseline: +0.5% Memory: ✅ 64.416MB (SLO: <66.500MB -3.1%) vs baseline: +4.9% ✅ appsec-telemetryTime: ✅ 4.595ms (SLO: <4.750ms -3.3%) vs baseline: -0.2% Memory: ✅ 63.943MB (SLO: <66.500MB -3.8%) vs baseline: +4.6% ✅ debuggerTime: ✅ 1.858ms (SLO: <2.000ms -7.1%) vs baseline: ~same Memory: ✅ 47.940MB (SLO: <49.500MB -3.2%) vs baseline: +5.1% ✅ iast-getTime: ✅ 1.859ms (SLO: <2.000ms -7.1%) vs baseline: ~same Memory: ✅ 44.695MB (SLO: <49.000MB -8.8%) vs baseline: +4.7% ✅ profilerTime: ✅ 1.926ms (SLO: <2.100ms -8.3%) vs baseline: -0.1% Memory: ✅ 48.453MB (SLO: <50.000MB -3.1%) vs baseline: +4.9% ✅ resource-renamingTime: ✅ 3.374ms (SLO: <3.650ms -7.6%) vs baseline: -0.1% Memory: ✅ 54.692MB (SLO: <56.000MB -2.3%) vs baseline: +4.9% ✅ tracerTime: ✅ 3.361ms (SLO: <3.650ms -7.9%) vs baseline: ~same Memory: ✅ 54.707MB (SLO: <56.500MB -3.2%) vs baseline: +5.0% ✅ tracer-nativeTime: ✅ 3.366ms (SLO: <3.650ms -7.8%) vs baseline: +0.2% Memory: ✅ 54.730MB (SLO: <60.000MB -8.8%) vs baseline: +5.1% 🟡 iastpropagation - 8/8✅ no-propagationTime: ✅ 48.979µs (SLO: <60.000µs 📉 -18.4%) vs baseline: +0.5% Memory: ✅ 39.538MB (SLO: <40.500MB -2.4%) vs baseline: +4.9% ✅ propagation_enabledTime: ✅ 167.364µs (SLO: <190.000µs 📉 -11.9%) vs baseline: -0.2% Memory: ✅ 39.558MB (SLO: <40.000MB 🟡 -1.1%) vs baseline: +5.0% ✅ propagation_enabled_100Time: ✅ 1.850ms (SLO: <2.300ms 📉 -19.6%) vs baseline: -0.8% Memory: ✅ 39.518MB (SLO: <40.000MB 🟡 -1.2%) vs baseline: +5.0% ✅ propagation_enabled_1000Time: ✅ 32.194ms (SLO: <34.550ms -6.8%) vs baseline: +0.4% Memory: ✅ 39.558MB (SLO: <40.000MB 🟡 -1.1%) vs baseline: +4.9% 🟡 packagespackageforrootmodulemapping - 4/4✅ cache_offTime: ✅ 341.668ms (SLO: <354.300ms -3.6%) vs baseline: -0.3% Memory: ✅ 40.807MB (SLO: <41.500MB 🟡 -1.7%) vs baseline: +4.6% ✅ cache_onTime: ✅ 0.385µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -0.7% Memory: ✅ 39.674MB (SLO: <41.000MB -3.2%) vs baseline: +3.6%
|
Add Support for
threading.BoundedSemaphoreProfilingSummary
This PR adds profiling support for
threading.BoundedSemaphoreto the Python Lock profiler, completing coverage of Python's standard threading synchronization primitives. BoundedSemaphore is now tracked alongside Lock, RLock, and Semaphore.Why This Change
threading.BoundedSemaphoreis a commonly used synchronization primitive that prevents releasing beyond the initial count (unlike regular Semaphore). Profiling BoundedSemaphore provides visibility into potential bottlenecks and helps identify contention in bounded resource pools.What Changed
Added
ThreadingBoundedSemaphoreCollectorfollowing the same implementation pattern as forThreadingSemaphoreCollector(15327). TODO:Code Changes
BoundedSemaphoreCollectorto auto-start onthreadingmodule importTesting