*hi all,*
*    recently we are ready to upgrade to haproxy 1.8,however, when testing
HTTP2, we found a drop in performance,below is the test scenario:*
*     haproxy version:*

     HA-Proxy version 1.8.3-205f675 2017/12/30
     Copyright 2000-2017 Willy Tarreau <[email protected]>

     Build options :
           TARGET  = linux2628
            CPU     = generic
            CC      = gcc
            CFLAGS  = -O2 -g -fno-strict-aliasing
-Wdeclaration-after-statement -fwrapv -Wno-unused-label
            OPTIONS = USE_OPENSSL=1

      Default settings :
            maxconn = 2000, bufsize = 16384, maxrewrite = 1024,
maxpollevents = 200
            Built with OpenSSL version : OpenSSL 1.0.2g  1 Mar 2016
            Running on OpenSSL version : OpenSSL 1.0.2g  1 Mar 2016
            OpenSSL library supports TLS extensions : yes
            OpenSSL library supports SNI : yes
            OpenSSL library supports : SSLv3 TLSv1.0 TLSv1.1 TLSv1.2
            Built with transparent proxy support using: IP_TRANSPARENT
IPV6_TRANSPARENT IP_FREEBIND
            Encrypted password support via crypt(3): yes
            Built with multi-threading support.
            Built without PCRE or PCRE2 support (using libc's regex instead)
            Built without compression support (neither USE_ZLIB nor USE_SLZ
are set).
            Compression algorithms supported : identity("identity")
            Built with network namespace support.

*     haproxy config:*

     global
          chroot /var/lib/haproxy
          stats socket /run/haproxy/admin.sock mode 660 level admin
          stats timeout 10s
          user haproxy
          group haproxy
          maxconn 81920
          daemon
          tune.ssl.default-dh-param  2048
          ssl-default-bind-options no-sslv3
          ssl-default-bind-ciphers HIGH:!aNULL:!MD5:!ADH:!RC4
          tune.ssl.lifetime 600s
          tune.ssl.maxrecord 1500
          tune.ssl.cachesize 20m
          nbproc 1
          tune.h2.max-concurrent-streams 500

     defaults
          maxconn 81920
          option clitcpka
          option srvtcpka
          option log-health-checks
          option splice-auto
          option http-keep-alive
          option redispatch
          no option http-buffer-request
          timeout http-keep-alive 90s
          backlog 8192
          timeout connect 4000
          timeout queue 90s
          timeout check 5s
          timeout client-fin 90s
          timeout server-fin 90s
          monitor-net 10.185.3.117/32
          errorfile 400 /etc/haproxy/errors/400.http
          errorfile 403 /etc/haproxy/errors/403.http
          errorfile 408 /etc/haproxy/errors/408.http
          errorfile 500 /etc/haproxy/errors/500.http
          errorfile 503 /etc/haproxy/errors/503.http
          errorfile 504 /etc/haproxy/errors/504.http

     backend 1999_8c78604d-287a-4f95-b216-40a568f06b77
          option tcp-check
          timeout check 2000
          timeout server 90s
          balance roundrobin
          mode http
          option httplog
          no option splice-auto
          server backserver-group-ins:10.172.114.50:000_8888
10.172.114.50:8888   check inter 5000 rise 2 fall 5    weight 100
          server backserver-group-ins:10.172.114.49:000_8888
10.172.114.49:8888   check inter 5000 rise 2 fall 5    weight 100

     frontend 1999_da24bbd3-00b5-45ef-8bf4-32d05d417818
          timeout client 90s
          mode http
          option dontlognull
          no option splice-auto
          bind :1999 mss 1360 ssl crt /etc/ssl/xip.io/xip.io.pem alpn h2
npn h2,http/1.1

          acl host_acl_0 hdr_reg(host) -i   ^.*$
          acl path_acl_0_0   path_reg  -i /
          use_backend 1999_8c78604d-287a-4f95-b216-40a568f06b77 if
host_acl_0  path_acl_0_0

*Use h2load test, respectively, test http1.1 and http2, A total of three
sets of data,haproxy reached cpu 100%,*
*         group 1:*

          h2load -n1000000 -c20 -m5 https://$0.172.144.113:1999/128

          starting benchmark...
          spawning thread #0: 20 total client(s). 1000000 total requests
          TLS Protocol: TLSv1.2
          Cipher: ECDHE-RSA-AES256-GCM-SHA384
          Application protocol: h2
          ......

          finished in 86.23s, 11596.77 req/s, 2.90MB/s
          requests: 1000000 total, 1000000 started, 1000000 done, 1000000
succeeded, 0 failed, 0              errored, 0 timeout
          status codes: 1000000 2xx, 0 3xx, 0 4xx, 0 5xx


         *group2:*

          h2load -n1000000 -c20 -m1 https://10.172.144.113:1999/128 --h1
          starting benchmark...
          spawning thread #0: 20 total client(s). 1000000 total requests
          TLS Protocol: TLSv1.2
          Cipher: ECDHE-RSA-AES256-GCM-SHA384
          Application protocol: http/1.1
          ......

          finished in 73.72s, 13564.36 req/s, 4.42MB/s
          requests: 1000000 total, 1000000 started, 1000000 done, 1000000
succeeded, 0 failed, 0              errored, 0 timeout
          status codes: 1000000 2xx, 0 3xx, 0 4xx, 0 5xx


          * group3:*

           h2load -n1000000 -c100 -m1 https://10.172.144.113:1999/128 --h1
           starting benchmark...
           spawning thread #0: 100 total client(s). 1000000 total requests
           TLS Protocol: TLSv1.2
           Cipher: ECDHE-RSA-AES256-GCM-SHA384
           Application protocol: http/1.1
           ......

           finished in 67.84s, 14739.69 req/s, 4.81MB/s
           requests: 1000000 total, 1000000 started, 1000000 done, 1000000
succeeded, 0 failed, 0              errored, 0 timeout
           status codes: 1000000 2xx, 0 3xx, 0 4xx, 0 5xx

*Is this phenomenon normal? Or my way of using is wrong?*

Reply via email to