You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
To reproduce I tested with wrk2, Nighthawk, and Fortio in similar command-line configurations directly against the test server (nginx server serving static content) and via Envoy & HAProxy. Second, we run them via Envoy proxying to the same nginx server. We use a single thread/process for both client and server to simplify reasoning. We use taskset to confine and isolate processes to a single cpu code for improved accuracy (and simplified reasoning). Wrk2 and Fortio seem to have trouble delivering the required sub-ms accuracy, so I feel it is worth giving Nighthawk a spin.
Preliminary conclusion
In the earlier tests performed in this issue, it may be worth following benchmark best-practices and repeat the tests [1]. It's surely worth giving nighthawk a spin as it's different processing model and way of ensuring precise request-release timings helps producing accurate sub-ms measurements. Also, it may be a good idea to use nginx or Envoy's direct-response capability to git rid of benchmark noise caused by garbage-collection. For best interpretation, it would also be good to know what precisely gets measured: are we including or excluding test-connection setup timings in wrk2/fortio?
First it may be a good idea to use wrk2 instead of wrk as it claims enhanced accuracy.
Furthermore, since in test we'll be observing sub-millisecond response times, it is worth noting the following comment from wrk's readme:
It is important to note that in wrk2's current constant-throughput implementation, measured latencies are [only] accurate to a +/- ~1 msec granularity, due to OS sleep time behavior.
It's also worth noting that running nighthawk through HAProxy results in 10's of occurences of:
Test origin is nginx serving lorem-ipsum static content.
➜ curl -v 127.0.0.1
* Rebuilt URL to: 127.0.0.1/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.14.0 (Ubuntu)
< Date: Tue, 16 Apr 2019 13:40:24 GMT
< Content-Type: text/html
< Content-Length: 3449
< Last-Modified: Mon, 01 Apr 2019 11:00:16 GMT
< Connection: keep-alive
< ETag: "5ca1ef40-d79"
< Accept-Ranges: bytes
<
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mauris felis, egestas eget turpis nec, ullamcorper laoreet magna. Donec ac condimentum lacus, nec semper eros. Sed iaculis arcu vitae egestas viverra. Nulla tempor, neque tempus tincidunt fermentum, orci nunc sagittis nisl, sed dapibus nunc ex sit amet justo. Ut porta pellentesque mi quis lobortis. Integer luctus, diam et mattis rhoncus, lacus orci condimentum tortor, vitae venenatis ante odio non massa. Duis ut nulla consectetur, elementum enim eu, maximus lacus. Ut id consequat libero. Mauris eget lorem et lorem iaculis laoreet a nec augue. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas ac cursus eros, ut eleifend lacus. Nam sit amet mauris nec mi luctus posuere. Phasellus ullamcorper vulputate purus sit amet dapibus. Mauris sit amet magna risus.
Sed venenatis nulla non massa tempus consectetur. In eu suscipit mi, auctor faucibus augue. Phasellus blandit sagittis urna sed semper. Maecenas sem purus, laoreet gravida pretium non, malesuada vitae felis. Nam laoreet nisi non ipsum tincidunt facilisis. Donec ultrices a elit vel aliquam. Duis et diam eu urna ultrices dictum. Etiam non nulla eu velit feugiat ultrices ac vitae orci. In id posuere magna, vitae vulputate lectus. Vestibulum consectetur luctus neque ut cursus. Aliquam vel dapibus sem, vel rhoncus elit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In consequat ipsum arcu, eget ultricies tellus finibus id.
Nam scelerisque viverra fermentum. Vivamus vitae tincidunt mauris. Cras id pretium lectus. Nunc ut leo vitae ligula dictum pretium. Proin et laoreet massa, sed pharetra ex. Nam nec pellentesque magna. Quisque lectus metus, ultrices eget nunc ac, blandit malesuada nulla. Nullam justo elit, eleifend eget elementum nec, convallis eu massa. Curabitur rhoncus pretium lorem et commodo. Morbi tincidunt lectus ut sodales pellentesque. Ut varius purus eget nunc ultricies congue.
Aliquam posuere blandit mollis. Integer quis sollicitudin mi. Integer ac lobortis felis. Maecenas a molestie libero, vitae rhoncus lacus. Phasellus est nunc, faucibus facilisis velit in, lobortis faucibus neque. Sed varius faucibus tristique. Sed maximus libero justo, sit amet laoreet orci feugiat eget. Pellentesque aliquet enim ut facilisis vestibulum. In lacinia malesuada quam, vitae aliquet arcu pretium eu. Aliquam cursus facilisis feugiat. Fusce eu orci ornare, tempus purus ac, commodo leo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tempus elit eget pretium volutpat. Sed tincidunt dapibus tortor at blandit.
Suspendisse vitae cursus elit. Sed pretium leo diam, ac semper nunc faucibus id. Sed pharetra, magna facilisis iaculis efficitur, nisl tortor vestibulum metus, id ultricies turpis arcu et odio. Suspendisse fringilla semper tincidunt. Cras at justo congue orci sodales efficitur. Donec quis sem ut dui efficitur faucibus. Pellentesque dapibus lacinia elit, sit amet volutpat velit gravida lobortis. Sed at purus eros. Pellentesque sodales, nulla at tincidunt placerat, massa metus facilisis nibh, non posuere ipsum metus a nisl. Duis nibh urna, laoreet quis interdum sed, tempor vel risus. Fusce tincidunt felis quis tincidunt luctus. Mauris vehicula ipsum magna, sed placerat ligula feugiat in. Curabitur pretium arcu magna, nec iaculis massa fermentum a.
* Connection #0 to host 127.0.0.1 left intact