Hi Tristan,

I actually read your thread a few times last night. It was helpful, but I 
couldn't isolate anything I was seeing to match what you're seeing (but it's 
entirely likely there could be overlap!).

> Out of curiosity, what version of HAProxy are you running?

We're currently running latest 2.8.3, compiled with quictls 1.1.1.

> I don’t have a magic answer but in 
> https://github.com/haproxy/haproxy/issues/2095#issuecomment-1570547484 we’ve 
> been looking at performance issues with H3/QUIC over time, and there’s a 
> couple of workarounds currently relevant (~ from the comment linked), notably 
> to use a short timeout connect (currently using 500ms here), and to comment 
> out timeout client-fin.

That looks interesting. Our current timeout values are:

 # connect [to a backend server]
 timeout connect      12400ms
 # wait for a full request [from a client]
 timeout http-request 9300ms
 # wait for any data from the server (time to first byte/header)
 timeout server          60s
 # wait for the client (keep-alive for h1.1, client for h1.1 & h2)
 timeout http-keep-alive 15m
 timeout client          15m

Which would also apply to H2 & H/1.1, so I'm hesitant to modify them too 
significantly.

> I see you explicitly set per-connection socket ownership, which is definitely 
> the right thing to do, but you should check that it is actually working « for 
> real » and not silently disabled due to permissions somewhere inside the 
> worker processes.
> To do that, have a look at the output of ‘show fd’ and check that H3 conns 
> aren’t all with fd=-1 (instead it should be a different positive fd number 
> per H3 conn)

That's really good advice—I almost tried setcap last night, but assumed it 
would throw errors if it wasn't working…I'll try that next.

https://jsfiddle.net/vqn3sea7/show
Here's the JSFiddle. I can consistently trigger it in Safari on iOS by zooming 
in a few times and then swiping around fairly quickly (ends up queueing a lot 
of requests and eventually hanging forever.

Thanks for the help! I'll see what I can turn up…

Best,
Luke

—
Luke Seelenbinder
Stadia Maps | Founder & CEO
stadiamaps.com

> On Sep 22, 2023, at 14:56, Tristan <tris...@mangadex.org> wrote:
> 
> Hi Luke,
> 
>> Under some conditions (especially high request rate), H3 connections simply 
>> stall. This appears to be more prevalent in some browsers than others 
>> (Safari on iOS is the worst offender), and appears to coincide with high 
>> packet_loss in `show quic`.
> 
> 
> Out of curiosity, what version of HAProxy are you running?
> 
> I don’t have a magic answer but in 
> https://github.com/haproxy/haproxy/issues/2095#issuecomment-1570547484 we’ve 
> been looking at performance issues with H3/QUIC over time, and there’s a 
> couple of workarounds currently relevant (~ from the comment linked), notably 
> to use a short timeout connect (currently using 500ms here), and to comment 
> out timeout client-fin.
> 
> I see you explicitly set per-connection socket ownership, which is definitely 
> the right thing to do, but you should check that it is actually working « for 
> real » and not silently disabled due to permissions somewhere inside the 
> worker processes.
> To do that, have a look at the output of ‘show fd’ and check that H3 conns 
> aren’t all with fd=-1 (instead it should be a different positive fd number 
> per H3 conn)
> 
> I’d definitely like to see the JSFiddle if there’s a trick to the kind of 
> request affected to see if I can reproduce it on our nodes.
> 
> Regards,
> Tristan 

Reply via email to