Skip to content

Conversation

@coleenquadros
Copy link

@coleenquadros coleenquadros commented Nov 7, 2025

#4504

benchmark

goos: darwin
goarch: arm64
pkg: github.com/prometheus/alertmanager/inhibit
cpu: Apple M1 Pro
                                                                  │ benchmark-inhibit-main.txt │               ms.txt                │
                                                                  │           sec/op           │    sec/op     vs base               │
Mutes/1_inhibition_rule,_1_inhibiting_alert-10                                    871.5n ±  4%   887.4n ± 26%        ~ (p=0.073 n=7)
Mutes/10_inhibition_rules,_1_inhibiting_alert-10                                  844.1n ±  2%   849.4n ±  5%        ~ (p=0.097 n=7)
Mutes/100_inhibition_rules,_1_inhibiting_alert-10                                 888.2n ±  1%   894.4n ±  2%   +0.70% (p=0.019 n=7)
Mutes/1000_inhibition_rules,_1_inhibiting_alert-10                                1.006µ ±  3%   1.012µ ±  1%        ~ (p=0.223 n=7)
Mutes/10000_inhibition_rules,_1_inhibiting_alert-10                              1229.0n ± 24%   989.0n ±  5%  -19.53% (p=0.002 n=7)
Mutes/1_inhibition_rule,_10_inhibiting_alerts-10                                  929.0n ±  3%   922.3n ±  2%        ~ (p=0.053 n=7)
Mutes/1_inhibition_rule,_100_inhibiting_alerts-10                                 926.1n ±  2%   943.5n ±  1%   +1.88% (p=0.001 n=7)
Mutes/1_inhibition_rule,_1000_inhibiting_alerts-10                                932.5n ±  2%   948.2n ±  3%   +1.68% (p=0.007 n=7)
Mutes/1_inhibition_rule,_10000_inhibiting_alerts-10                               919.9n ±  2%   917.3n ±  4%        ~ (p=0.535 n=7)
Mutes/100_inhibition_rules,_1000_inhibiting_alerts-10                             888.1n ±  1%   892.4n ±  3%        ~ (p=0.620 n=7)
Mutes/10_inhibition_rules,_last_rule_matches-10                                   2.502µ ±  1%   2.592µ ±  5%   +3.60% (p=0.001 n=7)
Mutes/100_inhibition_rules,_last_rule_matches-10                                  18.32µ ±  2%   19.05µ ±  1%   +3.98% (p=0.001 n=7)
Mutes/1000_inhibition_rules,_last_rule_matches-10                                 175.9µ ±  1%   182.3µ ±  5%   +3.67% (p=0.001 n=7)
Mutes/10000_inhibition_rules,_last_rule_matches-10                                1.793m ±  2%   1.929m ±  4%   +7.58% (p=0.001 n=7)
Mutes/10_inhibition_rules,_5_sources,_100_inhibiting_alerts-10                                   2.278µ ±  1%
Mutes/100_inhibition_rules,_10_sources,_1000_inhibiting_alerts-10                                3.593µ ±  2%
Mutes/1000_inhibition_rules,_20_sources,_100_inhibiting_alerts-10                                7.477µ ± 14%
geomean                                                                           3.103µ         3.243µ         +0.24%

                                                                  │ benchmark-inhibit-main.txt │                ms.txt                │
                                                                  │            B/op            │     B/op      vs base                │
