-
Notifications
You must be signed in to change notification settings - Fork 477
fix(profiling): prevent unbounded loop in interpreter iteration #16002
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
fc1eed7 to
2c42a0f
Compare
Codeowners resolved as |
7aadb74 to
1897c70
Compare
Performance SLOsComparing candidate prof-13436-interpreter (1897c70) with baseline main (76fae6c) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 102.961µs (SLO: <130.000µs 📉 -20.8%) vs baseline: +2.4% Memory: ✅ 42.566MB (SLO: <43.250MB 🟡 -1.6%) vs baseline: +4.9% ✅ add_inplace_aspectTime: ✅ 101.462µs (SLO: <130.000µs 📉 -22.0%) vs baseline: +0.1% Memory: ✅ 42.664MB (SLO: <43.250MB 🟡 -1.4%) vs baseline: +4.8% ✅ add_inplace_noaspectTime: ✅ 28.008µs (SLO: <40.000µs 📉 -30.0%) vs baseline: -1.0% Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1% ✅ add_noaspectTime: ✅ 48.746µs (SLO: <70.000µs 📉 -30.4%) vs baseline: ~same Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.0% ✅ bytearray_aspectTime: ✅ 260.446µs (SLO: <400.000µs 📉 -34.9%) vs baseline: +1.3% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9% ✅ bytearray_extend_aspectTime: ✅ 657.149µs (SLO: <800.000µs 📉 -17.9%) vs baseline: +0.3% Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.0% ✅ bytearray_extend_noaspectTime: ✅ 267.143µs (SLO: <400.000µs 📉 -33.2%) vs baseline: -0.5% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ bytearray_noaspectTime: ✅ 141.104µs (SLO: <300.000µs 📉 -53.0%) vs baseline: +1.2% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.8% ✅ bytes_aspectTime: ✅ 223.655µs (SLO: <300.000µs 📉 -25.4%) vs baseline: +0.7% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1% ✅ bytes_noaspectTime: ✅ 133.872µs (SLO: <200.000µs 📉 -33.1%) vs baseline: +0.5% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9% ✅ bytesio_aspectTime: ✅ 3.885ms (SLO: <5.000ms 📉 -22.3%) vs baseline: +1.2% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ bytesio_noaspectTime: ✅ 318.332µs (SLO: <420.000µs 📉 -24.2%) vs baseline: -0.3% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.9% ✅ capitalize_aspectTime: ✅ 89.952µs (SLO: <300.000µs 📉 -70.0%) vs baseline: -0.5% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.8% ✅ capitalize_noaspectTime: ✅ 251.872µs (SLO: <300.000µs 📉 -16.0%) vs baseline: -0.6% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.0% ✅ casefold_aspectTime: ✅ 89.767µs (SLO: <500.000µs 📉 -82.0%) vs baseline: -0.2% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.0% ✅ casefold_noaspectTime: ✅ 308.384µs (SLO: <500.000µs 📉 -38.3%) vs baseline: +0.3% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.8% ✅ decode_aspectTime: ✅ 87.316µs (SLO: <100.000µs 📉 -12.7%) vs baseline: +0.3% Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.1% ✅ decode_noaspectTime: ✅ 152.636µs (SLO: <210.000µs 📉 -27.3%) vs baseline: -0.6% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.7% ✅ encode_aspectTime: ✅ 85.092µs (SLO: <200.000µs 📉 -57.5%) vs baseline: -0.2% Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.0% ✅ encode_noaspectTime: ✅ 139.515µs (SLO: <200.000µs 📉 -30.2%) vs baseline: +1.4% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +5.0% ✅ format_aspectTime: ✅ 14.668ms (SLO: <19.200ms 📉 -23.6%) vs baseline: -0.4% Memory: ✅ 42.939MB (SLO: <43.250MB 🟡 -0.7%) vs baseline: +5.1% ✅ format_map_aspectTime: ✅ 16.489ms (SLO: <21.500ms 📉 -23.3%) vs baseline: ~same Memory: ✅ 42.841MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ format_map_noaspectTime: ✅ 367.874µs (SLO: <500.000µs 📉 -26.4%) vs baseline: +0.5% Memory: ✅ 42.625MB (SLO: <43.250MB 🟡 -1.4%) vs baseline: +4.6% ✅ format_noaspectTime: ✅ 305.217µs (SLO: <500.000µs 📉 -39.0%) vs baseline: -0.4% Memory: ✅ 42.625MB (SLO: <43.250MB 🟡 -1.4%) vs baseline: +5.0% ✅ index_aspectTime: ✅ 132.829µs (SLO: <300.000µs 📉 -55.7%) vs baseline: +7.1% Memory: ✅ 42.566MB (SLO: <43.250MB 🟡 -1.6%) vs baseline: +4.6% ✅ index_noaspectTime: ✅ 40.395µs (SLO: <300.000µs 📉 -86.5%) vs baseline: ~same Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1% ✅ join_aspectTime: ✅ 218.665µs (SLO: <300.000µs 📉 -27.1%) vs baseline: ~same Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.8% ✅ join_noaspectTime: ✅ 150.669µs (SLO: <300.000µs 📉 -49.8%) vs baseline: +0.7% Memory: ✅ 42.566MB (SLO: <43.250MB 🟡 -1.6%) vs baseline: +4.8% ✅ ljust_aspectTime: ✅ 573.309µs (SLO: <700.000µs 📉 -18.1%) vs baseline: 📈 +14.8% Memory: ✅ 42.802MB (SLO: <43.250MB 🟡 -1.0%) vs baseline: +5.0% ✅ ljust_noaspectTime: ✅ 255.802µs (SLO: <300.000µs 📉 -14.7%) vs baseline: +0.8% Memory: ✅ 42.743MB (SLO: <43.250MB 🟡 -1.2%) vs baseline: +5.1% ✅ lower_aspectTime: ✅ 307.320µs (SLO: <500.000µs 📉 -38.5%) vs baseline: +0.4% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ lower_noaspectTime: ✅ 235.294µs (SLO: <300.000µs 📉 -21.6%) vs baseline: -0.5% Memory: ✅ 42.664MB (SLO: <43.250MB 🟡 -1.4%) vs baseline: +4.9% ✅ lstrip_aspectTime: ✅ 0.273ms (SLO: <3.000ms 📉 -90.9%) vs baseline: +0.4% Memory: ✅ 42.566MB (SLO: <43.250MB 🟡 -1.6%) vs baseline: +4.6% ✅ lstrip_noaspectTime: ✅ 0.179ms (SLO: <3.000ms 📉 -94.0%) vs baseline: +0.4% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.8% ✅ modulo_aspectTime: ✅ 14.319ms (SLO: <18.750ms 📉 -23.6%) vs baseline: -0.2% Memory: ✅ 42.821MB (SLO: <43.500MB 🟡 -1.6%) vs baseline: +4.6% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.881ms (SLO: <19.350ms 📉 -23.1%) vs baseline: ~same Memory: ✅ 42.802MB (SLO: <43.500MB 🟡 -1.6%) vs baseline: +4.7% ✅ modulo_aspect_for_bytesTime: ✅ 14.488ms (SLO: <18.900ms 📉 -23.3%) vs baseline: ~same Memory: ✅ 42.939MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +5.3% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.693ms (SLO: <19.150ms 📉 -23.3%) vs baseline: ~same Memory: ✅ 42.802MB (SLO: <43.500MB 🟡 -1.6%) vs baseline: +5.1% ✅ modulo_noaspectTime: ✅ 0.360ms (SLO: <3.000ms 📉 -88.0%) vs baseline: +1.1% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9% ✅ replace_aspectTime: ✅ 18.555ms (SLO: <24.000ms 📉 -22.7%) vs baseline: +0.1% Memory: ✅ 42.821MB (SLO: <44.000MB -2.7%) vs baseline: +4.9% ✅ replace_noaspectTime: ✅ 284.992µs (SLO: <300.000µs -5.0%) vs baseline: ~same Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.8% ✅ repr_aspectTime: ✅ 317.129µs (SLO: <420.000µs 📉 -24.5%) vs baseline: -0.7% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.9% ✅ repr_noaspectTime: ✅ 46.639µs (SLO: <90.000µs 📉 -48.2%) vs baseline: ~same Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.1% ✅ rstrip_aspectTime: ✅ 377.032µs (SLO: <500.000µs 📉 -24.6%) vs baseline: -1.5% Memory: ✅ 42.743MB (SLO: <43.500MB 🟡 -1.7%) vs baseline: +5.2% ✅ rstrip_noaspectTime: ✅ 181.544µs (SLO: <300.000µs 📉 -39.5%) vs baseline: -1.0% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.0% ✅ slice_aspectTime: ✅ 181.198µs (SLO: <300.000µs 📉 -39.6%) vs baseline: -0.5% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1% ✅ slice_noaspectTime: ✅ 53.895µs (SLO: <90.000µs 📉 -40.1%) vs baseline: -1.0% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ stringio_aspectTime: ✅ 4.439ms (SLO: <5.000ms 📉 -11.2%) vs baseline: 📈 +14.5% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.9% ✅ stringio_noaspectTime: ✅ 358.300µs (SLO: <500.000µs 📉 -28.3%) vs baseline: +1.0% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.8% ✅ strip_aspectTime: ✅ 268.322µs (SLO: <350.000µs 📉 -23.3%) vs baseline: +0.2% Memory: ✅ 42.546MB (SLO: <43.500MB -2.2%) vs baseline: +4.6% ✅ strip_noaspectTime: ✅ 176.668µs (SLO: <240.000µs 📉 -26.4%) vs baseline: -0.1% Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.6% ✅ swapcase_aspectTime: ✅ 343.385µs (SLO: <500.000µs 📉 -31.3%) vs baseline: ~same Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.9% ✅ swapcase_noaspectTime: ✅ 272.501µs (SLO: <400.000µs 📉 -31.9%) vs baseline: +0.4% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.8% ✅ title_aspectTime: ✅ 331.481µs (SLO: <500.000µs 📉 -33.7%) vs baseline: -0.4% Memory: ✅ 42.684MB (SLO: <43.000MB 🟡 -0.7%) vs baseline: +4.9% ✅ title_noaspectTime: ✅ 258.954µs (SLO: <400.000µs 📉 -35.3%) vs baseline: +0.5% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.6% ✅ translate_aspectTime: ✅ 497.108µs (SLO: <700.000µs 📉 -29.0%) vs baseline: +0.2% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.0% ✅ translate_noaspectTime: ✅ 423.706µs (SLO: <500.000µs 📉 -15.3%) vs baseline: -2.0% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +4.9% ✅ upper_aspectTime: ✅ 307.625µs (SLO: <500.000µs 📉 -38.5%) vs baseline: -0.1% Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +4.9% ✅ upper_noaspectTime: ✅ 236.311µs (SLO: <400.000µs 📉 -40.9%) vs baseline: +0.4% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.0% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 503.017µs (SLO: <700.000µs 📉 -28.1%) vs baseline: 📈 +19.3% Memory: ✅ 42.271MB (SLO: <43.500MB -2.8%) vs baseline: +4.4% ✅ ospathbasename_noaspectTime: ✅ 424.545µs (SLO: <700.000µs 📉 -39.4%) vs baseline: -0.2% Memory: ✅ 42.369MB (SLO: <43.500MB -2.6%) vs baseline: +5.0% ✅ ospathjoin_aspectTime: ✅ 623.323µs (SLO: <700.000µs 📉 -11.0%) vs baseline: +0.4% Memory: ✅ 42.389MB (SLO: <43.500MB -2.6%) vs baseline: +4.7% ✅ ospathjoin_noaspectTime: ✅ 628.704µs (SLO: <700.000µs 📉 -10.2%) vs baseline: +0.3% Memory: ✅ 42.546MB (SLO: <43.500MB -2.2%) vs baseline: +5.1% ✅ ospathnormcase_aspectTime: ✅ 348.592µs (SLO: <700.000µs 📉 -50.2%) vs baseline: ~same Memory: ✅ 42.369MB (SLO: <43.500MB -2.6%) vs baseline: +5.0% ✅ ospathnormcase_noaspectTime: ✅ 355.320µs (SLO: <700.000µs 📉 -49.2%) vs baseline: +0.3% Memory: ✅ 42.290MB (SLO: <43.500MB -2.8%) vs baseline: +4.6% ✅ ospathsplit_aspectTime: ✅ 488.233µs (SLO: <700.000µs 📉 -30.3%) vs baseline: -0.4% Memory: ✅ 42.290MB (SLO: <43.500MB -2.8%) vs baseline: +4.7% ✅ ospathsplit_noaspectTime: ✅ 492.622µs (SLO: <700.000µs 📉 -29.6%) vs baseline: -0.9% Memory: ✅ 42.389MB (SLO: <43.500MB -2.6%) vs baseline: +5.0% ✅ ospathsplitdrive_aspectTime: ✅ 372.383µs (SLO: <700.000µs 📉 -46.8%) vs baseline: +0.4% Memory: ✅ 42.428MB (SLO: <43.500MB -2.5%) vs baseline: +5.1% ✅ ospathsplitdrive_noaspectTime: ✅ 73.009µs (SLO: <700.000µs 📉 -89.6%) vs baseline: +0.7% Memory: ✅ 42.369MB (SLO: <43.500MB -2.6%) vs baseline: +4.6% ✅ ospathsplitext_aspectTime: ✅ 455.824µs (SLO: <700.000µs 📉 -34.9%) vs baseline: -0.6% Memory: ✅ 42.507MB (SLO: <43.500MB -2.3%) vs baseline: +4.8% ✅ ospathsplitext_noaspectTime: ✅ 462.744µs (SLO: <700.000µs 📉 -33.9%) vs baseline: -0.9% Memory: ✅ 42.389MB (SLO: <43.500MB -2.6%) vs baseline: +4.8% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.388µs (SLO: <20.000µs 📉 -83.1%) vs baseline: 📈 +13.2% Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.8% ✅ 1-count-metrics-100-timesTime: ✅ 200.816µs (SLO: <220.000µs -8.7%) vs baseline: -0.3% Memory: ✅ 34.859MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.6% ✅ 1-distribution-metric-1-timesTime: ✅ 3.360µs (SLO: <20.000µs 📉 -83.2%) vs baseline: +0.1% Memory: ✅ 34.957MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.9% ✅ 1-distribution-metrics-100-timesTime: ✅ 214.483µs (SLO: <230.000µs -6.7%) vs baseline: -0.2% Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.9% ✅ 1-gauge-metric-1-timesTime: ✅ 2.177µs (SLO: <20.000µs 📉 -89.1%) vs baseline: -0.5% Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.9% ✅ 1-gauge-metrics-100-timesTime: ✅ 137.062µs (SLO: <150.000µs -8.6%) vs baseline: ~same Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.9% ✅ 1-rate-metric-1-timesTime: ✅ 3.157µs (SLO: <20.000µs 📉 -84.2%) vs baseline: ~same Memory: ✅ 34.937MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +5.4% ✅ 1-rate-metrics-100-timesTime: ✅ 216.008µs (SLO: <250.000µs 📉 -13.6%) vs baseline: +0.9% Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.7% ✅ 100-count-metrics-100-timesTime: ✅ 20.037ms (SLO: <22.000ms -8.9%) vs baseline: ~same Memory: ✅ 34.859MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.8% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.246ms (SLO: <2.550ms 📉 -11.9%) vs baseline: +0.3% Memory: ✅ 34.898MB (SLO: <35.500MB 🟡 -1.7%) vs baseline: +4.7% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.417ms (SLO: <1.550ms -8.6%) vs baseline: +0.3% Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.4% ✅ 100-rate-metrics-100-timesTime: ✅ 2.200ms (SLO: <2.550ms 📉 -13.7%) vs baseline: +1.3% Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.7% ✅ flush-1-metricTime: ✅ 4.559µs (SLO: <20.000µs 📉 -77.2%) vs baseline: -0.4% Memory: ✅ 35.232MB (SLO: <35.500MB 🟡 -0.8%) vs baseline: +4.6% ✅ flush-100-metricsTime: ✅ 174.776µs (SLO: <250.000µs 📉 -30.1%) vs baseline: -0.7% Memory: ✅ 35.311MB (SLO: <35.500MB 🟡 -0.5%) vs baseline: +5.0% ✅ flush-1000-metricsTime: ✅ 2.184ms (SLO: <2.500ms 📉 -12.6%) vs baseline: -0.4% Memory: ✅ 36.038MB (SLO: <36.500MB 🟡 -1.3%) vs baseline: +4.5% 🟡 Near SLO Breach (15 suites)🟡 coreapiscenario - 10/10 (1 unstable)
|
1897c70 to
f7f466d
Compare
This fix resolves an issue where the stack profiler could loop infinitely when iterating through Python interpreter states. This could have occurred if the interpreter linked list became corrupted or contained a cycle, potentially causing the profiler to hang. The fix adds both cycle detection and an iteration limit (256 interpreters) to prevent unbounded loops, following the same approach as CPython's tachyon profiler.
f7f466d to
b05274d
Compare
Description
Since most applications use single Python interpreter, this would rarely happen, but in theory can loop infinitely.
Testing
Risks
Additional Notes