VRL reference counts#9785
Conversation
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
|
✔️ Deploy Preview for vector-project canceled. 🔨 Explore the source changes: e1c1007 🔍 Inspect the deploy log: https://app.netlify.com/sites/vector-project/deploys/61a8999e5fd53200080b9157 |
|
With a simpler config, the timings are similar: [transforms.remap]
type = "remap"
inputs = ["randomvip"]
source = '''
.agent_name = "vector"
if .message == "thing" {
.nonk = upcase!(del(.host))
} else if .message == "thung" {
.noog = downcase!(del(.host))
}
matches = { "name": .message, "num": 2 }
.origin, err = .host + "/" + matches.name + "/" + matches.num
'''On master: With ref counting: |
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
|
It was pointed out to me that the Generator source is quite expensive. So I have updated the test config to use the HTTP source. Data generated by https://github.com/blt/lading. Sending 100,000 records through Vector with this has reduced the runtime from 1m20 seconds to 1m02s, albeit using fairly naive measurements (timed with my watch). This is a much more encouraging benchmark! |
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
| } | ||
| Event::Metric(event) => VrlTarget::Metric(event), | ||
| Event::Log(event) => VrlTarget::LogEvent( | ||
| SharedValue::from(vrl_core::Value::from(&event.fields)), |
There was a problem hiding this comment.
VrlTarget is now a SharedValue (a wrapper over Rc<RefCell<Value>>). When creating the target we need to copy the event into this SharedValue. This is why the clone is no longer necessary since the original event is then untouched until the end of the process.
| VrlTarget::LogEvent(log, _) => log | ||
| .get(path) | ||
| .map(|val| val.map(|val| val.clone().into())) | ||
| .map(|val| val.map(|val| val.clone())) |
There was a problem hiding this comment.
The clone here is now a cheap increment of the reference count. We also don't need the into since the value is already stored as a vrl::Value.
| object | ||
| .iter() | ||
| .map(|(k, v)| (k.clone(), v.borrow().clone().into())) | ||
| .collect(), |
There was a problem hiding this comment.
There is a cost here since we now need to convert back from a vrl::Value into a Vector Value.
This is one downside of the approach.
| mod target; | ||
|
|
||
| #[derive(Debug, Clone, PartialEq)] | ||
| pub struct SharedValue(pub(crate) Rc<RefCell<Value>>); |
There was a problem hiding this comment.
SharedValue is just a wrapper over Rc<RefCell<Value>> .
Since it is used everywhere now it is much easier to create a wrapper and then add functionality to the wrapper than it is to use Rc<RefCell<Value>> everywhere and then have to deal with the Rc<RefCell directly.
I will add more functionality here over time.
| let value = value.try_bytes_utf8_lossy()?; | ||
|
|
||
| let with_value = self.with.resolve(ctx)?; | ||
| let with_value = with_value.borrow(); |
There was a problem hiding this comment.
This is a common pattern. Unfortunately it seems we can't add this function to SharedValue like:
pub fn try_bytes_utf8_lossy(&self) -> Result<Cow<'_, str>, crate::value::error::Error> {
let value = self.borrow();
value.try_bytes_utf8_lossy()
}Since that results in an error:
error[E0515]: cannot return value referencing local variable `value`
--> lib/vrl/compiler/src/shared_value.rs:72:9
|
72 | value.try_bytes_utf8_lossy()
| -----^^^^^^^^^^^^^^^^^^^^^^^
| |
| returns a value referencing data owned by the current function
| `value` is borrowed here
(It does work for Interer however, since that is Copy. I will add that.)
| }; | ||
|
|
||
| if segments.peek().is_none() { | ||
| return self.borrow_mut().remove_by_segment(segment); |
There was a problem hiding this comment.
The code here is probably the hairiest aspect of this PR. There are a lot of borrow and borrow_mut calls around.
With a bit of work it's possible a lot of this could be tidied up so we only have a single borrow_mut at the top, but I think it would still be of great value to fuzz test this code very thoroughly.
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Soak Test ResultsBaseline: 1ec79ef What follows is a statistical summary of the soak captures between the SHAs given above. Units are bytes/second/CPU, except for 'skewness' and 'kurtosis'. Higher numbers in 'comparison' is generally better. Higher skewness or kurtosis numbers indicate a lack of consistency in behavior, making predictions of fitness in the field challenging.
|
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 10.49Mi | 10.52Mi | 10.52Mi | 10.53Mi | -0.16 | -0.19 |
| comparison | 10.04Mi | 10.07Mi | 10.07Mi | 10.07Mi | -0.93 | 0.76 |
datadog_agent_remap_datadog_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 19.46Mi | 19.50Mi | 19.51Mi | 19.52Mi | 0.31 | -0.12 |
| comparison | 17.27Mi | 17.32Mi | 17.32Mi | 17.33Mi | -0.11 | -0.85 |
fluent_elasticsearch
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 54.05Mi | 54.25Mi | 54.29Mi | 54.31Mi | -0.53 | -0.45 |
| comparison | 53.97Mi | 54.15Mi | 54.17Mi | 54.17Mi | -0.49 | -0.34 |
fluent_remap_aws_firehose
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 38.38Mi | 38.59Mi | 38.64Mi | 38.66Mi | 0.62 | -0.36 |
| comparison | 42.07Mi | 42.24Mi | 42.29Mi | 42.29Mi | 0.15 | -0.93 |
http_pipelines_blackhole
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 0.00 | 1.05Ki | 1.59Ki | 1.59Ki | 2.08 | 2.62 |
| comparison | 0.00 | 556.00 | 556.00 | 8.31Ki | 9.15 | 96.46 |
splunk_hec_route_s3
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 5.34Mi | 5.61Mi | 5.66Mi | 5.69Mi | -0.33 | -0.45 |
| comparison | 0.00 | 189.20Ki | 189.20Ki | 189.20Ki | 0.42 | -1.55 |
splunk_transforms_splunk3
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 2.35Mi | 2.52Mi | 2.57Mi | 2.60Mi | 0.11 | -0.58 |
| comparison | 0.00 | 124.77Ki | 147.22Ki | 149.45Ki | 0.36 | -0.36 |
syslog_humio_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 7.16Mi | 7.20Mi | 7.20Mi | 7.20Mi | -0.50 | -0.75 |
| comparison | 6.80Mi | 6.85Mi | 6.85Mi | 6.85Mi | -0.44 | -0.86 |
syslog_log2metric_humio_metrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 4.99Mi | 5.02Mi | 5.02Mi | 5.02Mi | -0.55 | -0.52 |
| comparison | 5.11Mi | 5.13Mi | 5.13Mi | 5.14Mi | -0.22 | -0.78 |
syslog_log2metric_splunk_hec_metrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 5.15Mi | 5.18Mi | 5.18Mi | 5.18Mi | -0.14 | -1.45 |
| comparison | 6.05Mi | 6.07Mi | 6.07Mi | 6.07Mi | -1.07 | 1.75 |
syslog_loki
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 3.88Mi | 4.32Mi | 4.34Mi | 4.34Mi | -0.72 | -0.51 |
| comparison | 3.66Mi | 3.91Mi | 3.95Mi | 3.96Mi | -0.31 | -1.35 |
syslog_regex_logs2metric_ddmetrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 3.86Mi | 3.87Mi | 3.87Mi | 3.87Mi | -1.31 | 0.95 |
| comparison | 4.42Mi | 4.63Mi | 4.64Mi | 4.64Mi | -1.60 | 1.12 |
syslog_splunk_hec_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 7.18Mi | 7.22Mi | 7.22Mi | 7.22Mi | -0.22 | -1.67 |
| comparison | 7.01Mi | 7.05Mi | 7.06Mi | 7.06Mi | 0.10 | -1.19 |
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Soak Test ResultsBaseline: 1ec79ef What follows is a statistical summary of the soak captures between the SHAs given above. Units are bytes/second/CPU, except for 'skewness' and 'kurtosis'. Higher numbers in 'comparison' is generally better. Higher skewness or kurtosis numbers indicate a lack of consistency in behavior, making predictions of fitness in the field challenging.
|
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 10.06Mi | 10.08Mi | 10.09Mi | 10.09Mi | 0.44 | 0.92 |
| comparison | 10.07Mi | 10.09Mi | 10.10Mi | 10.10Mi | 0.11 | -0.26 |
datadog_agent_remap_datadog_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 18.77Mi | 19.18Mi | 19.21Mi | 19.21Mi | 0.68 | -1.18 |
| comparison | 17.35Mi | 17.41Mi | 17.42Mi | 17.42Mi | 0.80 | -0.26 |
fluent_elasticsearch
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 54.37Mi | 54.62Mi | 54.64Mi | 54.64Mi | -0.58 | -0.81 |
| comparison | 54.41Mi | 54.71Mi | 54.79Mi | 54.80Mi | -0.69 | -0.52 |
fluent_remap_aws_firehose
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 40.01Mi | 40.30Mi | 40.33Mi | 40.34Mi | -0.61 | -0.74 |
| comparison | 42.65Mi | 42.87Mi | 42.90Mi | 42.91Mi | -0.36 | -0.77 |
http_pipelines_blackhole
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 0.00 | 556.00 | 2.12Ki | 2.12Ki | 2.10 | 5.65 |
| comparison | 0.00 | 17.70Ki | 17.70Ki | 17.70Ki | 0.21 | -1.82 |
splunk_hec_route_s3
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 5.40Mi | 5.62Mi | 5.70Mi | 5.72Mi | 0.06 | -0.50 |
| comparison | 5.39Mi | 5.58Mi | 5.61Mi | 5.63Mi | -0.02 | -0.84 |
splunk_transforms_splunk3
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 2.43Mi | 2.64Mi | 2.69Mi | 2.69Mi | 0.07 | -1.27 |
| comparison | 2.78Mi | 2.87Mi | 2.90Mi | 2.90Mi | -0.14 | -0.19 |
syslog_humio_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 7.15Mi | 7.17Mi | 7.17Mi | 7.17Mi | -0.05 | -0.99 |
| comparison | 6.93Mi | 6.95Mi | 6.95Mi | 6.95Mi | 0.29 | -0.95 |
syslog_log2metric_humio_metrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 4.98Mi | 4.99Mi | 5.00Mi | 5.00Mi | 0.11 | -0.41 |
| comparison | 4.92Mi | 4.94Mi | 4.94Mi | 4.94Mi | -0.10 | -0.22 |
syslog_log2metric_splunk_hec_metrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 5.32Mi | 5.34Mi | 5.35Mi | 5.35Mi | 0.10 | -0.84 |
| comparison | 6.02Mi | 6.04Mi | 6.04Mi | 6.04Mi | 0.25 | -1.40 |
syslog_loki
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 4.01Mi | 4.29Mi | 4.31Mi | 4.32Mi | -0.18 | -0.64 |
| comparison | 4.03Mi | 4.64Mi | 4.69Mi | 4.70Mi | -0.27 | -0.84 |
syslog_regex_logs2metric_ddmetrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 3.75Mi | 3.76Mi | 3.76Mi | 3.76Mi | 0.83 | 0.91 |
| comparison | 4.54Mi | 4.59Mi | 4.60Mi | 4.60Mi | -0.38 | -0.77 |
syslog_splunk_hec_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 7.13Mi | 7.16Mi | 7.16Mi | 7.17Mi | 0.30 | -1.44 |
| comparison | 7.06Mi | 7.09Mi | 7.09Mi | 7.09Mi | -0.40 | -1.17 |
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Soak Test ResultsBaseline: 9d78719 What follows is a statistical summary of the soak captures between the SHAs given above. Units are bytes/second/CPU, except for 'skewness' and 'kurtosis'. Higher numbers in 'comparison' is generally better. Higher skewness or kurtosis numbers indicate a lack of consistency in behavior, making predictions of fitness in the field challenging.
|
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 9.85Mi | 9.87Mi | 9.88Mi | 9.88Mi | -0.24 | -0.08 |
| comparison | 10.51Mi | 10.59Mi | 10.59Mi | 10.60Mi | 0.44 | -1.16 |
datadog_agent_remap_datadog_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 18.08Mi | 18.12Mi | 18.13Mi | 18.13Mi | -0.44 | 0.37 |
| comparison | 17.36Mi | 17.44Mi | 17.46Mi | 17.46Mi | 0.33 | -0.93 |
fluent_elasticsearch
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 50.94Mi | 51.34Mi | 51.37Mi | 51.39Mi | 0.22 | -1.42 |
| comparison | 51.53Mi | 51.69Mi | 51.79Mi | 51.81Mi | 0.59 | 1.22 |
fluent_remap_aws_firehose
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 37.01Mi | 37.18Mi | 37.20Mi | 37.20Mi | 0.15 | -1.10 |
| comparison | 42.83Mi | 43.01Mi | 43.09Mi | 43.09Mi | 0.72 | 0.16 |
http_pipelines_blackhole
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 0.00 | 3.17Ki | 3.17Ki | 3.17Ki | 0.23 | -1.36 |
| comparison | 0.00 | 0.00 | 2.12Ki | 2.12Ki | 6.31 | 38.70 |
splunk_hec_route_s3
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 5.32Mi | 5.53Mi | 5.59Mi | 5.59Mi | 0.28 | -0.42 |
| comparison | 5.04Mi | 5.26Mi | 5.30Mi | 5.30Mi | -0.04 | -0.87 |
splunk_transforms_splunk3
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 2.37Mi | 2.48Mi | 2.50Mi | 2.52Mi | 0.09 | -0.28 |
| comparison | 2.70Mi | 2.92Mi | 2.95Mi | 2.96Mi | -0.45 | -1.13 |
syslog_humio_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 6.89Mi | 6.92Mi | 6.92Mi | 6.92Mi | 0.20 | -1.18 |
| comparison | 6.84Mi | 6.88Mi | 6.89Mi | 6.89Mi | -0.26 | -1.14 |
syslog_log2metric_humio_metrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 5.02Mi | 5.04Mi | 5.04Mi | 5.04Mi | 0.63 | -0.85 |
| comparison | 4.92Mi | 4.95Mi | 4.95Mi | 4.95Mi | 0.36 | -0.57 |
syslog_log2metric_splunk_hec_metrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 5.14Mi | 5.16Mi | 5.16Mi | 5.16Mi | 0.29 | -1.10 |
| comparison | 6.01Mi | 6.03Mi | 6.03Mi | 6.03Mi | 0.09 | -1.16 |
syslog_loki
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 4.04Mi | 4.32Mi | 4.41Mi | 4.42Mi | -0.03 | -0.59 |
| comparison | 3.63Mi | 4.33Mi | 4.39Mi | 4.39Mi | 0.57 | -1.34 |
syslog_regex_logs2metric_ddmetrics
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 3.76Mi | 3.84Mi | 3.84Mi | 3.85Mi | -2.45 | 7.07 |
| comparison | 1.97Mi | 1.98Mi | 1.98Mi | 1.98Mi | 0.03 | -0.55 |
syslog_splunk_hec_logs
| EXPERIMENT | VALUE_min | VALUE_p90 | VALUE_p99 | VALUE_max | VALUE_skewness | VALUE_kurtosis |
|---|---|---|---|---|---|---|
| baseline | 7.18Mi | 7.33Mi | 7.35Mi | 7.35Mi | 0.96 | -0.35 |
| comparison | 6.82Mi | 6.87Mi | 6.88Mi | 6.88Mi | 0.43 | -0.18 |
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Signed-off-by: Stephen Wakely <fungus.humungus@gmail.com>
Soak Test ResultsBaseline: 4cdbab1 ExplanationA soak test is an integrated performance test for vector in a repeatable rig, with varying configuration for vector. What follows is a statistical summary of a brief vector run for each configuration across SHAs given above. The goal of these tests are to determine, quickly, if vector performance is changed and to what degree by a pull request. Test units below are bytes/second/CPU, except for 'skewness'. The further 'skewness' is from 0.0 the more indication that vector lacks consistency in behavior, making predictions of fitness in the field challenging.This table lists those experiments that have experienced a statistically significant change in their throughput performance between baseline and comparision SHAs, with 95.0% confidence. Negative values mean that baseline is faster, positive comparison. Results that do not exhibit more than a ±8.87% change in mean throughput are discarded.
Fine details of change detection per experiment.
Fine details of each soak run.
|
|
The soak test results that we are getting from this PR are showing there is a disappointing improvement in performance using Reference Counts. Given the additional complexity of the code and the potential for runtime panics due to moving the borrow checking to runtime, it is not felt that this PR has any value and is not worth pursuing further. |


This is a very draft proof of concept moving VRL to use
Rc<RefCell<Value>>to reduce the number of clones that are needed at runtime.In testing the results were pretty disappointing, so I would very much appreciate some help looking through this to see if I am missing anything obvious.
I am testing with this config:
Running master, this is giving me a time of:
Running this branch we get times of:
Here is a flamegraph from running master:
https://github.com/vectordotdev/vector/blob/stephen/vrl_refcount/flamegraph.master.svg
Here is a flamegraph from running the RC branch:
https://github.com/vectordotdev/vector/blob/stephen/vrl_refcount/flamegraph.rc.svg