-
Notifications
You must be signed in to change notification settings - Fork 642
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
Wrk stats script ex #183
Wrk stats script ex #183
Conversation
As well as added some error handling that the other servers do not do.
And for note, this is not necessarily for inclusion, just an example that people can play with if a proper |
f5dbdbf
to
80b7718
Compare
@OvermindDL1 what do you think of https://github.com/giltene/wrk2 ? |
Hmm, never heard of |
@OvermindDL1 the fact is that there is a lot of different functionnalities on the two projects, I'll ask on wrk2 gitter chanel. Also, do you heard of vegeta (go tool) or bombardier ? |
Not heard of vegeta, and I tried bombardier once as I recall but I remembered it not being able to send enough throughput out and wasn't able to saturate the server at the time compared to |
@OvermindDL1 perhaps, a little comparison of these tools should be decided 😎 @tbrand What do you think ? |
A Benchmark Benchmark! ^.^ |
@OvermindDL1 seems that results are varying depending on |
Mostly to minimize the time that I spent on it. I found that a short duration had no difference to a long duration in non-GC languages (C++/Rust/Etc..) so I kept it to 3 seconds. GC languages and JIT languages needed more but even then I saw almost no variance regardless. The thread count was just based on experimentation of me testing from 1 to core-count threads and picking the highest overall performing value, which was the default calculation I put in my script. I.E. just testing, not special in any way. |
@OvermindDL1 @tbrand I had open a specific issue #238 to debate about what to display |
The simple elixir-script I'd been using to automate
wrk
benchmark testing. It is not at all prettied up and the code is pretty organic as it 'grew' over time rather than being designed for this purpose.Basic usage:
An example session:
╰─➤ tools/stats.exs -w 1 -d 3 evhtp mofuw router_cr
Total Cores: 16
Concurrent Connections: 1000
Threads: 10
Warmup: 1 seconds
Duration: 3 seconds
Processing servers:
Processing: bin/server_cpp_evhtp
Processing: bin/server_nim_mofuw
Processing: bin/server_crystal_router_cr
Rankings
Ranking by Average Requests per second:
To replicate the current single-core benchmarker, you can just set threads to
1
, but why you would do that when every server everywhere has many cores makes no sense and will not saturate really any of the servers and will not test their locking and communication methodologies or anything of the sort, but if you really really wanted to for whatever reason:╰─➤ tools/stats.exs -w 1 -d 3 -t 1 evhtp mofuw router_cr fasthttp
Total Cores: 16
Concurrent Connections: 1000
Threads: 1
Warmup: 1 seconds
Duration: 3 seconds
Processing servers:
Processing: bin/server_cpp_evhtp
Processing: bin/server_nim_mofuw
Processing: bin/server_crystal_router_cr
Processing: bin/server_go_fasthttprouter
Rankings
Ranking by Average Requests per second:
(Just as a cool note, go is using libevent just like evhtp is, except Go's is not performing a full regex path test where evhtp is now doing as implied by tbrand that it should to slow it down for whatever reasons, even though no one would realistically use a regex path splitter when not necessary, as it is not in this case. I could easily make a pure libevent-based HTTP server that has no framework or hooks or anything of the sort that would blow everything else away as tbrand implied that evhtp was already doing without actually checking the library code to see that it was not...)
@waghanza