Mutes/1_inhibition_rule,_1_inhibiting_alert-10                                      488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10_inhibition_rules,_1_inhibiting_alert-10                                    488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_1_inhibiting_alert-10                                   488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1000_inhibition_rules,_1_inhibiting_alert-10                                  488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10000_inhibition_rules,_1_inhibiting_alert-10                                 489.0 ± 0%     488.0 ± 0%  -0.20% (p=0.001 n=7)
Mutes/1_inhibition_rule,_10_inhibiting_alerts-10                                    488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_100_inhibiting_alerts-10                                   488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_1000_inhibiting_alerts-10                                  488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_10000_inhibiting_alerts-10                                 488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_1000_inhibiting_alerts-10                               488.0 ± 0%     488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10_inhibition_rules,_last_rule_matches-10                                     472.0 ± 0%     472.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_last_rule_matches-10                                    472.0 ± 0%     472.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1000_inhibition_rules,_last_rule_matches-10                                   472.0 ± 0%     472.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10000_inhibition_rules,_last_rule_matches-10                                  475.0 ± 0%     476.0 ± 0%       ~ (p=0.103 n=7)
Mutes/10_inhibition_rules,_5_sources,_100_inhibiting_alerts-10                                   1.070Ki ± 0%
Mutes/100_inhibition_rules,_10_sources,_1000_inhibiting_alerts-10                                1.789Ki ± 0%
Mutes/1000_inhibition_rules,_20_sources,_100_inhibiting_alerts-10                                4.845Ki ± 1%
"main-ms.txt" 68L, 8042B

Signed-off-by: Coleen Iona Quadros <coleen.quadros27@gmail.com>
Signed-off-by: Coleen Iona Quadros <coleen.quadros27@gmail.com>
@ultrotter
Copy link
Contributor

This sounds like it may need some documentation changes as well, so people know it exists and to use it?

@siavashs
Copy link
Contributor

I closed #4504 since same result could be achieved using regex matching.
Do you think this would provide any advantage on top of regex matching?

@siavashs
Copy link
Contributor

siavashs commented Nov 10, 2025

Could you run the benchmarks and also add new benchmarks with multiple source matchers?

@coleenquadros
Copy link
Author

coleenquadros commented Nov 11, 2025

goos: darwin
goarch: arm64
pkg: github.com/prometheus/alertmanager/inhibit
cpu: Apple M1 Pro
BenchmarkMutes
BenchmarkMutes/1_inhibition_rule,_1_inhibiting_alert
BenchmarkMutes/1_inhibition_rule,_1_inhibiting_alert-10         	 1399873	       854.7 ns/op
BenchmarkMutes/10_inhibition_rules,_1_inhibiting_alert
BenchmarkMutes/10_inhibition_rules,_1_inhibiting_alert-10       	 1375345	       864.3 ns/op
BenchmarkMutes/100_inhibition_rules,_1_inhibiting_alert
BenchmarkMutes/100_inhibition_rules,_1_inhibiting_alert-10      	 1303854	       898.8 ns/op
BenchmarkMutes/1000_inhibition_rules,_1_inhibiting_alert
BenchmarkMutes/1000_inhibition_rules,_1_inhibiting_alert-10     	 1160338	      1011 ns/op
BenchmarkMutes/10000_inhibition_rules,_1_inhibiting_alert
BenchmarkMutes/10000_inhibition_rules,_1_inhibiting_alert-10    	 1140762	      1034 ns/op
BenchmarkMutes/1_inhibition_rule,_10_inhibiting_alerts
BenchmarkMutes/1_inhibition_rule,_10_inhibiting_alerts-10       	 1267029	       965.7 ns/op
BenchmarkMutes/1_inhibition_rule,_100_inhibiting_alerts
BenchmarkMutes/1_inhibition_rule,_100_inhibiting_alerts-10      	 1208812	       980.3 ns/op
BenchmarkMutes/1_inhibition_rule,_1000_inhibiting_alerts
BenchmarkMutes/1_inhibition_rule,_1000_inhibiting_alerts-10     	 1252640	       946.8 ns/op
BenchmarkMutes/1_inhibition_rule,_10000_inhibiting_alerts
BenchmarkMutes/1_inhibition_rule,_10000_inhibiting_alerts-10    	 1275914	       929.5 ns/op
BenchmarkMutes/100_inhibition_rules,_1000_inhibiting_alerts
BenchmarkMutes/100_inhibition_rules,_1000_inhibiting_alerts-10  	 1381504	       866.2 ns/op
BenchmarkMutes/10_inhibition_rules,_last_rule_matches
BenchmarkMutes/10_inhibition_rules,_last_rule_matches-10        	  435414	      2673 ns/op
BenchmarkMutes/100_inhibition_rules,_last_rule_matches
BenchmarkMutes/100_inhibition_rules,_last_rule_matches-10       	   63754	     19681 ns/op
BenchmarkMutes/1000_inhibition_rules,_last_rule_matches
BenchmarkMutes/1000_inhibition_rules,_last_rule_matches-10      	    6380	    183355 ns/op
BenchmarkMutes/10000_inhibition_rules,_last_rule_matches
BenchmarkMutes/10000_inhibition_rules,_last_rule_matches-10     	     570	   1886689 ns/op
**_BenchmarkMutes/10_inhibition_rules,_5_sources,_100_inhibiting_alerts
BenchmarkMutes/10_inhibition_rules,_5_sources,_100_inhibiting_alerts-10         	  520171	      2277 ns/op
BenchmarkMutes/100_inhibition_rules,_10_sources,_1000_inhibiting_alerts
BenchmarkMutes/100_inhibition_rules,_10_sources,_1000_inhibiting_alerts-10      	  335876	      3696 ns/op
BenchmarkMutes/1000_inhibition_rules,_20_sources,_100_inhibiting_alerts
BenchmarkMutes/1000_inhibition_rules,_20_sources,_100_inhibiting_alerts-10      	  193414	      7105 ns/op_**
PASS

