giltene / wrk2

A constant throughput, correct latency recording variant of wrk
Apache License 2.0
4.28k stars 395 forks source link

Catch up with upstream wrk #77

Open giltene opened 5 years ago

giltene commented 5 years ago

wrk2 was created in Nov. 2014 as an example of correcting coordinated omission in a load generator. It was basically a quick fork of wrk at the time, with minimal changes needed to achieve the purpose, created by @giletene and @mikeb01 as a result of a quick conversation at QCon SF.

The project turned out to be way more popular than I thought, or than originally intended. Wrk seems like a very solid base, but people looking for constant-rate capabilities and proper (not susceptible to coordinated omission) latency measurement seem to have picked up wrk2.

But since we had not put any real work into maintaining or enhancing wrk2 over the years, I'm sure wrk has added quite a bit in the 5 years since that we should simply "catch up on".

One simple way to do this is to follow Vizzini's directive and "go back to the beginning". Since applying the changes to wrk 5 years ago was "fairly simple" and since we had not strayed very far from the original work done in 2014, we can just pick up the latest/greatest wrk2, and apply the same logical changes to it that we did back then, to get an "up to date" wrk2 with all the wrk goodies. It took me and @mikeb01 only a few days to do it the first time, and applying it again "should" be even shorter... ;-)

I would prefer that we do this before starting to add any new features from PRs that have accumulated over the years, and any new features we want to add that are wrk2-specific (e.g. I'd really like to add a .hlog output support, which has long been part of hdrhistogram_c). Once we apply those PRs and additions, catching up with wrk will involve much more work...

Does anyone out there want to volunteer to do this "catch up to latest wrk" work?

jonrichards commented 5 years ago

@giltene I’ll start taking a look at doing this. I agree this a good approach.

giltene commented 5 years ago

Looking at the places where wrk2 differs from files that actually existed in wrk 4.0.1, this is the list:

Files wrk2/.gitignore and wrk-4.0.1/.gitignore differ Files wrk2/LICENSE and wrk-4.0.1/LICENSE differ Files wrk2/Makefile and wrk-4.0.1/Makefile differ Files wrk2/NOTICE and wrk-4.0.1/NOTICE differ Files wrk2/src/config.h and wrk-4.0.1/src/config.h differ Files wrk2/src/main.h and wrk-4.0.1/src/main.h differ Files wrk2/src/net.c and wrk-4.0.1/src/net.c differ Files wrk2/src/net.h and wrk-4.0.1/src/net.h differ Files wrk2/src/script.c and wrk-4.0.1/src/script.c differ Files wrk2/src/ssl.c and wrk-4.0.1/src/ssl.c differ Files wrk2/src/ssl.h and wrk-4.0.1/src/ssl.h differ Files wrk2/src/stats.c and wrk-4.0.1/src/stats.c differ Files wrk2/src/stats.h and wrk-4.0.1/src/stats.h differ Files wrk2/src/wrk.c and wrk-4.0.1/src/wrk.c differ Files wrk2/src/wrk.h and wrk-4.0.1/src/wrk.h differ

Seems very approachable.

jonrichards commented 5 years ago

I wanted to give a quick update that I have started on this. It might take me more than a few days ;-) but I'll update if I run into any issues.

jonrichards commented 5 years ago

I have a WIP going here: https://github.com/giltene/wrk2/pull/79. It's building on Linux, but not for macOS. I have a Mac available to me, so I'll look into that in the next few days.