-
Notifications
You must be signed in to change notification settings - Fork 470
chore(iast): improve performance #15609
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: 254 ± 5 ms. The average import time from base is: 267 ± 6 ms. The import time difference between this PR and base is: -12.9 ± 0.2 ms. Import time breakdownThe following import paths have shrunk:
|
Performance SLOsComparing candidate avara1986/APPSEC-60212_env_vars (d1e8ffd) with baseline main (077da61) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 0.385µs (SLO: <10.000µs 📉 -96.1%) vs baseline: ~same Memory: ✅ 38.516MB (SLO: <41.500MB -7.2%) vs baseline: +4.4% ✅ add_inplace_aspectTime: ✅ 0.383µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +0.7% Memory: ✅ 38.596MB (SLO: <41.500MB -7.0%) vs baseline: +5.2% ✅ add_inplace_noaspectTime: ✅ 0.288µs (SLO: <10.000µs 📉 -97.1%) vs baseline: -0.4% Memory: ✅ 38.525MB (SLO: <41.500MB -7.2%) vs baseline: +4.6% ✅ add_noaspectTime: ✅ 0.355µs (SLO: <10.000µs 📉 -96.5%) vs baseline: -0.9% Memory: ✅ 38.543MB (SLO: <41.500MB -7.1%) vs baseline: +4.7% ✅ bytearray_aspectTime: ✅ 1.263µs (SLO: <10.000µs 📉 -87.4%) vs baseline: -3.5% Memory: ✅ 38.673MB (SLO: <41.500MB -6.8%) vs baseline: +5.2% ✅ bytearray_extend_aspectTime: ✅ 1.459µs (SLO: <10.000µs 📉 -85.4%) vs baseline: -1.5% Memory: ✅ 38.533MB (SLO: <41.500MB -7.2%) vs baseline: +4.7% ✅ bytearray_extend_noaspectTime: ✅ 0.621µs (SLO: <10.000µs 📉 -93.8%) vs baseline: +0.7% Memory: ✅ 38.443MB (SLO: <41.500MB -7.4%) vs baseline: +4.2% ✅ bytearray_noaspectTime: ✅ 0.487µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.5% Memory: ✅ 38.477MB (SLO: <41.500MB -7.3%) vs baseline: +4.4% ✅ bytes_aspectTime: ✅ 1.249µs (SLO: <10.000µs 📉 -87.5%) vs baseline: -2.8% Memory: ✅ 38.420MB (SLO: <41.500MB -7.4%) vs baseline: +4.4% ✅ bytes_noaspectTime: ✅ 0.494µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -2.2% Memory: ✅ 38.429MB (SLO: <41.500MB -7.4%) vs baseline: +4.3% ✅ bytesio_aspectTime: ✅ 1.319µs (SLO: <10.000µs 📉 -86.8%) vs baseline: +1.1% Memory: ✅ 38.610MB (SLO: <41.500MB -7.0%) vs baseline: +5.3% ✅ bytesio_noaspectTime: ✅ 0.500µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -0.7% Memory: ✅ 38.492MB (SLO: <41.500MB -7.2%) vs baseline: +4.7% ✅ capitalize_aspectTime: ✅ 0.739µs (SLO: <10.000µs 📉 -92.6%) vs baseline: ~same Memory: ✅ 38.485MB (SLO: <41.500MB -7.3%) vs baseline: +4.7% ✅ capitalize_noaspectTime: ✅ 0.436µs (SLO: <10.000µs 📉 -95.6%) vs baseline: -0.8% Memory: ✅ 38.555MB (SLO: <41.500MB -7.1%) vs baseline: +4.8% ✅ casefold_aspectTime: ✅ 0.748µs (SLO: <10.000µs 📉 -92.5%) vs baseline: +1.9% Memory: ✅ 38.579MB (SLO: <41.500MB -7.0%) vs baseline: +4.7% ✅ casefold_noaspectTime: ✅ 0.374µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +0.8% Memory: ✅ 38.609MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ decode_aspectTime: ✅ 0.723µs (SLO: <10.000µs 📉 -92.8%) vs baseline: -0.6% Memory: ✅ 38.427MB (SLO: <41.500MB -7.4%) vs baseline: +4.7% ✅ decode_noaspectTime: ✅ 0.422µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +0.5% Memory: ✅ 38.597MB (SLO: <41.500MB -7.0%) vs baseline: +5.0% ✅ encode_aspectTime: ✅ 0.713µs (SLO: <10.000µs 📉 -92.9%) vs baseline: ~same Memory: ✅ 38.537MB (SLO: <41.500MB -7.1%) vs baseline: +4.2% ✅ encode_noaspectTime: ✅ 0.401µs (SLO: <10.000µs 📉 -96.0%) vs baseline: -2.5% Memory: ✅ 38.571MB (SLO: <41.500MB -7.1%) vs baseline: +4.9% ✅ format_aspectTime: ✅ 3.407µs (SLO: <10.000µs 📉 -65.9%) vs baseline: +1.0% Memory: ✅ 38.524MB (SLO: <41.500MB -7.2%) vs baseline: +4.0% ✅ format_map_aspectTime: ✅ 3.588µs (SLO: <10.000µs 📉 -64.1%) vs baseline: -1.3% Memory: ✅ 38.578MB (SLO: <41.500MB -7.0%) vs baseline: +5.2% ✅ format_map_noaspectTime: ✅ 0.830µs (SLO: <10.000µs 📉 -91.7%) vs baseline: +1.5% Memory: ✅ 38.668MB (SLO: <41.500MB -6.8%) vs baseline: +5.2% ✅ format_noaspectTime: ✅ 0.593µs (SLO: <10.000µs 📉 -94.1%) vs baseline: +0.2% Memory: ✅ 38.584MB (SLO: <41.500MB -7.0%) vs baseline: +5.0% ✅ index_aspectTime: ✅ 0.345µs (SLO: <10.000µs 📉 -96.5%) vs baseline: +1.4% Memory: ✅ 38.629MB (SLO: <41.500MB -6.9%) vs baseline: +5.0% ✅ index_noaspectTime: ✅ 0.316µs (SLO: <10.000µs 📉 -96.8%) vs baseline: -1.8% Memory: ✅ 38.574MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ join_aspectTime: ✅ 1.281µs (SLO: <10.000µs 📉 -87.2%) vs baseline: -2.1% Memory: ✅ 38.480MB (SLO: <41.500MB -7.3%) vs baseline: +4.5% ✅ join_noaspectTime: ✅ 0.538µs (SLO: <10.000µs 📉 -94.6%) vs baseline: +1.7% Memory: ✅ 38.556MB (SLO: <41.500MB -7.1%) vs baseline: +5.0% ✅ ljust_aspectTime: ✅ 2.559µs (SLO: <20.000µs 📉 -87.2%) vs baseline: -0.2% Memory: ✅ 38.666MB (SLO: <41.500MB -6.8%) vs baseline: +4.9% ✅ ljust_noaspectTime: ✅ 0.411µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +0.5% Memory: ✅ 38.655MB (SLO: <41.500MB -6.9%) vs baseline: +5.0% ✅ lower_aspectTime: ✅ 2.216µs (SLO: <10.000µs 📉 -77.8%) vs baseline: -0.8% Memory: ✅ 38.675MB (SLO: <41.500MB -6.8%) vs baseline: +4.8% ✅ lower_noaspectTime: ✅ 0.368µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -0.4% Memory: ✅ 38.486MB (SLO: <41.500MB -7.3%) vs baseline: +4.4% ✅ lstrip_aspectTime: ✅ 2.202µs (SLO: <20.000µs 📉 -89.0%) vs baseline: +1.1% Memory: ✅ 38.604MB (SLO: <41.500MB -7.0%) vs baseline: +4.6% ✅ lstrip_noaspectTime: ✅ 0.386µs (SLO: <10.000µs 📉 -96.1%) vs baseline: -0.2% Memory: ✅ 38.607MB (SLO: <41.500MB -7.0%) vs baseline: +4.8% ✅ modulo_aspectTime: ✅ 0.976µs (SLO: <10.000µs 📉 -90.2%) vs baseline: +0.2% Memory: ✅ 38.568MB (SLO: <41.500MB -7.1%) vs baseline: +4.7% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 1.489µs (SLO: <10.000µs 📉 -85.1%) vs baseline: -0.3% Memory: ✅ 38.786MB (SLO: <41.500MB -6.5%) vs baseline: +5.7% ✅ modulo_aspect_for_bytesTime: ✅ 0.967µs (SLO: <10.000µs 📉 -90.3%) vs baseline: +0.8% Memory: ✅ 38.528MB (SLO: <41.500MB -7.2%) vs baseline: +4.8% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 1.186µs (SLO: <10.000µs 📉 -88.1%) vs baseline: +1.9% Memory: ✅ 38.546MB (SLO: <41.500MB -7.1%) vs baseline: +4.6% ✅ modulo_noaspectTime: ✅ 0.673µs (SLO: <10.000µs 📉 -93.3%) vs baseline: ~same Memory: ✅ 38.430MB (SLO: <41.500MB -7.4%) vs baseline: +4.4% ✅ replace_aspectTime: ✅ 4.918µs (SLO: <10.000µs 📉 -50.8%) vs baseline: -0.6% Memory: ✅ 38.605MB (SLO: <41.500MB -7.0%) vs baseline: +5.1% ✅ replace_noaspectTime: ✅ 0.465µs (SLO: <10.000µs 📉 -95.3%) vs baseline: ~same Memory: ✅ 38.388MB (SLO: <41.500MB -7.5%) vs baseline: +4.1% ✅ repr_aspectTime: ✅ 0.948µs (SLO: <10.000µs 📉 -90.5%) vs baseline: -0.4% Memory: ✅ 38.617MB (SLO: <41.500MB -6.9%) vs baseline: +4.6% ✅ repr_noaspectTime: ✅ 0.457µs (SLO: <10.000µs 📉 -95.4%) vs baseline: +0.6% Memory: ✅ 38.587MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ rstrip_aspectTime: ✅ 1.851µs (SLO: <20.000µs 📉 -90.7%) vs baseline: +0.3% Memory: ✅ 38.443MB (SLO: <41.500MB -7.4%) vs baseline: +4.5% ✅ rstrip_noaspectTime: ✅ 0.384µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -1.4% Memory: ✅ 38.523MB (SLO: <41.500MB -7.2%) vs baseline: +5.1% ✅ slice_aspectTime: ✅ 0.488µs (SLO: <10.000µs 📉 -95.1%) vs baseline: +0.4% Memory: ✅ 38.517MB (SLO: <41.500MB -7.2%) vs baseline: +4.6% ✅ slice_noaspectTime: ✅ 0.451µs (SLO: <10.000µs 📉 -95.5%) vs baseline: +0.7% Memory: ✅ 38.392MB (SLO: <41.500MB -7.5%) vs baseline: +4.4% ✅ stringio_aspectTime: ✅ 1.697µs (SLO: <10.000µs 📉 -83.0%) vs baseline: +0.2% Memory: ✅ 38.415MB (SLO: <41.500MB -7.4%) vs baseline: +4.5% ✅ stringio_noaspectTime: ✅ 0.930µs (SLO: <10.000µs 📉 -90.7%) vs baseline: +1.6% Memory: ✅ 38.478MB (SLO: <41.500MB -7.3%) vs baseline: +4.3% ✅ strip_aspectTime: ✅ 2.408µs (SLO: <20.000µs 📉 -88.0%) vs baseline: 📈 +11.7% Memory: ✅ 38.558MB (SLO: <41.500MB -7.1%) vs baseline: +4.6% ✅ strip_noaspectTime: ✅ 0.386µs (SLO: <10.000µs 📉 -96.1%) vs baseline: -0.2% Memory: ✅ 38.446MB (SLO: <41.500MB -7.4%) vs baseline: +4.0% ✅ swapcase_aspectTime: ✅ 2.442µs (SLO: <10.000µs 📉 -75.6%) vs baseline: ~same Memory: ✅ 38.691MB (SLO: <41.500MB -6.8%) vs baseline: +5.2% ✅ swapcase_noaspectTime: ✅ 0.543µs (SLO: <10.000µs 📉 -94.6%) vs baseline: +0.5% Memory: ✅ 38.405MB (SLO: <41.500MB -7.5%) vs baseline: +4.2% ✅ title_aspectTime: ✅ 2.509µs (SLO: <10.000µs 📉 -74.9%) vs baseline: +6.0% Memory: ✅ 38.488MB (SLO: <41.500MB -7.3%) vs baseline: +4.3% ✅ title_noaspectTime: ✅ 0.509µs (SLO: <10.000µs 📉 -94.9%) vs baseline: +0.9% Memory: ✅ 38.648MB (SLO: <41.500MB -6.9%) vs baseline: +5.0% ✅ translate_aspectTime: ✅ 3.207µs (SLO: <10.000µs 📉 -67.9%) vs baseline: -1.5% Memory: ✅ 38.602MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ translate_noaspectTime: ✅ 1.044µs (SLO: <10.000µs 📉 -89.6%) vs baseline: -0.6% Memory: ✅ 38.597MB (SLO: <41.500MB -7.0%) vs baseline: +4.9% ✅ upper_aspectTime: ✅ 2.230µs (SLO: <10.000µs 📉 -77.7%) vs baseline: -1.8% Memory: ✅ 38.555MB (SLO: <41.500MB -7.1%) vs baseline: +4.8% ✅ upper_noaspectTime: ✅ 0.376µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +0.7% Memory: ✅ 38.408MB (SLO: <41.500MB -7.5%) vs baseline: +4.6% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 4.986µs (SLO: <10.000µs 📉 -50.1%) vs baseline: 📈 +18.2% Memory: ✅ 38.574MB (SLO: <41.000MB -5.9%) vs baseline: +4.8% ✅ ospathbasename_noaspectTime: ✅ 1.086µs (SLO: <10.000µs 📉 -89.1%) vs baseline: +0.1% Memory: ✅ 38.574MB (SLO: <41.000MB -5.9%) vs baseline: +4.8% ✅ ospathjoin_aspectTime: ✅ 6.024µs (SLO: <10.000µs 📉 -39.8%) vs baseline: ~same Memory: ✅ 38.633MB (SLO: <41.000MB -5.8%) vs baseline: +5.5% ✅ ospathjoin_noaspectTime: ✅ 2.310µs (SLO: <10.000µs 📉 -76.9%) vs baseline: ~same Memory: ✅ 38.496MB (SLO: <41.000MB -6.1%) vs baseline: +4.6% ✅ ospathnormcase_aspectTime: ✅ 3.436µs (SLO: <10.000µs 📉 -65.6%) vs baseline: -0.6% Memory: ✅ 38.594MB (SLO: <41.000MB -5.9%) vs baseline: +4.8% ✅ ospathnormcase_noaspectTime: ✅ 0.568µs (SLO: <10.000µs 📉 -94.3%) vs baseline: -1.0% Memory: ✅ 38.516MB (SLO: <41.000MB -6.1%) vs baseline: +4.4% ✅ ospathsplit_aspectTime: ✅ 4.771µs (SLO: <10.000µs 📉 -52.3%) vs baseline: -0.9% Memory: ✅ 38.574MB (SLO: <41.000MB -5.9%) vs baseline: +4.6% ✅ ospathsplit_noaspectTime: ✅ 1.597µs (SLO: <10.000µs 📉 -84.0%) vs baseline: +1.0% Memory: ✅ 38.574MB (SLO: <41.000MB -5.9%) vs baseline: +5.0% ✅ ospathsplitdrive_aspectTime: ✅ 3.645µs (SLO: <10.000µs 📉 -63.5%) vs baseline: -2.1% Memory: ✅ 38.614MB (SLO: <41.000MB -5.8%) vs baseline: +4.8% ✅ ospathsplitdrive_noaspectTime: ✅ 0.701µs (SLO: <10.000µs 📉 -93.0%) vs baseline: ~same Memory: ✅ 38.535MB (SLO: <41.000MB -6.0%) vs baseline: +4.8% ✅ ospathsplitext_aspectTime: ✅ 4.489µs (SLO: <10.000µs 📉 -55.1%) vs baseline: -2.6% Memory: ✅ 38.516MB (SLO: <41.000MB -6.1%) vs baseline: +4.6% ✅ ospathsplitext_noaspectTime: ✅ 1.379µs (SLO: <10.000µs 📉 -86.2%) vs baseline: ~same Memory: ✅ 38.594MB (SLO: <41.000MB -5.9%) vs baseline: +4.6% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.534µs (SLO: <20.000µs 📉 -82.3%) vs baseline: 📈 +17.2% Memory: ✅ 34.839MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +4.9% ✅ 1-count-metrics-100-timesTime: ✅ 208.854µs (SLO: <220.000µs -5.1%) vs baseline: +0.4% Memory: ✅ 34.859MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +5.4% ✅ 1-distribution-metric-1-timesTime: ✅ 3.432µs (SLO: <20.000µs 📉 -82.8%) vs baseline: +1.8% Memory: ✅ 34.780MB (SLO: <35.500MB -2.0%) vs baseline: +4.4% ✅ 1-distribution-metrics-100-timesTime: ✅ 220.216µs (SLO: <230.000µs -4.3%) vs baseline: +0.7% Memory: ✅ 34.957MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.1% ✅ 1-gauge-metric-1-timesTime: ✅ 2.203µs (SLO: <20.000µs 📉 -89.0%) vs baseline: +0.6% Memory: ✅ 34.741MB (SLO: <35.500MB -2.1%) vs baseline: +4.4% ✅ 1-gauge-metrics-100-timesTime: ✅ 137.262µs (SLO: <150.000µs -8.5%) vs baseline: +0.6% Memory: ✅ 34.859MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.9% ✅ 1-rate-metric-1-timesTime: ✅ 3.238µs (SLO: <20.000µs 📉 -83.8%) vs baseline: +1.4% Memory: ✅ 34.839MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +4.8% ✅ 1-rate-metrics-100-timesTime: ✅ 223.282µs (SLO: <250.000µs 📉 -10.7%) vs baseline: +0.4% Memory: ✅ 34.780MB (SLO: <35.500MB -2.0%) vs baseline: +4.7% ✅ 100-count-metrics-100-timesTime: ✅ 20.683ms (SLO: <22.000ms -6.0%) vs baseline: -0.2% Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.2% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.289ms (SLO: <2.550ms 📉 -10.3%) vs baseline: -1.5% Memory: ✅ 34.839MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +4.7% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.412ms (SLO: <1.550ms -8.9%) vs baseline: +1.2% Memory: ✅ 34.819MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +4.7% ✅ 100-rate-metrics-100-timesTime: ✅ 2.272ms (SLO: <2.550ms 📉 -10.9%) vs baseline: +0.6% Memory: ✅ 34.859MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +5.0% ✅ flush-1-metricTime: ✅ 4.646µs (SLO: <20.000µs 📉 -76.8%) vs baseline: +0.9% Memory: ✅ 35.154MB (SLO: <35.500MB 🟡 -1.0%) vs baseline: +4.8% ✅ flush-100-metricsTime: ✅ 174.361µs (SLO: <250.000µs 📉 -30.3%) vs baseline: +0.7% Memory: ✅ 35.173MB (SLO: <35.500MB 🟡 -0.9%) vs baseline: +4.8% ✅ flush-1000-metricsTime: ✅ 2.170ms (SLO: <2.500ms 📉 -13.2%) vs baseline: -0.1% Memory: ✅ 36.078MB (SLO: <36.500MB 🟡 -1.2%) vs baseline: +5.0% 🟡 Near SLO Breach (15 suites)🟡 coreapiscenario - 10/10 (1 unstable)
|
Description
This PR introduces two environment variables to significantly reduce memory usage in IAST taint tracking operations, particularly for join_aspect with large strings or many items.
New Environment Variables
DD_IAST_TRUNCATION_MAX_VALUE_LENGTH (default: 250)
Limits the size of Source.value stored in TaintRange objects, preventing unbounded string storage.
DD_IAST_MAX_RANGE_COUNT (default: 10)
Limits the number of TaintRange objects per TaintedObject, preventing memory growth when joining many items.
Performance Improvements
Memory Overhead (join_long_items: 1000 iterations, 10 items × 1KB each)
String Size Scaling Test
Allocation Reduction