Signed-off-by: Coleen Iona Quadros <coleen.quadros27@gmail.com>
Signed-off-by: Coleen Iona Quadros <coleen.quadros27@gmail.com>
@ultrotter
Copy link
Contributor

ultrotter commented Nov 11, 2025

Could you run the benchmarks before and after, and then submit rather the output of benchstat, please? Otherwise it's a bit hard to compare...

@coleenquadros
Copy link
Author

@ultrotter can you help me understand what do you mean by before and after? The multiple sources feature is implemented for the first time. So I am not sure what we need to compare?

@siavashs
Copy link
Contributor

@ultrotter can you help me understand what do you mean by before and after? The multiple sources feature is implemented for the first time. So I am not sure what we need to compare?

@coleenquadros Please follow these steps:

  1. Run benchmarks on your branch: go test -bench=. -run='^$' -count 7 -benchmem ./inhibit/ | tee benchmark-inhibit-multiple-source-matchers.txt
  2. Run benchmarks on main branch: go test -bench=. -run='^$' -count 7 -benchmem ./inhibit/ | tee benchmark-inhibit-main.txt
  3. Finally compare the benchmarks: benchstat benchmark-inhibit-main.txt benchmark-inhibit-multiple-source-matchers.txt
  4. Post the output in a code block in PR description.

@ultrotter
Copy link
Contributor

ultrotter commented Nov 11, 2025

The idea is to compare the benchmarks as ran without the patch applied, with the benchmarks ran after you applied it, to make sure the current use cases/code paths are not negatively affected by the feature as it's implemented.

So something like:

git checkout main
git pull
go test -bench=. -benchmem -run=^$ -benchtime=2s -count=5 ./inhibit/... | tee 0.txt
git checkout YOURBRANCH
go test -bench=. -benchmem -run=^$ -benchtime=2s -count=5 ./inhibit/... | tee 1.txt

benchstat 0.txt 1.txt > 0-1.txt # can be installed with go install golang.org/x/perf/cmd/benchstat@latest

Thanks!

Copy link
Contributor

@siavashs siavashs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some comments for now, will do another review after these are discussed.

