refactor(profiling): make StringTable::lookup const#15547
refactor(profiling): make StringTable::lookup const#15547KowalskiThomas merged 1 commit intomainfrom
StringTable::lookup const#15547Conversation
This PR updates the `StringTable::lookup` method to be `const`. This required making the `std::mutex` we have `mutable`, which is OK – `mutable` is typically used for that. Additionally, it also makes the return type `std::reference_wrapper<const std::string>` as I don't think we should allow callers of `lookup` to change the underlying data, which the previous signature would allow. > [[cppreference]](https://en.cppreference.com/w/cpp/language/cv.html#mutable) > mutable is used to specify that the member does not affect the > externally visible state of the class (as often used for mutexes, > memo caches, lazy evaluation, and access instrumentation).
|
|
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 252 ± 3 ms. The average import time from base is: 254 ± 3 ms. The import time difference between this PR and base is: -1.9 ± 0.1 ms. Import time breakdownThe following import paths have shrunk:
|
Performance SLOsComparing candidate kowalski/refactor-profiling-make-stringtable-lookup-const (855f3c0) with baseline main (fdd8fed) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 0.404µs (SLO: <10.000µs 📉 -96.0%) vs baseline: -0.3% Memory: ✅ 40.462MB (SLO: <41.500MB -2.5%) vs baseline: +4.8% ✅ add_inplace_aspectTime: ✅ 0.402µs (SLO: <10.000µs 📉 -96.0%) vs baseline: -2.0% Memory: ✅ 40.423MB (SLO: <41.500MB -2.6%) vs baseline: +4.4% ✅ add_inplace_noaspectTime: ✅ 0.312µs (SLO: <10.000µs 📉 -96.9%) vs baseline: -1.3% Memory: ✅ 40.639MB (SLO: <41.500MB -2.1%) vs baseline: +5.3% ✅ add_noaspectTime: ✅ 0.275µs (SLO: <10.000µs 📉 -97.3%) vs baseline: -0.9% Memory: ✅ 40.482MB (SLO: <41.500MB -2.5%) vs baseline: +4.6% ✅ bytearray_aspectTime: ✅ 1.361µs (SLO: <10.000µs 📉 -86.4%) vs baseline: +1.0% Memory: ✅ 40.229MB (SLO: <41.500MB -3.1%) vs baseline: +4.1% ✅ bytearray_extend_aspectTime: ✅ 1.486µs (SLO: <10.000µs 📉 -85.1%) vs baseline: -1.8% Memory: ✅ 40.619MB (SLO: <41.500MB -2.1%) vs baseline: +5.0% ✅ bytearray_extend_noaspectTime: ✅ 0.612µs (SLO: <10.000µs 📉 -93.9%) vs baseline: +0.2% Memory: ✅ 40.541MB (SLO: <41.500MB -2.3%) vs baseline: +5.0% ✅ bytearray_noaspectTime: ✅ 0.482µs (SLO: <10.000µs 📉 -95.2%) vs baseline: -0.2% Memory: ✅ 40.539MB (SLO: <41.500MB -2.3%) vs baseline: +4.9% ✅ bytes_aspectTime: ✅ 1.301µs (SLO: <10.000µs 📉 -87.0%) vs baseline: +2.3% Memory: ✅ 40.501MB (SLO: <41.500MB -2.4%) vs baseline: +4.6% ✅ bytes_noaspectTime: ✅ 0.496µs (SLO: <10.000µs 📉 -95.0%) vs baseline: +0.1% Memory: ✅ 40.541MB (SLO: <41.500MB -2.3%) vs baseline: +4.7% ✅ bytesio_aspectTime: ✅ 1.326µs (SLO: <10.000µs 📉 -86.7%) vs baseline: +0.2% Memory: ✅ 40.492MB (SLO: <41.500MB -2.4%) vs baseline: +4.7% ✅ bytesio_noaspectTime: ✅ 0.490µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -2.6% Memory: ✅ 40.619MB (SLO: <41.500MB -2.1%) vs baseline: +5.1% ✅ capitalize_aspectTime: ✅ 0.735µs (SLO: <10.000µs 📉 -92.7%) vs baseline: ~same Memory: ✅ 40.560MB (SLO: <41.500MB -2.3%) vs baseline: +4.8% ✅ capitalize_noaspectTime: ✅ 0.435µs (SLO: <10.000µs 📉 -95.6%) vs baseline: +1.2% Memory: ✅ 40.500MB (SLO: <41.500MB -2.4%) vs baseline: +4.7% ✅ casefold_aspectTime: ✅ 0.737µs (SLO: <10.000µs 📉 -92.6%) vs baseline: +0.3% Memory: ✅ 40.131MB (SLO: <41.500MB -3.3%) vs baseline: +3.7% ✅ casefold_noaspectTime: ✅ 0.368µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +1.1% Memory: ✅ 40.501MB (SLO: <41.500MB -2.4%) vs baseline: +4.9% ✅ decode_aspectTime: ✅ 0.726µs (SLO: <10.000µs 📉 -92.7%) vs baseline: +0.4% Memory: ✅ 40.127MB (SLO: <41.500MB -3.3%) vs baseline: +3.7% ✅ decode_noaspectTime: ✅ 0.423µs (SLO: <10.000µs 📉 -95.8%) vs baseline: +1.3% Memory: ✅ 40.482MB (SLO: <41.500MB -2.5%) vs baseline: +4.6% ✅ encode_aspectTime: ✅ 0.706µs (SLO: <10.000µs 📉 -92.9%) vs baseline: -0.3% Memory: ✅ 40.412MB (SLO: <41.500MB -2.6%) vs baseline: +4.4% ✅ encode_noaspectTime: ✅ 0.408µs (SLO: <10.000µs 📉 -95.9%) vs baseline: +0.2% Memory: ✅ 40.580MB (SLO: <41.500MB -2.2%) vs baseline: +5.0% ✅ format_aspectTime: ✅ 3.465µs (SLO: <10.000µs 📉 -65.4%) vs baseline: +1.0% Memory: ✅ 40.580MB (SLO: <41.500MB -2.2%) vs baseline: +5.0% ✅ format_map_aspectTime: ✅ 3.571µs (SLO: <10.000µs 📉 -64.3%) vs baseline: -0.7% Memory: ✅ 40.521MB (SLO: <41.500MB -2.4%) vs baseline: +4.8% ✅ format_map_noaspectTime: ✅ 0.773µs (SLO: <10.000µs 📉 -92.3%) vs baseline: ~same Memory: ✅ 40.520MB (SLO: <41.500MB -2.4%) vs baseline: +4.5% ✅ format_noaspectTime: ✅ 0.595µs (SLO: <10.000µs 📉 -94.0%) vs baseline: -0.6% Memory: ✅ 40.560MB (SLO: <41.500MB -2.3%) vs baseline: +4.7% ✅ index_aspectTime: ✅ 0.356µs (SLO: <10.000µs 📉 -96.4%) vs baseline: +0.7% Memory: ✅ 40.560MB (SLO: <41.500MB -2.3%) vs baseline: +4.8% ✅ index_noaspectTime: ✅ 0.276µs (SLO: <10.000µs 📉 -97.2%) vs baseline: -0.4% Memory: ✅ 40.541MB (SLO: <41.500MB -2.3%) vs baseline: +4.8% ✅ join_aspectTime: ✅ 1.346µs (SLO: <10.000µs 📉 -86.5%) vs baseline: +1.8% Memory: ✅ 40.600MB (SLO: <41.500MB -2.2%) vs baseline: +5.0% ✅ join_noaspectTime: ✅ 0.486µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -1.2% Memory: ✅ 40.600MB (SLO: <41.500MB -2.2%) vs baseline: +4.9% ✅ ljust_aspectTime: ✅ 2.959µs (SLO: <20.000µs 📉 -85.2%) vs baseline: 📈 +16.4% Memory: ✅ 40.272MB (SLO: <41.500MB -3.0%) vs baseline: +4.3% ✅ ljust_noaspectTime: ✅ 0.404µs (SLO: <10.000µs 📉 -96.0%) vs baseline: -0.4% Memory: ✅ 40.521MB (SLO: <41.500MB -2.4%) vs baseline: +4.8% ✅ lower_aspectTime: ✅ 2.300µs (SLO: <10.000µs 📉 -77.0%) vs baseline: +2.6% Memory: ✅ 40.352MB (SLO: <41.500MB -2.8%) vs baseline: +4.2% ✅ lower_noaspectTime: ✅ 0.368µs (SLO: <10.000µs 📉 -96.3%) vs baseline: -0.7% Memory: ✅ 40.403MB (SLO: <41.500MB -2.6%) vs baseline: +4.6% ✅ lstrip_aspectTime: ✅ 2.251µs (SLO: <20.000µs 📉 -88.7%) vs baseline: ~same Memory: ✅ 40.560MB (SLO: <41.500MB -2.3%) vs baseline: +4.7% ✅ lstrip_noaspectTime: ✅ 0.382µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -0.3% Memory: ✅ 40.560MB (SLO: <41.500MB -2.3%) vs baseline: +4.7% ✅ modulo_aspectTime: ✅ 1.036µs (SLO: <10.000µs 📉 -89.6%) vs baseline: +3.3% Memory: ✅ 40.146MB (SLO: <41.500MB -3.3%) vs baseline: +3.7% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 1.537µs (SLO: <10.000µs 📉 -84.6%) vs baseline: -1.1% Memory: ✅ 40.501MB (SLO: <41.500MB -2.4%) vs baseline: +5.5% ✅ modulo_aspect_for_bytesTime: ✅ 0.979µs (SLO: <10.000µs 📉 -90.2%) vs baseline: +1.1% Memory: ✅ 40.541MB (SLO: <41.500MB -2.3%) vs baseline: +4.6% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 1.248µs (SLO: <10.000µs 📉 -87.5%) vs baseline: +2.9% Memory: ✅ 40.462MB (SLO: <41.500MB -2.5%) vs baseline: +4.6% ✅ modulo_noaspectTime: ✅ 0.629µs (SLO: <10.000µs 📉 -93.7%) vs baseline: -0.6% Memory: ✅ 40.521MB (SLO: <41.500MB -2.4%) vs baseline: +4.9% ✅ replace_aspectTime: ✅ 4.865µs (SLO: <10.000µs 📉 -51.4%) vs baseline: -0.7% Memory: ✅ 40.274MB (SLO: <41.500MB -3.0%) vs baseline: +4.7% ✅ replace_noaspectTime: ✅ 0.460µs (SLO: <10.000µs 📉 -95.4%) vs baseline: -0.2% Memory: ✅ 40.482MB (SLO: <41.500MB -2.5%) vs baseline: +4.7% ✅ repr_aspectTime: ✅ 0.906µs (SLO: <10.000µs 📉 -90.9%) vs baseline: -0.9% Memory: ✅ 40.541MB (SLO: <41.500MB -2.3%) vs baseline: +4.6% ✅ repr_noaspectTime: ✅ 0.417µs (SLO: <10.000µs 📉 -95.8%) vs baseline: -0.2% Memory: ✅ 40.600MB (SLO: <41.500MB -2.2%) vs baseline: +4.8% ✅ rstrip_aspectTime: ✅ 1.944µs (SLO: <20.000µs 📉 -90.3%) vs baseline: +0.9% Memory: ✅ 40.501MB (SLO: <41.500MB -2.4%) vs baseline: +4.8% ✅ rstrip_noaspectTime: ✅ 0.376µs (SLO: <10.000µs 📉 -96.2%) vs baseline: ~same Memory: ✅ 40.501MB (SLO: <41.500MB -2.4%) vs baseline: +4.6% ✅ slice_aspectTime: ✅ 0.492µs (SLO: <10.000µs 📉 -95.1%) vs baseline: -0.5% Memory: ✅ 40.521MB (SLO: <41.500MB -2.4%) vs baseline: +4.7% ✅ slice_noaspectTime: ✅ 0.447µs (SLO: <10.000µs 📉 -95.5%) vs baseline: +0.6% Memory: ✅ 40.501MB (SLO: <41.500MB -2.4%) vs baseline: +4.6% ✅ stringio_aspectTime: ✅ 1.535µs (SLO: <10.000µs 📉 -84.6%) vs baseline: +0.5% Memory: ✅ 40.270MB (SLO: <41.500MB -3.0%) vs baseline: +4.4% ✅ stringio_noaspectTime: ✅ 0.714µs (SLO: <10.000µs 📉 -92.9%) vs baseline: ~same Memory: ✅ 40.560MB (SLO: <41.500MB -2.3%) vs baseline: +4.9% ✅ strip_aspectTime: ✅ 2.222µs (SLO: <20.000µs 📉 -88.9%) vs baseline: -0.2% Memory: ✅ 40.231MB (SLO: <41.500MB -3.1%) vs baseline: +4.1% ✅ strip_noaspectTime: ✅ 0.379µs (SLO: <10.000µs 📉 -96.2%) vs baseline: -1.9% Memory: ✅ 40.521MB (SLO: <41.500MB -2.4%) vs baseline: +4.9% ✅ swapcase_aspectTime: ✅ 2.487µs (SLO: <10.000µs 📉 -75.1%) vs baseline: +2.3% Memory: ✅ 40.275MB (SLO: <41.500MB -3.0%) vs baseline: +4.6% ✅ swapcase_noaspectTime: ✅ 0.534µs (SLO: <10.000µs 📉 -94.7%) vs baseline: -1.2% Memory: ✅ 40.482MB (SLO: <41.500MB -2.5%) vs baseline: +4.7% ✅ title_aspectTime: ✅ 2.427µs (SLO: <10.000µs 📉 -75.7%) vs baseline: +1.9% Memory: ✅ 40.294MB (SLO: <41.500MB -2.9%) vs baseline: +4.0% ✅ title_noaspectTime: ✅ 0.499µs (SLO: <10.000µs 📉 -95.0%) vs baseline: -0.5% Memory: ✅ 40.462MB (SLO: <41.500MB -2.5%) vs baseline: +4.7% ✅ translate_aspectTime: ✅ 3.305µs (SLO: <10.000µs 📉 -67.0%) vs baseline: -0.1% Memory: ✅ 40.535MB (SLO: <41.500MB -2.3%) vs baseline: +5.3% ✅ translate_noaspectTime: ✅ 1.038µs (SLO: <10.000µs 📉 -89.6%) vs baseline: -0.6% Memory: ✅ 40.481MB (SLO: <41.500MB -2.5%) vs baseline: +4.8% ✅ upper_aspectTime: ✅ 2.313µs (SLO: <10.000µs 📉 -76.9%) vs baseline: +3.3% Memory: ✅ 40.130MB (SLO: <41.500MB -3.3%) vs baseline: +3.7% ✅ upper_noaspectTime: ✅ 0.373µs (SLO: <10.000µs 📉 -96.3%) vs baseline: +1.8% Memory: ✅ 40.501MB (SLO: <41.500MB -2.4%) vs baseline: +4.9% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 5.216µs (SLO: <10.000µs 📉 -47.8%) vs baseline: 📈 +26.6% Memory: ✅ 40.187MB (SLO: <41.000MB 🟡 -2.0%) vs baseline: +4.2% ✅ ospathbasename_noaspectTime: ✅ 1.090µs (SLO: <10.000µs 📉 -89.1%) vs baseline: +0.3% Memory: ✅ 40.246MB (SLO: <41.000MB 🟡 -1.8%) vs baseline: +4.8% ✅ ospathjoin_aspectTime: ✅ 6.106µs (SLO: <10.000µs 📉 -38.9%) vs baseline: -0.7% Memory: ✅ 40.285MB (SLO: <41.000MB 🟡 -1.7%) vs baseline: +4.6% ✅ ospathjoin_noaspectTime: ✅ 2.290µs (SLO: <10.000µs 📉 -77.1%) vs baseline: +0.2% Memory: ✅ 40.305MB (SLO: <41.000MB 🟡 -1.7%) vs baseline: +5.1% ✅ ospathnormcase_aspectTime: ✅ 3.434µs (SLO: <10.000µs 📉 -65.7%) vs baseline: +0.4% Memory: ✅ 40.324MB (SLO: <41.000MB 🟡 -1.6%) vs baseline: +4.9% ✅ ospathnormcase_noaspectTime: ✅ 0.573µs (SLO: <10.000µs 📉 -94.3%) vs baseline: -0.8% Memory: ✅ 40.187MB (SLO: <41.000MB 🟡 -2.0%) vs baseline: +4.8% ✅ ospathsplit_aspectTime: ✅ 4.732µs (SLO: <10.000µs 📉 -52.7%) vs baseline: -0.5% Memory: ✅ 40.246MB (SLO: <41.000MB 🟡 -1.8%) vs baseline: +4.6% ✅ ospathsplit_noaspectTime: ✅ 1.597µs (SLO: <10.000µs 📉 -84.0%) vs baseline: +0.8% Memory: ✅ 40.305MB (SLO: <41.000MB 🟡 -1.7%) vs baseline: +5.0% ✅ ospathsplitdrive_aspectTime: ✅ 3.645µs (SLO: <10.000µs 📉 -63.6%) vs baseline: -0.8% Memory: ✅ 40.167MB (SLO: <41.000MB -2.0%) vs baseline: +4.7% ✅ ospathsplitdrive_noaspectTime: ✅ 0.705µs (SLO: <10.000µs 📉 -92.9%) vs baseline: +0.6% Memory: ✅ 40.167MB (SLO: <41.000MB -2.0%) vs baseline: +4.5% ✅ ospathsplitext_aspectTime: ✅ 4.489µs (SLO: <10.000µs 📉 -55.1%) vs baseline: -0.9% Memory: ✅ 40.442MB (SLO: <41.000MB 🟡 -1.4%) vs baseline: +5.6% ✅ ospathsplitext_noaspectTime: ✅ 1.396µs (SLO: <10.000µs 📉 -86.0%) vs baseline: +1.3% Memory: ✅ 40.187MB (SLO: <41.000MB 🟡 -2.0%) vs baseline: +4.6% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.420µs (SLO: <20.000µs 📉 -82.9%) vs baseline: 📈 +15.5% Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.5% ✅ 1-count-metrics-100-timesTime: ✅ 203.044µs (SLO: <220.000µs -7.7%) vs baseline: +0.3% Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.3% ✅ 1-distribution-metric-1-timesTime: ✅ 3.301µs (SLO: <20.000µs 📉 -83.5%) vs baseline: -0.4% Memory: ✅ 34.937MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.5% ✅ 1-distribution-metrics-100-timesTime: ✅ 218.011µs (SLO: <230.000µs -5.2%) vs baseline: ~same Memory: ✅ 35.173MB (SLO: <35.500MB 🟡 -0.9%) vs baseline: +5.1% ✅ 1-gauge-metric-1-timesTime: ✅ 2.204µs (SLO: <20.000µs 📉 -89.0%) vs baseline: +1.2% Memory: ✅ 34.957MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.5% ✅ 1-gauge-metrics-100-timesTime: ✅ 137.511µs (SLO: <150.000µs -8.3%) vs baseline: ~same Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.1% ✅ 1-rate-metric-1-timesTime: ✅ 3.103µs (SLO: <20.000µs 📉 -84.5%) vs baseline: ~same Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +4.6% ✅ 1-rate-metrics-100-timesTime: ✅ 215.342µs (SLO: <250.000µs 📉 -13.9%) vs baseline: -0.4% Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.6% ✅ 100-count-metrics-100-timesTime: ✅ 20.479ms (SLO: <22.000ms -6.9%) vs baseline: +0.4% Memory: ✅ 34.760MB (SLO: <35.500MB -2.1%) vs baseline: +4.9% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.272ms (SLO: <2.550ms 📉 -10.9%) vs baseline: -0.6% Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +4.2% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.421ms (SLO: <1.550ms -8.3%) vs baseline: +0.6% Memory: ✅ 34.819MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +5.0% ✅ 100-rate-metrics-100-timesTime: ✅ 2.229ms (SLO: <2.550ms 📉 -12.6%) vs baseline: +0.4% Memory: ✅ 34.800MB (SLO: <35.500MB 🟡 -2.0%) vs baseline: +5.2% ✅ flush-1-metricTime: ✅ 4.656µs (SLO: <20.000µs 📉 -76.7%) vs baseline: +0.5% Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +5.0% ✅ flush-100-metricsTime: ✅ 174.908µs (SLO: <250.000µs 📉 -30.0%) vs baseline: +0.1% Memory: ✅ 35.212MB (SLO: <35.500MB 🟡 -0.8%) vs baseline: +5.2% ✅ flush-1000-metricsTime: ✅ 2.179ms (SLO: <2.500ms 📉 -12.9%) vs baseline: +0.2% Memory: ✅ 35.960MB (SLO: <36.500MB 🟡 -1.5%) vs baseline: +5.0% 🟡 Near SLO Breach (17 suites)🟡 coreapiscenario - 10/10 (1 unstable)
|
What does this PR do?
This PR updates the
StringTable::lookupmethod to beconst. This required making thestd::mutexwe havemutable, which is OK –mutableis typically used for that.Additionally, it also makes the return type
std::reference_wrapper<const std::string>as I don't think we should allow callers oflookupto change the underlying data, which the previous signature would allow.Echion PR: P403n1x87/echion#209