-
Notifications
You must be signed in to change notification settings - Fork 477
fix(debugging): avoid iterating over mutating __dict__ #15986
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
We prevent iterations over the bare __dict__ attribute of an object that can mutate while the values are captured by returning a shallow copy of the dictionary.
Codeowners resolved as |
Performance SLOsComparing candidate fix/debugging-safe-dict-no-iter-mutation (7b1f9a2) with baseline main (1c904e5) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 103.735µs (SLO: <130.000µs 📉 -20.2%) vs baseline: +2.6% Memory: ✅ 42.546MB (SLO: <43.250MB 🟡 -1.6%) vs baseline: +4.8% ✅ add_inplace_aspectTime: ✅ 101.799µs (SLO: <130.000µs 📉 -21.7%) vs baseline: +1.0% Memory: ✅ 42.644MB (SLO: <43.250MB 🟡 -1.4%) vs baseline: +5.1% ✅ add_inplace_noaspectTime: ✅ 28.317µs (SLO: <40.000µs 📉 -29.2%) vs baseline: -0.4% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ add_noaspectTime: ✅ 48.659µs (SLO: <70.000µs 📉 -30.5%) vs baseline: -0.8% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.7% ✅ bytearray_aspectTime: ✅ 258.781µs (SLO: <400.000µs 📉 -35.3%) vs baseline: +0.5% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.7% ✅ bytearray_extend_aspectTime: ✅ 654.030µs (SLO: <800.000µs 📉 -18.2%) vs baseline: +0.5% Memory: ✅ 42.585MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ bytearray_extend_noaspectTime: ✅ 267.557µs (SLO: <400.000µs 📉 -33.1%) vs baseline: -0.1% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.7% ✅ bytearray_noaspectTime: ✅ 142.365µs (SLO: <300.000µs 📉 -52.5%) vs baseline: +3.3% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ bytes_aspectTime: ✅ 223.792µs (SLO: <300.000µs 📉 -25.4%) vs baseline: +1.4% Memory: ✅ 42.585MB (SLO: <43.500MB -2.1%) vs baseline: +4.7% ✅ bytes_noaspectTime: ✅ 134.325µs (SLO: <200.000µs 📉 -32.8%) vs baseline: +0.5% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ bytesio_aspectTime: ✅ 3.834ms (SLO: <5.000ms 📉 -23.3%) vs baseline: +0.1% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.9% ✅ bytesio_noaspectTime: ✅ 321.428µs (SLO: <420.000µs 📉 -23.5%) vs baseline: +0.4% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ capitalize_aspectTime: ✅ 90.163µs (SLO: <300.000µs 📉 -69.9%) vs baseline: +0.2% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.7% ✅ capitalize_noaspectTime: ✅ 254.848µs (SLO: <300.000µs 📉 -15.1%) vs baseline: +1.0% Memory: ✅ 42.546MB (SLO: <43.500MB -2.2%) vs baseline: +4.9% ✅ casefold_aspectTime: ✅ 89.522µs (SLO: <500.000µs 📉 -82.1%) vs baseline: -0.8% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.7% ✅ casefold_noaspectTime: ✅ 307.615µs (SLO: <500.000µs 📉 -38.5%) vs baseline: -1.5% Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1% ✅ decode_aspectTime: ✅ 87.165µs (SLO: <100.000µs 📉 -12.8%) vs baseline: ~same Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9% ✅ decode_noaspectTime: ✅ 153.065µs (SLO: <210.000µs 📉 -27.1%) vs baseline: -0.1% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ encode_aspectTime: ✅ 84.636µs (SLO: <200.000µs 📉 -57.7%) vs baseline: -0.5% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.8% ✅ encode_noaspectTime: ✅ 138.804µs (SLO: <200.000µs 📉 -30.6%) vs baseline: +1.0% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ format_aspectTime: ✅ 14.680ms (SLO: <19.200ms 📉 -23.5%) vs baseline: -0.4% Memory: ✅ 42.861MB (SLO: <43.250MB 🟡 -0.9%) vs baseline: +5.1% ✅ format_map_aspectTime: ✅ 16.451ms (SLO: <21.500ms 📉 -23.5%) vs baseline: ~same Memory: ✅ 42.841MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ format_map_noaspectTime: ✅ 369.084µs (SLO: <500.000µs 📉 -26.2%) vs baseline: +0.3% Memory: ✅ 42.684MB (SLO: <43.250MB 🟡 -1.3%) vs baseline: +4.9% ✅ format_noaspectTime: ✅ 305.688µs (SLO: <500.000µs 📉 -38.9%) vs baseline: -0.5% Memory: ✅ 42.644MB (SLO: <43.250MB 🟡 -1.4%) vs baseline: +4.9% ✅ index_aspectTime: ✅ 131.904µs (SLO: <300.000µs 📉 -56.0%) vs baseline: +6.9% Memory: ✅ 42.605MB (SLO: <43.250MB 🟡 -1.5%) vs baseline: +4.7% ✅ index_noaspectTime: ✅ 40.238µs (SLO: <300.000µs 📉 -86.6%) vs baseline: -0.7% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.8% ✅ join_aspectTime: ✅ 219.042µs (SLO: <300.000µs 📉 -27.0%) vs baseline: +0.1% Memory: ✅ 42.723MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +4.9% ✅ join_noaspectTime: ✅ 151.916µs (SLO: <300.000µs 📉 -49.4%) vs baseline: +1.2% Memory: ✅ 42.585MB (SLO: <43.250MB 🟡 -1.5%) vs baseline: +4.6% ✅ ljust_aspectTime: ✅ 575.396µs (SLO: <700.000µs 📉 -17.8%) vs baseline: 📈 +14.4% Memory: ✅ 42.566MB (SLO: <43.250MB 🟡 -1.6%) vs baseline: +4.7% ✅ ljust_noaspectTime: ✅ 258.848µs (SLO: <300.000µs 📉 -13.7%) vs baseline: +1.2% Memory: ✅ 42.526MB (SLO: <43.250MB 🟡 -1.7%) vs baseline: +4.5% ✅ lower_aspectTime: ✅ 307.104µs (SLO: <500.000µs 📉 -38.6%) vs baseline: +0.3% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ lower_noaspectTime: ✅ 233.162µs (SLO: <300.000µs 📉 -22.3%) vs baseline: -0.9% Memory: ✅ 42.585MB (SLO: <43.250MB 🟡 -1.5%) vs baseline: +4.7% ✅ lstrip_aspectTime: ✅ 0.271ms (SLO: <3.000ms 📉 -91.0%) vs baseline: ~same Memory: ✅ 42.664MB (SLO: <43.250MB 🟡 -1.4%) vs baseline: +5.1% ✅ lstrip_noaspectTime: ✅ 0.178ms (SLO: <3.000ms 📉 -94.1%) vs baseline: -1.5% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.7% ✅ modulo_aspectTime: ✅ 14.334ms (SLO: <18.750ms 📉 -23.6%) vs baseline: -0.2% Memory: ✅ 42.841MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +5.0% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.882ms (SLO: <19.350ms 📉 -23.1%) vs baseline: ~same Memory: ✅ 42.782MB (SLO: <43.500MB 🟡 -1.7%) vs baseline: +4.5% ✅ modulo_aspect_for_bytesTime: ✅ 14.515ms (SLO: <18.900ms 📉 -23.2%) vs baseline: ~same Memory: ✅ 42.782MB (SLO: <43.500MB 🟡 -1.7%) vs baseline: +4.6% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.698ms (SLO: <19.150ms 📉 -23.2%) vs baseline: -0.4% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +5.1% ✅ modulo_noaspectTime: ✅ 0.360ms (SLO: <3.000ms 📉 -88.0%) vs baseline: +0.8% Memory: ✅ 42.762MB (SLO: <43.500MB 🟡 -1.7%) vs baseline: +5.2% ✅ replace_aspectTime: ✅ 18.443ms (SLO: <24.000ms 📉 -23.2%) vs baseline: ~same Memory: ✅ 42.821MB (SLO: <44.000MB -2.7%) vs baseline: +5.1% ✅ replace_noaspectTime: ✅ 287.156µs (SLO: <300.000µs -4.3%) vs baseline: +0.3% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.8% ✅ repr_aspectTime: ✅ 317.564µs (SLO: <420.000µs 📉 -24.4%) vs baseline: ~same Memory: ✅ 42.585MB (SLO: <43.500MB -2.1%) vs baseline: +4.7% ✅ repr_noaspectTime: ✅ 46.664µs (SLO: <90.000µs 📉 -48.2%) vs baseline: +0.1% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.5% ✅ rstrip_aspectTime: ✅ 381.938µs (SLO: <500.000µs 📉 -23.6%) vs baseline: +0.9% Memory: ✅ 42.585MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ rstrip_noaspectTime: ✅ 183.251µs (SLO: <300.000µs 📉 -38.9%) vs baseline: +0.2% Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.0% ✅ slice_aspectTime: ✅ 180.995µs (SLO: <300.000µs 📉 -39.7%) vs baseline: -0.8% Memory: ✅ 42.585MB (SLO: <43.500MB -2.1%) vs baseline: +4.7% ✅ slice_noaspectTime: ✅ 53.734µs (SLO: <90.000µs 📉 -40.3%) vs baseline: -0.2% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.6% ✅ stringio_aspectTime: ✅ 4.488ms (SLO: <5.000ms 📉 -10.2%) vs baseline: 📈 +15.8% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.0% ✅ stringio_noaspectTime: ✅ 354.223µs (SLO: <500.000µs 📉 -29.2%) vs baseline: -0.2% Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1% ✅ strip_aspectTime: ✅ 270.197µs (SLO: <350.000µs 📉 -22.8%) vs baseline: +0.4% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.7% ✅ strip_noaspectTime: ✅ 178.613µs (SLO: <240.000µs 📉 -25.6%) vs baseline: -1.4% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.9% ✅ swapcase_aspectTime: ✅ 345.056µs (SLO: <500.000µs 📉 -31.0%) vs baseline: -0.1% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.0% ✅ swapcase_noaspectTime: ✅ 273.307µs (SLO: <400.000µs 📉 -31.7%) vs baseline: -0.6% Memory: ✅ 42.546MB (SLO: <43.500MB -2.2%) vs baseline: +4.8% ✅ title_aspectTime: ✅ 333.028µs (SLO: <500.000µs 📉 -33.4%) vs baseline: ~same Memory: ✅ 42.684MB (SLO: <43.000MB 🟡 -0.7%) vs baseline: +5.1% ✅ title_noaspectTime: ✅ 261.702µs (SLO: <400.000µs 📉 -34.6%) vs baseline: +0.4% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.7% ✅ translate_aspectTime: ✅ 495.535µs (SLO: <700.000µs 📉 -29.2%) vs baseline: -0.4% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.8% ✅ translate_noaspectTime: ✅ 423.364µs (SLO: <500.000µs 📉 -15.3%) vs baseline: -1.2% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ upper_aspectTime: ✅ 305.806µs (SLO: <500.000µs 📉 -38.8%) vs baseline: -0.4% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.8% ✅ upper_noaspectTime: ✅ 235.977µs (SLO: <400.000µs 📉 -41.0%) vs baseline: +0.7% Memory: ✅ 42.723MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +4.9% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 501.754µs (SLO: <700.000µs 📉 -28.3%) vs baseline: 📈 +19.0% Memory: ✅ 42.290MB (SLO: <43.500MB -2.8%) vs baseline: +4.8% ✅ ospathbasename_noaspectTime: ✅ 427.863µs (SLO: <700.000µs 📉 -38.9%) vs baseline: -0.9% Memory: ✅ 42.369MB (SLO: <43.500MB -2.6%) vs baseline: +5.0% ✅ ospathjoin_aspectTime: ✅ 627.278µs (SLO: <700.000µs 📉 -10.4%) vs baseline: +0.1% Memory: ✅ 42.428MB (SLO: <43.500MB -2.5%) vs baseline: +4.8% ✅ ospathjoin_noaspectTime: ✅ 630.534µs (SLO: <700.000µs -9.9%) vs baseline: +0.2% Memory: ✅ 42.369MB (SLO: <43.500MB -2.6%) vs baseline: +5.0% ✅ ospathnormcase_aspectTime: ✅ 353.028µs (SLO: <700.000µs 📉 -49.6%) vs baseline: -0.1% Memory: ✅ 42.330MB (SLO: <43.500MB -2.7%) vs baseline: +4.9% ✅ ospathnormcase_noaspectTime: ✅ 357.519µs (SLO: <700.000µs 📉 -48.9%) vs baseline: -0.2% Memory: ✅ 42.428MB (SLO: <43.500MB -2.5%) vs baseline: +5.0% ✅ ospathsplit_aspectTime: ✅ 489.773µs (SLO: <700.000µs 📉 -30.0%) vs baseline: -0.2% Memory: ✅ 42.330MB (SLO: <43.500MB -2.7%) vs baseline: +4.4% ✅ ospathsplit_noaspectTime: ✅ 495.733µs (SLO: <700.000µs 📉 -29.2%) vs baseline: -0.5% Memory: ✅ 42.723MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.8% ✅ ospathsplitdrive_aspectTime: ✅ 374.061µs (SLO: <700.000µs 📉 -46.6%) vs baseline: -0.4% Memory: ✅ 42.467MB (SLO: <43.500MB -2.4%) vs baseline: +5.1% ✅ ospathsplitdrive_noaspectTime: ✅ 73.515µs (SLO: <700.000µs 📉 -89.5%) vs baseline: +0.1% Memory: ✅ 42.428MB (SLO: <43.500MB -2.5%) vs baseline: +4.8% ✅ ospathsplitext_aspectTime: ✅ 456.871µs (SLO: <700.000µs 📉 -34.7%) vs baseline: ~same Memory: ✅ 42.408MB (SLO: <43.500MB -2.5%) vs baseline: +4.9% ✅ ospathsplitext_noaspectTime: ✅ 464.304µs (SLO: <700.000µs 📉 -33.7%) vs baseline: +0.5% Memory: ✅ 42.389MB (SLO: <43.500MB -2.6%) vs baseline: +4.7% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.386µs (SLO: <20.000µs 📉 -83.1%) vs baseline: 📈 +13.8% Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.0% ✅ 1-count-metrics-100-timesTime: ✅ 199.922µs (SLO: <220.000µs -9.1%) vs baseline: +0.3% Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ 1-distribution-metric-1-timesTime: ✅ 3.296µs (SLO: <20.000µs 📉 -83.5%) vs baseline: -0.9% Memory: ✅ 34.937MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.8% ✅ 1-distribution-metrics-100-timesTime: ✅ 212.273µs (SLO: <230.000µs -7.7%) vs baseline: -0.4% Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.6% ✅ 1-gauge-metric-1-timesTime: ✅ 2.178µs (SLO: <20.000µs 📉 -89.1%) vs baseline: -1.3% Memory: ✅ 34.898MB (SLO: <35.500MB 🟡 -1.7%) vs baseline: +4.8% ✅ 1-gauge-metrics-100-timesTime: ✅ 136.960µs (SLO: <150.000µs -8.7%) vs baseline: +0.4% Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.0% ✅ 1-rate-metric-1-timesTime: ✅ 3.144µs (SLO: <20.000µs 📉 -84.3%) vs baseline: +0.3% Memory: ✅ 34.898MB (SLO: <35.500MB 🟡 -1.7%) vs baseline: +4.9% ✅ 1-rate-metrics-100-timesTime: ✅ 212.455µs (SLO: <250.000µs 📉 -15.0%) vs baseline: -0.7% Memory: ✅ 34.839MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +4.8% ✅ 100-count-metrics-100-timesTime: ✅ 20.107ms (SLO: <22.000ms -8.6%) vs baseline: +0.8% Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.6% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.222ms (SLO: <2.550ms 📉 -12.9%) vs baseline: -0.7% Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.4% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.418ms (SLO: <1.550ms -8.5%) vs baseline: +0.2% Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.0% ✅ 100-rate-metrics-100-timesTime: ✅ 2.191ms (SLO: <2.550ms 📉 -14.1%) vs baseline: +0.9% Memory: ✅ 34.898MB (SLO: <35.500MB 🟡 -1.7%) vs baseline: +4.6% ✅ flush-1-metricTime: ✅ 4.539µs (SLO: <20.000µs 📉 -77.3%) vs baseline: -0.7% Memory: ✅ 35.212MB (SLO: <35.500MB 🟡 -0.8%) vs baseline: +4.7% ✅ flush-100-metricsTime: ✅ 174.103µs (SLO: <250.000µs 📉 -30.4%) vs baseline: -0.7% Memory: ✅ 35.291MB (SLO: <35.500MB 🟡 -0.6%) vs baseline: +4.8% ✅ flush-1000-metricsTime: ✅ 2.189ms (SLO: <2.500ms 📉 -12.4%) vs baseline: +0.5% Memory: ✅ 36.117MB (SLO: <36.500MB 🟡 -1.0%) vs baseline: +4.6% 🟡 Near SLO Breach (14 suites)🟡 coreapiscenario - 10/10 (1 unstable)
|
Description
We prevent iterations over the bare
__dict__attribute of an object that can mutate while the values are captured by returning a shallow copy of the dictionary.Additional Notes
Addresses reports in #15182.