config/config.go Outdated
SourceMatchRE MatchRegexps `yaml:"source_match_re,omitempty" json:"source_match_re,omitempty"`
// SourceMatchers defines a set of label matchers that have to be fulfilled for source alerts.
SourceMatchers Matchers `yaml:"source_matchers,omitempty" json:"source_matchers,omitempty"`
// Sources defines a set of source matchers and equal labels.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docs are incomplete and missing a lot of context, for example:

  • it allows an inhibition rule to match multiple source alert
  • the fact that it uses an AND operator to match multiple sources
  • or that this will override SourceMatchers
  • etc.

Also we should think about if this should become the new default and we deprecate SourceMatchers so a rule can have one or more of this new source matcher, if more than one all must match. You get the idea.
I'm interested to know what others think since we have already another deprecated config here, which would add more deprecations.
Maybe it's time for InhibitRule version 2 (or versioned config in general)?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cc @Spaceman1701 and @ultrotter since we discussed this in Slack briefly.

config/config.go Outdated
// SourceMatchers defines a set of label matchers that have to be fulfilled for source alerts.
SourceMatchers Matchers `yaml:"source_matchers,omitempty" json:"source_matchers,omitempty"`
// Sources defines a set of source matchers and equal labels.
Sources []Source `yaml:"source,omitempty" json:"source,omitempty"`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The yaml/json naming is missing an s suffix:

Suggested change
Sources []Source `yaml:"source,omitempty" json:"source,omitempty"`
// Sources defines a set of source matchers and equal labels.
Sources []Source `yaml:"sources,omitempty" json:"sources,omitempty"`

I'm also not fully happy with this naming, but still think about alternatives:

  • AllSourceMatchers
  • MultiSourceMatchers
  • etc.

Maybe other maintainers have a better idea how to name this thing.

Comment on lines +93 to +120
if len(r.Sources) > 0 {
cached = 0
indexed = 0
for _, src := range r.Sources {
if src.SrcMatchers.Matches(a.Labels) {
if err := src.scache.Set(a); err != nil {
ih.logger.Error("error on set alert", "err", err)
continue
}
src.updateIndex(a)
cached += src.scache.Len()
indexed += src.sindex.Len()
break
}
}
r.updateIndex(a)

}
cached := r.scache.Len()
indexed := r.sindex.Len()
} else {
if r.SourceMatchers.Matches(a.Labels) {
if err := r.scache.Set(a); err != nil {
ih.logger.Error("error on set alert", "err", err)
continue
}
r.updateIndex(a)
}
cached = r.scache.Len()
indexed = r.sindex.Len()

}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this logic is too big now and should move to Rule level as a method.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but if this multiple source way becomes the standard way to configure inhibition rules we dont need the else part right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is correct, there is another comment I left about versioning inhibit rules, so the structure will change.
We can discuss that first and then update the implementation based on the outcome.

Comment on lines 191 to 227

