hatoo / hatoo/oha

HTTP/3 very slow

Open
#835 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
10.5k
Forks
298
Avg merge
4h 20m
Merged PRs (30d)
5

Description

I was looking at using oha to run some load tests with HTTP/3, but I found the request rate seems to be very low for the same URL using http2 vs http3.

On M1 Macbook Pro, after `cargo install --features http3 oha`
```
❯ oha --version
oha 1.12.1
❯ oha --http-version 2 https://www.google.com --output-format json --no-tui -z 5s
{
"summary": {
"successRate": 1.0,
"total": 5.006699625,
"slowest": 1.1751909170000001,
"fastest": 0.244194458,
"average": 0.4514453835295238,
"requestsPerSec": 114.84611481960033,
"totalData": 1886846,
"sizePerRequest": 3593,
"sizePerSec": 376864.2301963541
},
"latencyPercentiles": {
"p10": 0.300358958,
"p25": 0.336630375,
"p50": 0.411378375,
"p75": 0.511191792,
"p90": 0.676943,
"p95": 0.79763875,
"p99": 1.01387975,
"p99.9": 1.1751909170000001,
"p99.99": 1.1751909170000001
},
"statusCodeDistribution": {
"200": 193,
"302": 332
},
}

❯ oha --http-version 3 https://www.google.com --output-format json --no-tui -z 5s
{
"summary": {
"successRate": 1.0,
"total": 35.060763417,
"slowest": 1.198709834,
"fastest": 0.24654925,
"average": 0.42182671901604263,
"requestsPerSec": 17.42688807807713,
"totalData": 1748157,
"sizePerRequest": 3116,
"sizePerSec": 49860.779675789
},
"latencyPercentiles": {
"p10": 0.2904625,
"p25": 0.330885209,
"p50": 0.388051417,
"p75": 0.493884125,
"p90": 0.549086292,
"p95": 0.682034583,
"p99": 0.944012625,
"p99.9": 1.198709834,
"p99.99": 1.198709834
},
"statusCodeDistribution": {
"200": 163,
"302": 398
},
}
```

Naturally, google.com is not a good URL to run a load test against, but the status code distributions seem similar for both so I don't think that is itself an issue, and I see similar behavior to an internal test I am running using Envoy. I would expect HTTP2 vs 3 to perform similarly to each other, but here we see 10x less rate for HTTP/3. The latencies, while looking higher on HTTP/3, don't seem dramatically different, so this makes me think there may be some hanging outside of request processing? Note the total duration, which is 35s instead of the requested 5s.

I understand HTTP/3 support here is new and experimental so not a huge priority to fix this, but wanted to make sure it's been shared. Perhaps it's just missing cleanup logic per request.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.