load testing is somewhat good.
can you describe an overall setup ? (I want to reproduce and play with it)

чт, 4 окт. 2018 г. в 8:16, Krishna Kumar (Engineering) <
krishna...@flipkart.com>:

> Re-sending in case this mail was missed. To summarise the 3 issues seen:
>
> 1. Performance drops 18x with higher number of nbthreads as compared to
> nbprocs.
> 2. CPU utilisation remains at 100% after wrk finishes for 30 seconds (for
> 1.9-dev3
>     for nbprocs and nbthreads).
> 3. Sockets on client remain in FIN-WAIT-2, while on HAProxy it remains in
> either
>      CLOSE-WAIT (towards clients) and ESTAB (towards the backend servers),
> till
>      the server/client timeout expires.
>
> The tests for threads and processes were done on the same systems, so
> there is
> no difference in system parameters.
>
> Thanks,
> - Krishna
>
>
> On Tue, Oct 2, 2018 at 9:18 PM Krishna Kumar (Engineering) <
> krishna...@flipkart.com> wrote:
>
>> Hi Willy, and community developers,
>>
>> I am not sure if I am doing something wrong, but wanted to report
>> some issues that I am seeing. Please let me know if this is a problem.
>>
>> 1. HAProxy system:
>> Kernel: 4.17.13,
>> CPU: 48 core E5-2670 v3
>> Memory: 128GB memory
>> NIC: Mellanox 40g with IRQ pinning
>>
>> 2. Client, 48 core similar to server. Test command line:
>> wrk -c 4800 -t 48 -d 30s http://<IP:80>/128
>>
>> 3. HAProxy version: I am testing both 1.8.14 and 1.9-dev3 (git checkout
>> as of
>>     Oct 2nd).
>> # haproxy-git -vv
>> HA-Proxy version 1.9-dev3 2018/09/29
>> Copyright 2000-2018 Willy Tarreau <wi...@haproxy.org>
>>
>> Build options :
>>   TARGET  = linux2628
>>   CPU     = generic
>>   CC      = gcc
>>   CFLAGS  = -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement
>> -fwrapv -fno-strict-overflow -Wno-unused-label -Wno-sign-compare
>> -Wno-unused-parameter -Wno-old-style-declaration -Wno-ignored-qualifiers
>> -Wno-clobbered -Wno-missing-field-initializers -Wtype-limits
>>   OPTIONS = USE_ZLIB=yes USE_OPENSSL=1 USE_PCRE=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 : 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 with PCRE version : 8.38 2015-11-23
>> Running on PCRE version : 8.38 2015-11-23
>> PCRE library supports JIT : no (USE_PCRE_JIT not set)
>> Built with zlib version : 1.2.8
>> Running on zlib version : 1.2.8
>> Compression algorithms supported : identity("identity"),
>> deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
>> Built with network namespace support.
>>
>> Available polling systems :
>>       epoll : pref=300,  test result OK
>>        poll : pref=200,  test result OK
>>      select : pref=150,  test result OK
>> Total: 3 (3 usable), will use epoll.
>>
>> Available multiplexer protocols :
>> (protocols markes as <default> cannot be specified using 'proto' keyword)
>>               h2 : mode=HTTP       side=FE
>>        <default> : mode=TCP|HTTP   side=FE|BE
>>
>> Available filters :
>> [SPOE] spoe
>> [COMP] compression
>> [TRACE] trace
>>
>> 4. HAProxy results for #processes and #threads
>> #    Threads-RPS Procs-RPS
>> 1 20903 19280
>> 2 46400 51045
>> 4 96587 142801
>> 8 172224 254720
>> 12 210451 437488
>> 16 173034 437375
>> 24 79069 519367
>> 32 55607 586367
>> 48 31739 596148
>>
>> 5. Lock stats for 1.9-dev3: Some write locks on average took a lot more
>> time
>>    to acquire, e.g. "POOL" and "TASK_WQ". For 48 threads, I get:
>> Stats about Lock FD:
>> # write lock  : 143933900
>> # write unlock: 143933895 (-5)
>> # wait time for write     : 11370.245 msec
>> # wait time for write/lock: 78.996 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock TASK_RQ:
>> # write lock  : 2062874
>> # write unlock: 2062875 (1)
>> # wait time for write     : 7820.234 msec
>> # wait time for write/lock: 3790.941 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock TASK_WQ:
>> # write lock  : 2601227
>> # write unlock: 2601227 (0)
>> # wait time for write     : 5019.811 msec
>> # wait time for write/lock: 1929.786 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock POOL:
>> # write lock  : 2823393
>> # write unlock: 2823393 (0)
>> # wait time for write     : 11984.706 msec
>> # wait time for write/lock: 4244.788 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock LISTENER:
>> # write lock  : 184
>> # write unlock: 184 (0)
>> # wait time for write     : 0.011 msec
>> # wait time for write/lock: 60.554 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock PROXY:
>> # write lock  : 291557
>> # write unlock: 291557 (0)
>> # wait time for write     : 109.694 msec
>> # wait time for write/lock: 376.235 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock SERVER:
>> # write lock  : 1188511
>> # write unlock: 1188511 (0)
>> # wait time for write     : 854.171 msec
>> # wait time for write/lock: 718.690 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock LBPRM:
>> # write lock  : 1184709
>> # write unlock: 1184709 (0)
>> # wait time for write     : 778.947 msec
>> # wait time for write/lock: 657.501 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock BUF_WQ:
>> # write lock  : 669247
>> # write unlock: 669247 (0)
>> # wait time for write     : 252.265 msec
>> # wait time for write/lock: 376.939 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock STRMS:
>> # write lock  : 9335
>> # write unlock: 9335 (0)
>> # wait time for write     : 0.910 msec
>> # wait time for write/lock: 97.492 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>> Stats about Lock VARS:
>> # write lock  : 901947
>> # write unlock: 901947 (0)
>> # wait time for write     : 299.224 msec
>> # wait time for write/lock: 331.753 nsec
>> # read lock   : 0
>> # read unlock : 0 (0)
>> # wait time for read      : 0.000 msec
>> # wait time for read/lock : 0.000 nsec
>>
>> 6. CPU utilization after test for processes/threads: haproxy-1.9-dev3 runs
>> at 4800% (48 cpus) for 30 seconds after the test is done. For 1.8.14,
>>         this behavior was not seen. Ran the following command for both:
>> "ss -tnp | awk '{print $1}' | sort | uniq -c | sort -n"
>>     1.8.14 during test:
>> 451 SYN-SENT
>> 9166 ESTAB
>>     1.8.14 after test:
>> 2 ESTAB
>>
>>     1.9-dev3 during test:
>> 109 SYN-SENT
>> 9400 ESTAB
>>     1.9-dev3 after test:
>> 2185 CLOSE-WAIT
>> 2187 ESTAB
>>     All connections that were in CLOSE-WAIT were from the client, while
>> all
>>     connections in ESTAB state were to the server. This lasted for 30
>> seconds.
>>     On the client system, all sockets were in FIN-WAIT-2 state:
>>     2186 FIN-WAIT-2
>>     This (2185/2186) seems to imply that client closed the connection but
>>     haproxy did not close the socket for 30 seconds. This also results in
>>     high CPU utilization on haproxy for some reason (100% for each process
>>     for 30 seconds), which is also unexpected as the remote side has
>> closed the
>>     socket.
>>
>> 7. Configuration file for process mode:
>> global
>> daemon
>> maxconn 26000
>> nbproc 48
>> stats socket /var/run/ha-1-admin.sock mode 600 level admin process 1
>> # (and so on for 48 processes).
>>
>> defaults
>> option http-keep-alive
>> balance leastconn
>> retries 2
>> option redispatch
>> maxconn 25000
>> option splice-response
>> option tcp-smart-accept
>> option tcp-smart-connect
>> option splice-auto
>> timeout connect 5000ms
>> timeout client 30000ms
>> timeout server 30000ms
>> timeout client-fin 30000ms
>> timeout http-request 10000ms
>> timeout http-keep-alive 75000ms
>> timeout queue 10000ms
>> timeout tarpit 15000ms
>>
>> frontend fk-fe-upgrade-80
>> mode http
>> default_backend fk-be-upgrade
>> bind <VIP>:80 process 1
>> # (and so on for 48 processes).
>>
>> backend fk-be-upgrade
>> mode http
>> default-server maxconn 2000 slowstart
>> # 58 server lines follow, e.g.: "server <name> <ip:80>"
>>
>> 8. Configuration file for thread mode:
>> global
>>         daemon
>> maxconn 26000
>> stats socket /var/run/ha-1-admin.sock mode 600 level admin
>> nbproc 1
>> nbthread 48
>> # cpu-map auto:1/1-48 0-39
>>
>> defaults
>> option http-keep-alive
>> balance leastconn
>> retries 2
>> option redispatch
>> maxconn 25000
>> option splice-response
>> option tcp-smart-accept
>> option tcp-smart-connect
>> option splice-auto
>> timeout connect 5000ms
>> timeout client 30000ms
>> timeout server 30000ms
>> timeout client-fin 30000ms
>> timeout http-request 10000ms
>> timeout http-keep-alive 75000ms
>> timeout queue 10000ms
>> timeout tarpit 15000ms
>>
>> frontend fk-fe-upgrade-80
>> mode http
>> bind <VIP>:80 process 1/1-48
>> default_backend fk-be-upgrade
>>
>> backend fk-be-upgrade
>> mode http
>> default-server maxconn 2000 slowstart
>> # 58 server lines follow, e.g.: "server <name> <ip:80>"
>>
>> I had also captured 'perf' output for the system for thread vs processes,
>> can send it later if required.
>>
>> Thanks,
>> - Krishna
>>
>

Reply via email to