keithw/remy — pull request #17 by anirudhSK (2014-01-01 23:58:34+00:00)
Title: New features

Hopefully this is easy enough to merge because it's stacked in a way that hopefully tells a nice story :)

1. Finite link buffers.
2. Packet sequence numbers.
3. Loss resilience.
4. Aimd (TCP NewReno-like) sender.
5. ByteBased Traffic generator.
6. Multiple sender classes.
7. Slower EWMA.
8. Improvements to rat-breeder.
9. Now links against jemalloc.

I think simply setting datasize to 3/4 should be sufficient to pick between not using vs. using slow EWMA at compile time. datasize is used only for optimizing the whiskers (and nowhere else), so there is no point creating a separate datasize or boolean array. I haven't exhaustively tested this, but here's an exhaustive dry run of 6 cases:

1. We start with a default WhiskerTree and optimize without slowewma: It will not bisect along the slow EWMA axis, and hence the final WhiskerTree will have 0, 163840 as the slowewma domain, which is equivalent to not having it.
2. We start with a default WhiskerTree and optimize with SlowEwma: Works like it has so far.
3. We take an old rat without slowewma and re-optimize it without slowewma: The old rat's slowewma axis will get extended to [0-163840] and the optimization will leave that untouched (because it won't bisect it).
4. We take an old rat without slowewma and re-optimize with slowewma: The slowewma axis will start from 0-163840 and then get bisected.
5. We take a new rat and re-optimize it without slowewma (highly unlikely): This alone will break because the slowewma axis will be untouched and a subsequent run of rat-runner will not know how to ignore it because there is a slowewma axis that is already present in the DNA.
6. Re-optimize new rat with slowewma: Works as usual.