Hi Simon,


Am 19.08.2016 um 12:41 schrieb k simon:
Hi,List:
Haproxy's throughput is much less than nginx or squid on FreeBSD and it's high cpu usage often. When I investigate it a bit more, I found haproxy does not correctly handle MSS on FreeBSD.

Your kernel decides the segment size of a TCP packet. An TCP application such as haproxy can give hints, like limiting the MSS further, but it definitely does not segment TCP payload. I think your investigation goes in the wrong direction ...



1. When haproxy bind to a physical interface and change net.inet.tcp.mssdflt to a large value. Haproxy will use this value as effective size of outgoing segments and ignore the advertised value.

Do you have tcpdump to show that? If your TCP segments are larger than the negotiated MSS, then its a freebsd kernel bug, not a haproxy one. Its not the applications job to segment TCP packets.



2.When haproxy bind to a loopback interface. The advertised value is 16344, it's correct. But haproxy send irregular segment size.

What's irregular? In your loopback tcpdump capture, I don't see any packets with a segment size larger than 16344, so no irregularity there.



3. MSS option is invalid on FreeBSD.

Again, can you elaborate? What does "invalid" mean?



When path_mtu_discovery=1, it worked as expected.

Haproxy is not aware of this parameter. Your kernel is. Is your CPU usage problem gone with this setting, or do your just don't see any "MSS irregularities" anymore?



Please do elaborate what you think its wrong with haproxy behavior *exactly*, because just saying "invalid/irregular MSS behavior" without specifying what exactly you mean isn't helpful.



Lukas


Reply via email to