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. 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. 2.When haproxy bind to a loopback interface. The advertised value is 16344, it's correct. But haproxy send irregular segment size.
3. MSS option is invalid on FreeBSD.
I'm running haproxy instance inside a vimage jail, and it should act the same as runing on bare box. It's really a serious problem and easily to reproduced.


Regards
Simon






P.S.
1.
FreeBSD ha-l0-j2 10.3-STABLE FreeBSD 10.3-STABLE #0 r303988: Fri Aug 12 16:48:21 CST 2016 root@cache-farm-n2:/usr/obj/usr/src/sys/10-stable-r303988 amd64

2.
HA-Proxy version 1.6.8 2016/08/14
Copyright 2000-2016 Willy Tarreau <wi...@haproxy.org>

Build options :
  TARGET  = freebsd
  CPU     = generic
  CC      = clang37
CFLAGS = -O2 -pipe -fno-omit-frame-pointer -march=corei7 -fno-strict-aliasing -DFREEBSD_PORTS OPTIONS = USE_TPROXY=1 USE_GETADDRINFO=1 USE_ZLIB=1 USE_CPU_AFFINITY=1 USE_REGPARM=1 USE_OPENSSL=1 USE_STATIC_PCRE=1 USE_PCRE_JIT=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200

Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.8
Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with OpenSSL version : OpenSSL 1.0.2h  3 May 2016
Running on OpenSSL version : OpenSSL 1.0.2h  3 May 2016
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.39 2016-06-14
PCRE library supports JIT : yes
Built without Lua support
Built with transparent proxy support using: IP_BINDANY IPV6_BINDANY

Available polling systems :
     kqueue : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use kqueue.



3.
frontend tcp-in
        mode tcp
        bind :1301

frontend virtual-frontend
        mode http
        bind 127.0.0.1:1000 accept-proxy





4.
17:41:36.515924 IP 127.0.0.1.12558 > 127.0.0.1.1000: Flags [S], seq 1769628266, win 65535, options [mss 16344], length 0 17:41:36.515954 IP 127.0.0.1.1000 > 127.0.0.1.12558: Flags [S.], seq 360367860, ack 1769628267, win 65535, options [mss 16344], length 0 17:41:36.515957 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 773322:777418, ack 211, win 65535, length 4096 17:41:36.515985 IP 127.0.0.1.12558 > 127.0.0.1.1000: Flags [.], ack 1, win 65535, length 0 17:41:36.515994 IP 127.0.0.1.12558 > 127.0.0.1.1000: Flags [P.], seq 1:49, ack 1, win 65535, length 48 17:41:36.516001 IP 127.0.0.1.12558 > 127.0.0.1.1000: Flags [P.], seq 49:914, ack 1, win 65535, length 865 17:41:36.516085 IP 127.0.0.1.1000 > 127.0.0.1.12558: Flags [.], ack 914, win 65535, length 0 17:41:36.516095 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 777418:778878, ack 211, win 65535, length 1460 17:41:36.516203 IP 127.0.0.1.12522 > 127.0.0.1.1000: Flags [.], ack 778878, win 65535, length 0 17:41:36.516403 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 778878:784978, ack 211, win 65535, length 6100 17:41:36.516424 IP 127.0.0.1.12556 > 127.0.0.1.1000: Flags [F.], seq 477, ack 274, win 65535, length 0 17:41:36.516435 IP 127.0.0.1.1000 > 127.0.0.1.12556: Flags [.], ack 478, win 65535, length 0 17:41:36.516466 IP 127.0.0.1.1000 > 127.0.0.1.12556: Flags [F.], seq 274, ack 478, win 65535, length 0 17:41:36.516487 IP 127.0.0.1.12556 > 127.0.0.1.1000: Flags [.], ack 275, win 65534, length 0 17:41:36.516515 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 784978:789074, ack 211, win 65535, length 4096 17:41:36.516532 IP 127.0.0.1.12522 > 127.0.0.1.1000: Flags [.], ack 789074, win 65535, length 0 17:41:36.516922 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 789074:790534, ack 211, win 65535, length 1460 17:41:36.516960 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 790534:793170, ack 211, win 65535, length 2636 17:41:36.516971 IP 127.0.0.1.12522 > 127.0.0.1.1000: Flags [.], ack 793170, win 65535, length 0 17:41:36.517270 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 793170:796942, ack 211, win 65535, length 3772 17:41:36.517351 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 796942:798402, ack 211, win 65535, length 1460 17:41:36.517368 IP 127.0.0.1.12522 > 127.0.0.1.1000: Flags [.], ack 798402, win 65535, length 0 17:41:36.517529 IP 127.0.0.1.1000 > 127.0.0.1.12405: Flags [P.], seq 482640:483712, ack 401, win 65535, length 1072 17:41:36.517536 IP 127.0.0.1.12405 > 127.0.0.1.1000: Flags [.], ack 483712, win 65535, length 0 17:41:36.518827 IP 127.0.0.1.1000 > 127.0.0.1.12405: Flags [P.], seq 483712:484784, ack 401, win 65535, length 1072 17:41:36.521168 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 798402:799862, ack 211, win 65535, length 1460 17:41:36.521275 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 799862:801322, ack 211, win 65535, length 1460 17:41:36.521290 IP 127.0.0.1.1000 > 127.0.0.1.12522: Flags [P.], seq 801322:802782, ack 211, win 65535, length 1460

Reply via email to