hatoo / oha

Ohayou(おはよう), HTTP load generator, inspired by rakyll/hey with tui animation.
MIT License
5.48k stars 138 forks source link

(Question) What does `--latency-correction` do? #211

Open Vanav opened 1 year ago

Vanav commented 1 year ago

Test result without --latency-correction:

# ./oha -c 10 -t 5s -z 30s -q 10 --disable-keepalive https://example.com
Summary:
  Success rate: 1.0000
  Total:        30.0055 secs
  Slowest:      2.8308 secs
  Fastest:      0.7532 secs
  Average:      1.9747 secs
  Requests/sec: 5.5323

  Total data:   8.44 MiB
  Size/request: 52.06 KiB
  Size/sec:     288.00 KiB

Response time histogram:
  0.753 [1]  |
  0.961 [2]  |■
  1.169 [1]  |
  1.376 [3]  |■■
  1.584 [7]  |■■■■■
  1.792 [34] |■■■■■■■■■■■■■■■■■■■■■■■■
  2.000 [44] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2.208 [34] |■■■■■■■■■■■■■■■■■■■■■■■■
  2.415 [23] |■■■■■■■■■■■■■■■■
  2.623 [8]  |■■■■■
  2.831 [9]  |■■■■■■

Latency distribution:
  10% in 1.6346 secs
  25% in 1.7788 secs
  50% in 1.9448 secs
  75% in 2.2062 secs
  90% in 2.4187 secs
  95% in 2.6259 secs
  99% in 2.7707 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.1100 secs, 0.0893 secs, 0.1347 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0009 secs

Status code distribution:
  [200] 166 responses

Results looks correct. I've checked server log, and response times are correctly reported.

Test result with --latency-correction as recommended:

# ./oha -c 10 -t 5s -z 30s -q 10 --latency-correction --disable-keepalive https://example.com
Summary:
  Success rate: 1.0000
  Total:        30.0014 secs
  Slowest:      31.7295 secs
  Fastest:      0.6359 secs
  Average:      16.3581 secs
  Requests/sec: 10.0329

  Total data:   15.30 MiB
  Size/request: 52.06 KiB
  Size/sec:     522.29 KiB

Response time histogram:
  0.636 [1]  |
  3.745 [28] |■■■■■■■■■■■■■■■■■■■■■■■■■■
  6.855 [32] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  9.964 [23] |■■■■■■■■■■■■■■■■■■■■■
  13.073 [33] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  16.183 [34] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  19.292 [28] |■■■■■■■■■■■■■■■■■■■■■■■■■■
  22.401 [32] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  25.511 [27] |■■■■■■■■■■■■■■■■■■■■■■■■■
  28.620 [33] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  31.729 [30] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■

Latency distribution:
  10% in 3.8071 secs
  25% in 8.8877 secs
  50% in 16.0519 secs
  75% in 24.4555 secs
  90% in 28.5860 secs
  95% in 29.9808 secs
  99% in 31.3885 secs

Details (average, fastest, slowest):
  DNS+dialup:   14.4690 secs, 0.0922 secs, 29.5267 secs
  DNS-lookup:   14.3596 secs, 0.0019 secs, 29.4168 secs

Status code distribution:
  [200] 301 responses

Test was twice longer than requested (60 s instead of 30 s), "Requests/sec" is incorrect: test lasted 60 s instead of 30 s, made 301 requests (correct), so it is 5 requests per second (confirmed by server logs). And response times are incorrect compared to server logs (response times were are the same as in previous test).

hatoo commented 1 year ago

Thanks for the issue!

Test was twice longer than requested (60 s instead of 30 s), "Requests/sec" is incorrect: test lasted 60 s instead of 30 s, made 301 requests (correct), so it is 5 requests per second (confirmed by server logs).

I see the test lasted for 30 s because the log shows Total: 30.0014 secs. How did you measure the time to take the test?

And response times are incorrect compared to server logs (response times were are the same as in previous test).

--latency-correction simulates a user sending requests -q qps even when a user can't receive responses at that rate. So if the results show a longer response time than the server log, it's OK because a log is started by when the user wants to connect (not actually connected).

I've found that in --latency-correction the DNS+dialup and DNS-lookup become incorrect. I'll fix it.

Vanav commented 1 year ago

I see the test lasted for 30 s because the log shows Total: 30.0014 secs. How did you measure the time to take the test?

  1. First line of tui shows strange: 60 s / 30 s — counting after it should stop
  2. Logs on server: first line on 06:29:18, last line on 06:30:19

From server logs I got the same response times in both tests. So I still don't get why reported stats are different.

hatoo commented 1 year ago

@Vanav I've fixed the duration of a test. Could you check it with the master branch?

thukabjj commented 6 days ago

@hatoo once you've fixed this issue a log time ago and you did not receive the feedback from @Vanav I do believe that you should closed it, what do you think? I am just recommend it, because I like to see the most updates issues to see if is there any opportunity that I can contribute. Although, it's just a suggestion