-
Notifications
You must be signed in to change notification settings - Fork 18
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
Added ldclient evaluation benchmarks #28
Added ldclient evaluation benchmarks #28
Conversation
Thanks. This partly duplicates some work we've been doing to compare the performance of the current release with our upcoming 5.0 rewrite, but it looks like a more thorough approach. I do have some questions about the intended behavior, since there aren't any comments in the part that sets up the flag configurations. You're generating a bunch of rules and clauses, but (at first glance; I haven't stepped through this in detail, it is a bit hard to follow) I'm not sure that they are actually having any effect. If I'm reading correctly, you are always evaluating with a user whose key is |
Results: Running tool: /usr/local/go/bin/go test -benchmem -run=^$ gopkg.in/launchdarkly/go-server-sdk.v4 -bench ^(BenchmarkBoolVariation|BenchmarkIntVariation|BenchmarkStringVariation|BenchmarkJSONVariation)$ goos: linux goarch: amd64 pkg: gopkg.in/launchdarkly/go-server-sdk.v4 BenchmarkBoolVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1273147 983 ns/op 572 B/op 3 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1484312 818 ns/op 558 B/op 3 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1499260 813 ns/op 557 B/op 3 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16 177571 6449 ns/op 4607 B/op 53 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 93933 12237 ns/op 8619 B/op 103 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 94274 12184 ns/op 8605 B/op 103 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16 88407 13022 ns/op 9457 B/op 107 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16 86668 13218 ns/op 9463 B/op 107 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16 665433 1781 ns/op 1363 B/op 7 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16 33022 34864 ns/op 28311 B/op 274 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16 1000000 1197 ns/op 639 B/op 8 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16 1000000 1113 ns/op 623 B/op 5 allocs/op BenchmarkBoolVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16 976120 1202 ns/op 625 B/op 5 allocs/op BenchmarkIntVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1402076 824 ns/op 563 B/op 3 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1477999 811 ns/op 558 B/op 3 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1496818 811 ns/op 557 B/op 3 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16 175850 6456 ns/op 4609 B/op 53 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 94040 12243 ns/op 8610 B/op 103 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 93117 12279 ns/op 8608 B/op 103 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16 89034 13068 ns/op 9458 B/op 107 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16 87375 13023 ns/op 9459 B/op 107 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16 683637 1807 ns/op 1359 B/op 7 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16 33579 34788 ns/op 28307 B/op 274 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16 1000000 1182 ns/op 639 B/op 8 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16 1000000 1105 ns/op 623 B/op 5 allocs/op BenchmarkIntVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16 984885 1194 ns/op 625 B/op 5 allocs/op BenchmarkStringVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1326006 967 ns/op 600 B/op 5 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1354795 946 ns/op 598 B/op 5 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1339611 859 ns/op 599 B/op 5 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16 174958 6494 ns/op 4619 B/op 55 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 95642 12069 ns/op 8637 B/op 105 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 96768 12100 ns/op 8634 B/op 105 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16 91254 13091 ns/op 9492 B/op 110 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16 90015 13126 ns/op 9497 B/op 110 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16 639720 1918 ns/op 1418 B/op 10 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16 34008 34831 ns/op 28397 B/op 280 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16 935094 1248 ns/op 677 B/op 10 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16 1000000 1170 ns/op 655 B/op 7 allocs/op BenchmarkStringVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16 928885 1276 ns/op 662 B/op 7 allocs/op BenchmarkJSONVariation/{numOrgs:1000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1000000 1006 ns/op 655 B/op 7 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1000000 1037 ns/op 655 B/op 7 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:10000_numVariations:2_numTargets:10_numRules:0_numClauses:0_prereqsWidth:0_prereqsDepth:0_operator:}-16 1000000 1648 ns/op 655 B/op 7 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:}-16 174028 6570 ns/op 4682 B/op 57 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 95949 11959 ns/op 8698 B/op 107 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:5_numClauses:3_prereqsWidth:0_prereqsDepth:0_operator:}-16 96314 12036 ns/op 8694 B/op 107 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:1_operator:}-16 90968 13083 ns/op 9589 B/op 113 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:1_prereqsDepth:5_operator:}-16 89406 13151 ns/op 9590 B/op 113 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:1_numRules:0_numClauses:0_prereqsWidth:2_prereqsDepth:2_operator:}-16 595975 2087 ns/op 1526 B/op 13 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:5_prereqsDepth:5_operator:}-16 33800 35252 ns/op 28588 B/op 286 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:greaterThan}-16 875638 1350 ns/op 727 B/op 12 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:contains}-16 929407 1303 ns/op 726 B/op 9 allocs/op BenchmarkJSONVariation/{numOrgs:10000_numFlags:1000_numVariations:2_numTargets:0_numRules:1_numClauses:1_prereqsWidth:0_prereqsDepth:0_operator:in}-16 876115 1336 ns/op 711 B/op 9 allocs/op PASS ok gopkg.in/launchdarkly/go-server-sdk.v4 76.267s
Hey @eli-darkly -- thanks for taking a look. I think I may have introduced a typo when I was renaming some of the values to prepare this for the PR. I've updated the benchmark cases (and results in the description) to never match, so they shouldn't short-circuit the evaluation logic anymore. |
Since your use of force-pushing makes it impossible for me to see the incremental diff, would you mind pointing out to me what your recent change was? |
@@ -51,10 +51,10 @@ func (env *benchmarkEnv) tearDown() {
*/
var (
- evalBenchmarkUser = NewUserBuilder("user-0").
- Name("Checkit Nice").
- Custom("stringAttr", ldvalue.String("stringAttr-2")).
- Custom("numAttr", ldvalue.Int(100)).Build()
+ evalBenchmarkUser = NewUserBuilder("user-nomatch").
+ Name("name-nomatch").
+ Custom("stringAttr", ldvalue.String("stringAttr-nomatch")).
+ Custom("numAttr", ldvalue.Int(0)).Build()
)
type benchmarkCase struct {
@@ -332,29 +332,29 @@ func makeClauses(numClauses int, op Operator) []Clause {
clause := Clause{Op: op}
switch op {
case OperatorGreaterThan:
- clause.Attribute = "numDevices"
+ clause.Attribute = "numAttr"
clause.Values = []interface{}{i}
case OperatorContains:
clause.Attribute = "name"
clause.Values = []interface{}{
- fmt.Sprintf("val-%d", i),
- fmt.Sprintf("val-%d", i+1),
- "Checkit Nice",
+ fmt.Sprintf("name-%d", i),
+ fmt.Sprintf("name-%d", i+1),
+ fmt.Sprintf("name-%d", i+2),
}
case OperatorIn: |
I'm pulling this into another branch so we can adapt and extend it before releasing it on the main branch. Thanks again. |
Requirements
Related issues
N/A
Describe the solution you've provided
I've added benchmarks to measure the throughput and memory allocations of several evaluation functions.
Describe alternatives you've considered
N/A
Additional context
Results: