Summary

Feeding the benchmark data from 100 runs of grpc-pass (PR144) vs. feat.grps-auto (PR145) and looking at the 95% confidence interval suggests that:

Since these numbers are quite small we can be more confident that there is little or no performance difference between these branches on this benchmark.

Visualization

We can also visualize the results with a boxplot and see that there are some fairly extreme results amongst the tests, everything from 4000 req/s to 7500 req/s, although most of the results are tightly clustered around just under 6000 req/s.

ggplot(data, aes(y=requests_per_second, x=version, color=version)) +
  geom_boxplot() +
  labs(y="Requests/second", x="Branch") +
  expand_limits(y=0) +
  theme(legend.position = "none")

Implementation

library(tibble)
library(ggplot2)
data <- read.csv("/Users/lukegorrie/Downloads/bench_results/grpc.csv")

Compare branches using “Tukey’s Honestly Significant Difference” test.

kong.lm <- lm(requests_per_second ~ version, data)
kong.aov <- aov(kong.lm)
kong.tukey <- TukeyHSD(kong.aov)
kong.tukey
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = kong.lm)

$version
                                 diff       lwr      upr     p adj
feat.grps-auto-feat.grpc-pass 73.6295 -13.33025 160.5892 0.0965544

Same information visually:

plot(kong.tukey)

LS0tCnRpdGxlOiAiZ1JQQyBiZW5jaG1hcmsgcmVzdWx0IGNvbXBhcmlzb24iCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMgU3VtbWFyeQoKRmVlZGluZyB0aGUgYmVuY2htYXJrIGRhdGEgZnJvbSAxMDAgcnVucyBvZiBgZ3JwYy1wYXNzYCAoUFIxNDQpIHZzLiBgZmVhdC5ncnBzLWF1dG9gIChQUjE0NSkgYW5kIGxvb2tpbmcgYXQgdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsIHN1Z2dlc3RzIHRoYXQ6CgotIFdlIGNhbid0IHNheSBpZiBvbmUgYnJhbmNoIGlzIGZhc3RlciB0aGFuIHRoZSBvdGhlciwgYnV0IHRoZXkgYXJlIGRlZmluaXRlbHkgY2xvc2U7Ci0gUFIxNDUgd291bGQgYmUgMTMgcmVxL3Mgc2xvd2VyIGluIHRoZSB3b3JzdCBjYXNlOwotIFBSMTQ1IHdvdWxkIGJlIDE2MCByZXEvcyBmYXN0ZXIgaW4gdGhlIGJlc3QgY2FzZS4KClNpbmNlIHRoZXNlIG51bWJlcnMgYXJlIHF1aXRlIHNtYWxsIHdlIGNhbiBiZSBtb3JlIGNvbmZpZGVudCB0aGF0IHRoZXJlIGlzIGxpdHRsZSBvciBubyBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgYnJhbmNoZXMgb24gdGhpcyBiZW5jaG1hcmsuCgojIFZpc3VhbGl6YXRpb24KCldlIGNhbiBhbHNvIHZpc3VhbGl6ZSB0aGUgcmVzdWx0cyB3aXRoIGEgW2JveHBsb3RdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JveF9wbG90KSBhbmQgc2VlIHRoYXQgdGhlcmUgYXJlIHNvbWUgZmFpcmx5IGV4dHJlbWUgcmVzdWx0cyBhbW9uZ3N0IHRoZSB0ZXN0cywgZXZlcnl0aGluZyBmcm9tIDQwMDAgcmVxL3MgdG8gNzUwMCByZXEvcywgYWx0aG91Z2ggbW9zdCBvZiB0aGUgcmVzdWx0cyBhcmUgdGlnaHRseSBjbHVzdGVyZWQgYXJvdW5kIGp1c3QgdW5kZXIgNjAwMCByZXEvcy4KCmBgYHtyfQpnZ3Bsb3QoZGF0YSwgYWVzKHk9cmVxdWVzdHNfcGVyX3NlY29uZCwgeD12ZXJzaW9uLCBjb2xvcj12ZXJzaW9uKSkgKwogIGdlb21fYm94cGxvdCgpICsKICBsYWJzKHk9IlJlcXVlc3RzL3NlY29uZCIsIHg9IkJyYW5jaCIpICsKICBleHBhbmRfbGltaXRzKHk9MCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgoKIyBJbXBsZW1lbnRhdGlvbgoKYGBge3J9CmxpYnJhcnkodGliYmxlKQpsaWJyYXJ5KGdncGxvdDIpCgpkYXRhIDwtIHJlYWQuY3N2KCIvVXNlcnMvbHVrZWdvcnJpZS9Eb3dubG9hZHMvYmVuY2hfcmVzdWx0cy9ncnBjLmNzdiIpCmBgYAoKCkNvbXBhcmUgYnJhbmNoZXMgdXNpbmcgIlR1a2V5J3MgSG9uZXN0bHkgU2lnbmlmaWNhbnQgRGlmZmVyZW5jZSIgdGVzdC4KCmBgYHtyfQprb25nLmxtIDwtIGxtKHJlcXVlc3RzX3Blcl9zZWNvbmQgfiB2ZXJzaW9uLCBkYXRhKQprb25nLmFvdiA8LSBhb3Yoa29uZy5sbSkKa29uZy50dWtleSA8LSBUdWtleUhTRChrb25nLmFvdikKCmtvbmcudHVrZXkKYGBgCgpTYW1lIGluZm9ybWF0aW9uIHZpc3VhbGx5OgoKYGBge3J9CnBsb3Qoa29uZy50dWtleSkKYGBgCgo=