if len(r.Sources) > 0 {
var inhibitorIDs []string
for _, source := range r.Sources {
if inhibitedByFP, eq := source.hasEqual(lset, source.SrcMatchers.Matches(lset), ruleStart, r.TargetMatchers); eq && !source.foundMatch {
inhibitorIDs = append(inhibitorIDs, inhibitedByFP.String())
source.foundMatch = true
} else {
break
}
}
if allSourcesMatched := r.allSourcesSatisfied(); allSourcesMatched {
compositeInhibitorID := strings.Join(inhibitorIDs, ",")
ih.marker.SetInhibited(fp, compositeInhibitorID)
now := time.Now()
sinceStart := now.Sub(start)
sinceRuleStart := now.Sub(ruleStart)
ih.metrics.mutesDurationMuted.Observe(sinceStart.Seconds())
r.metrics.mutesDurationMuted.Observe(sinceRuleStart.Seconds())
return true
}
// Reset for next use.
for _, source := range r.Sources {
source.foundMatch = false
}

} else {
if inhibitedByFP, eq := r.hasEqual(lset, r.SourceMatchers.Matches(lset), ruleStart); eq {
ih.marker.SetInhibited(fp, inhibitedByFP.String())
now := time.Now()
sinceStart := now.Sub(start)
sinceRuleStart := now.Sub(ruleStart)
ih.metrics.mutesDurationMuted.Observe(sinceStart.Seconds())
r.metrics.mutesDurationMuted.Observe(sinceRuleStart.Seconds())
return true
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here.

// Overwrites only happen if the new source alert has bigger EndsAt value.
sindex *index

foundMatch bool
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this, can you elaborate?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the foundMatch is a safeguard when calling the Mutes function for a label set so that the label set is not matched against every source in a rule everytime if there was already a previous match source.hasEqual(lset, source.SrcMatchers.Matches(lset), ruleStart, r.TargetMatchers); eq && !source.foundMatch

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I might not understand the logic fully but how the boolean stored on this a valid result for all the different source and target alerts hitting the rule?

What is "the match" we have found here?

Signed-off-by: Coleen Iona Quadros <coleen.quadros27@gmail.com>
Signed-off-by: Coleen Iona Quadros <coleen.quadros27@gmail.com>
@coleenquadros
Copy link
Author

updated benchstat

coquadro@coquadro-mac work % benchstat benchmark-inhibit-main.txt benchmark-inhibit-multiple-source-matchers.txt
goos: darwin
goarch: arm64
pkg: github.com/prometheus/alertmanager/inhibit
cpu: Apple M1 Pro
                                                                  │ benchmark-inhibit-main.txt │ benchmark-inhibit-multiple-source-matchers.txt │
                                                                  │           sec/op           │          sec/op           vs base              │
Mutes/1_inhibition_rule,_1_inhibiting_alert-10                                    880.5n ±  3%               869.5n ±  4%       ~ (p=0.620 n=7)
Mutes/10_inhibition_rules,_1_inhibiting_alert-10                                  857.9n ±  1%               849.7n ±  1%  -0.96% (p=0.007 n=7)
Mutes/100_inhibition_rules,_1_inhibiting_alert-10                                 896.4n ±  2%               892.1n ±  2%       ~ (p=0.435 n=7)
Mutes/1000_inhibition_rules,_1_inhibiting_alert-10                                1.012µ ±  1%               1.009µ ±  2%       ~ (p=0.473 n=7)
Mutes/10000_inhibition_rules,_1_inhibiting_alert-10                               1.229µ ± 20%               1.040µ ±  5%       ~ (p=0.138 n=7)
Mutes/1_inhibition_rule,_10_inhibiting_alerts-10                                  935.8n ±  2%               927.7n ±  2%       ~ (p=0.318 n=7)
Mutes/1_inhibition_rule,_100_inhibiting_alerts-10                                 949.9n ±  2%               945.8n ±  3%       ~ (p=0.053 n=7)
Mutes/1_inhibition_rule,_1000_inhibiting_alerts-10                                967.1n ±  1%               952.4n ±  2%  -1.52% (p=0.007 n=7)
Mutes/1_inhibition_rule,_10000_inhibiting_alerts-10                               930.2n ±  0%               939.8n ±  2%  +1.03% (p=0.004 n=7)
Mutes/100_inhibition_rules,_1000_inhibiting_alerts-10                             887.5n ±  4%               913.1n ±  3%       ~ (p=0.073 n=7)
Mutes/10_inhibition_rules,_last_rule_matches-10                                   2.520µ ±  1%               2.605µ ±  4%  +3.37% (p=0.001 n=7)
Mutes/100_inhibition_rules,_last_rule_matches-10                                  18.95µ ± 10%               19.31µ ±  2%  +1.89% (p=0.026 n=7)
Mutes/1000_inhibition_rules,_last_rule_matches-10                                 182.4µ ± 11%               182.7µ ±  2%       ~ (p=0.318 n=7)
Mutes/10000_inhibition_rules,_last_rule_matches-10                                1.882m ±  3%               1.900m ±  3%       ~ (p=0.209 n=7)
Mutes/10_inhibition_rules,_5_sources,_100_inhibiting_alerts-10                                               2.300µ ±  1%
Mutes/100_inhibition_rules,_10_sources,_1000_inhibiting_alerts-10                                            3.637µ ±  1%
Mutes/1000_inhibition_rules,_20_sources,_100_inhibiting_alerts-10                                            7.024µ ± 12%
geomean                                                                           3.158µ                     3.252µ        -0.88%

                                                                  │ benchmark-inhibit-main.txt │ benchmark-inhibit-multiple-source-matchers.txt │
                                                                  │            B/op            │          B/op           vs base                │
Mutes/1_inhibition_rule,_1_inhibiting_alert-10                                      488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10_inhibition_rules,_1_inhibiting_alert-10                                    488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_1_inhibiting_alert-10                                   488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1000_inhibition_rules,_1_inhibiting_alert-10                                  488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10000_inhibition_rules,_1_inhibiting_alert-10                                 489.0 ± 0%               488.0 ± 0%       ~ (p=0.070 n=7)
Mutes/1_inhibition_rule,_10_inhibiting_alerts-10                                    488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_100_inhibiting_alerts-10                                   488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_1000_inhibiting_alerts-10                                  488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_10000_inhibiting_alerts-10                                 488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_1000_inhibiting_alerts-10                               488.0 ± 0%               488.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10_inhibition_rules,_last_rule_matches-10                                     472.0 ± 0%               472.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_last_rule_matches-10                                    472.0 ± 0%               472.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1000_inhibition_rules,_last_rule_matches-10                                   472.0 ± 0%               472.0 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10000_inhibition_rules,_last_rule_matches-10                                  476.0 ± 0%               476.0 ± 0%       ~ (p=1.000 n=7)
Mutes/10_inhibition_rules,_5_sources,_100_inhibiting_alerts-10                                             1.070Ki ± 0%
Mutes/100_inhibition_rules,_10_sources,_1000_inhibiting_alerts-10                                          1.789Ki ± 0%
Mutes/1000_inhibition_rules,_20_sources,_100_inhibiting_alerts-10                                          4.837Ki ± 3%
geomean                                                                             483.7                    629.4       -0.01%
¹ all samples are equal

                                                                  │ benchmark-inhibit-main.txt │ benchmark-inhibit-multiple-source-matchers.txt │
                                                                  │         allocs/op          │       allocs/op         vs base                │
Mutes/1_inhibition_rule,_1_inhibiting_alert-10                                      10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10_inhibition_rules,_1_inhibiting_alert-10                                    10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_1_inhibiting_alert-10                                   10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1000_inhibition_rules,_1_inhibiting_alert-10                                  10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10000_inhibition_rules,_1_inhibiting_alert-10                                 10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_10_inhibiting_alerts-10                                    10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_100_inhibiting_alerts-10                                   10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_1000_inhibiting_alerts-10                                  10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1_inhibition_rule,_10000_inhibiting_alerts-10                                 10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_1000_inhibiting_alerts-10                               10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10_inhibition_rules,_last_rule_matches-10                                     10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/100_inhibition_rules,_last_rule_matches-10                                    10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/1000_inhibition_rules,_last_rule_matches-10                                   10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10000_inhibition_rules,_last_rule_matches-10                                  10.00 ± 0%               10.00 ± 0%       ~ (p=1.000 n=7) ¹
Mutes/10_inhibition_rules,_5_sources,_100_inhibiting_alerts-10                                               29.00 ± 0%
Mutes/100_inhibition_rules,_10_sources,_1000_inhibiting_alerts-10                                            50.00 ± 0%
Mutes/1000_inhibition_rules,_20_sources,_100_inhibiting_alerts-10                                            126.0 ± 2%
geomean                                                                             10.00                    13.58       +0.00%
¹ all samples are equal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants