Skip to content

Instantly share code, notes, and snippets.

@lukego
Last active May 10, 2016 11:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukego/c1875e8c7b5ab9ef38a20be26e8ceeff to your computer and use it in GitHub Desktop.
Save lukego/c1875e8c7b5ab9ef38a20be26e8ceeff to your computer and use it in GitHub Desktop.
branch gbps
master 5.23
master 5.44
master 3.24
master 3.23
master 5.84
master 5.60
master 5.65
master 5.82
master 5.75
master 4.67
master 5.09
master 4.71
master 5.29
master 5.36
master 5.00
master 5.41
master 4.93
master 5.29
master 5.23
master 5.68
master 4.82
master 5.56
master 2.48
master 5.46
master 5.03
master 5.41
master 5.61
master 4.73
master 5.30
master 4.87
master 5.57
master 5.48
master 5.89
master 5.18
master 5.50
master 6.02
master 5.91
master 5.58
master 4.93
master 2.31
master 4.40
master 5.31
master 4.43
master 5.64
master 4.63
master 5.61
master 4.92
master 5.52
master 4.58
master 5.29
next 4.56
next 4.93
next 4.79
next 4.48
next 4.45
next 4.26
next 4.66
next 4.51
next 4.81
next 3.68
next 5.05
next 4.91
next 4.27
next 4.33
next 4.44
next 4.72
next 5.03
next 4.76
next 4.48
next 3.84
next 4.55
next 3.66
next 4.63
next 4.45
next 4.64
next 5.18
next 4.34
next 4.67
next 4.11
next 4.47
next 4.91
next 4.72
next 4.74
next 4.55
next 4.30
next 2.10
next 4.33
next 4.38
next 5.03
next 5.26
next 4.62
next 4.34
next 4.17
next 4.68
next 5.37
next 4.73
next 4.98
next 4.38
next 5.37
next 5.03
next1024 4.840000
next1024 4.850000
next1024 5.740000
next1024 5.290000
next1024 5.130000
next1024 5.030000
next1024 5.450000
next1024 5.430000
next1024 4.350000
next1024 4.870000
next1024 5.080000
next1024 4.010000
next1024 4.890000
next1024 5.120000
next1024 4.930000
next1024 5.170000
next1024 5.050000
next1024 4.900000
next1024 5.470000
next1024 4.300000
next1024 4.720000
next1024 4.540000
next1024 3.050000
next1024 4.970000
next1024 5.780000
next1024 5.640000
next1024 5.140000
next1024 3.710000
next1024 4.410000
next1024 5.060000
next1024 4.440000
next1024 4.600000
next1024 5.140000
next1024 4.750000
next1024 5.170000
next1024 4.550000
next1024 5.900000
next1024 4.550000
next1024 4.440000
next1024 4.610000
next1024 4.480000
next1024 5.470000
next1024 5.210000
next1024 4.280000
next1024 5.040000
next1024 4.620000
next1024 5.350000
next1024 5.940000
next1024 4.380000
next1024 4.380000
newpkt 5.87
newpkt 5.36
newpkt 5.95
newpkt 5.05
newpkt 5.00
newpkt 4.82
newpkt 5.41
newpkt 4.88
newpkt 5.85
newpkt 5.16
newpkt 5.10
newpkt 5.42
newpkt 5.56
newpkt 5.46
newpkt 4.48
newpkt 4.74
newpkt 5.99
newpkt 5.95
newpkt 4.45
newpkt 5.57
newpkt 5.20
newpkt 6.17
newpkt 5.08
newpkt 4.98
newpkt 5.02
newpkt 4.28
newpkt 4.84
newpkt 4.45
newpkt 5.07
newpkt 3.44
newpkt 6.06
newpkt 5.88
newpkt 4.95
newpkt 4.92
newpkt 4.83
newpkt 5.26
newpkt 5.20
newpkt 5.38
newpkt 4.54
newpkt 5.74
newpkt 3.47
newpkt 5.48
newpkt 5.40
newpkt 4.37
newpkt 5.65
newpkt 5.47
newpkt 4.92
newpkt 5.93
newpkt 6.03
newpkt 5.02
newcksum 5.73
newcksum 5.02
newcksum 5.42
newcksum 5.49
newcksum 4.74
newcksum 4.49
newcksum 5.31
newcksum 5.03
newcksum 5.22
newcksum 4.90
newcksum 5.34
newcksum 4.77
newcksum 5.32
newcksum 5.39
newcksum 5.39
newcksum 5.04
newcksum 5.39
newcksum 4.55
newcksum 4.34
newcksum 4.74
newcksum 4.92
newcksum 5.70
newcksum 4.95
newcksum 5.45
newcksum 4.99
newcksum 4.91
newcksum 4.73
newcksum 4.89
newcksum 5.12
newcksum 5.15
newcksum 4.70
newcksum 4.82
newcksum 5.25
newcksum 4.88
newcksum 4.89
newcksum 5.28
newcksum 4.85
newcksum 4.99
newcksum 5.00
newcksum 4.67
newcksum 5.07
newcksum 5.64
newcksum 4.61
newcksum 5.34
newcksum 2.68
newcksum 5.22
newcksum 4.94
newcksum 4.67
newcksum 5.04
newcksum 5.64
{ pkgs ? (import <nixpkgs> {})}:
with pkgs;
let
template = pkgs.writeText "template.Rmd" ''
# iperf-1500 inter-branch comparison
This [Rmarkdown](http://rmarkdown.rstudio.com/) document presents
comparative `iperf-1500` benchmark scores for a few branches:
- `master` is the v2016.04 release.
- `next` is the first release candidate for `v2016.05`
- `next1024` is the second release candiate for `v2016.05`.
- `newpkt` is a variation on the `struct packet` layout.
- `newcksum` is with a new checksum implementation merged.
These results were measured by manually running the `iperf-1500`
benchmark on each branch 50 times. This was done because SnabbBot had
suggested the results were suspicious.
This is the R code to load the data for processing:
```{r}
library("ggplot2")
d <- read.csv(file="${./data.csv}", head=TRUE, sep=",")
df <- as.data.frame(d)
```
## Visual comparison
Here is a visual summary of the performance of each tested branch. There are three visualizations overlayed for each branch:
- A black dot marks the average ([arithmetic mean](https://en.wikipedia.org/wiki/Arithmetic_mean)).
- A [scatter plot](https://en.wikipedia.org/wiki/Scatter_plot) shows each individual result.
- A [violin plot](https://en.wikipedia.org/wiki/Violin_plot) suggests the distribution of results and how common each result is.
The scale has been chosen to suit the specific benchmark. This is running `iperf` between two VMs with MTU=1500 on a 1.8GHz Ivy Bridge CPU. The ideal results would be consistently above 10 Gbps.
```{r}
p <- ggplot(df, aes(branch, gbps))
p <- p + expand_limits(y=0) + expand_limits(y=10)
p <- p + ggtitle("iperf MTU=1500")
p <- p + geom_violin()
p <- p + geom_jitter(color="blue", alpha=0.5)
p <- p + stat_summary(fun.data=mean_se)
p <- p + scale_y_continuous(breaks = seq(from=0, to=10, by=1), minor_breaks = NULL)
p
```
One interpretation of these results:
1. The results are far below the target of 10 Gbps. This is something that we have accepted for slow Ivy Bridge processors but it is very striking.
2. The results vary for unknown reasons. Why do we not see the same result for the same code every time?
3. The `next` branch seems to have a performance limit below the `master` branch. This does not seem to be true of the `next1024` branch (though the variation makes it hard to be entirely certain).
## Summary by branch
```{r}
by(df, df["branch"], summary)
```
## Tukey's Test
This [Tukey's Test](https://en.wikipedia.org/wiki/Tukey%27s_range_test) compares the averages for the results and provides a 95% confidence interval to account for variation.
```{r}
TukeyHSD(aov(gbps ~ branch, data=df))
```
'';
in {
sample = pkgs.runCommand "rmarkdown-example" { buildInputs = [ rPackages.rmarkdown rPackages.ggplot2 R pandoc which ]; } ''
cp ${template} template.Rmd
echo "library(rmarkdown);render('template.Rmd')" | R --no-save
mkdir -p $out/nix-support
cp template.html $out
echo "file HTML $out/template.html" >> $out/nix-support/hydra-build-products;
'';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment