On 2023-01-24 06:58:57, Willy Tarreau wrote: > Hi Marc, Hi Willy,
> See the difference ? There seems to be an insane FD locking cost on this > system that simply wastes 40% of the CPU there. So I suspect that in your > first tests you were stressing the locking while in the last ones you > were stressing the SSL stack. > > Stupid question but I prefer to ask in order to be certain, are all of > these 32 threads located on the same physical CPU ? I just want to be > sure that locks (kernel or user) are not traveling between multiple CPU > sockets, as that ruins scalability. Very good observation. This is a 2 socket system, 20 cores per socket, and since there is no affinity in OpenBSD unfortunately the 32 threads are not on the same physical CPU. cpu0 reports as core 0 package 0, cpu1 core 0 package 1, and so on that the odd cpus are socket 1 and evens are socket 2. Watching threads in top with a 1 sec interval I see them bouncing around a lot between sockets. > It's great already to be able to rule out that one. Another useful > test you could run is to place a reject rule at the connection level > in your frontend (it will happen before SSL tries to process traffic): > > tcp-request connection reject > > (don't do that in production of course). Once this is installed you > can compare again the CPU usage with no-thread, and 32-thread without > shards and 32 threads with 8 shards. This is HTTPS with the reject rule: - no nbthread, no shards: -- 40 CPUs: 0.3% user, 0.0% nice, 0.7% sys, 0.1% spin, 0.1% intr, 98.9% idle -- haproxy peaked at 20% CPU - nbthread 32, no shards: -- 40 CPUs: 0.5% user, 0.0% nice, 19.9% sys, 4.6% spin, 0.1% intr, 75.0% idle -- haproxy peaked at 863% CPU - nbthread 32, 8 shards: -- 40 CPUs: 0.4% user, 0.0% nice, 1.9% sys, 0.1% spin, 0.1% intr, 97.4% idle -- haproxy peaked at 62% CPU -- this only used 5 threads according to top FYI Since the SSL stack has been mentioned a couple times I retested with HTTP instead of HTTPS and the results are interesting: - HTTP, no nbthread, no shards -- 40 CPUs: 0.6% user, 0.0% nice, 2.0% sys, 0.2% spin, 0.2% intr, 97.0% idle -- haproxy peaked at 54% CPU -- current conns = 475; current pipes = 0/0; conn rate = 0/sec; bit rate 403.512 Mbps, Running tasks: 0/922; idle = 28 % -- First 3 seconds 7001, 14474, 22000 responses. 7-8k/sec throughout test. 100% success 0 fail - HTTP, nbthread 32, no shards -- 40 CPUs: 0.7% user, 0.0% nice, 29.6% sys, 0.2% spin, 0.5% intr, 69.1% idle -- haproxy peaked at 800% CPU -- current conns = 501; current pipes = 0/0; conn rate = 1/sec; bit rate 410.711 Mbps, Running tasks: 28/967; idle = 64 % -- First 3 seconds 7000, 14500, 22002 responses. 7-8k/sec during test. 100% success 0 fail - HTTP, nbthread 32, 8 shards -- 40 CPUs: 0.7% user, 0.0% nice, 5.0% sys, 0.2% spin, 0.2% intr, 94.0% idle -- haproxy peaked at 147% CPUs -- current conns = 500; current pipes = 0/0; conn rate = 1/sec; bit rate 401.946 Mbps, Running tasks: 0/746; idle = 93 % -- First 3 seconds 7000, 14500, 22000 responses. 7-8k/sec during test. 100% success 0 fail Here we still see sys% growing with more threads but even with the waste, with HTTP we get a reliable 7-8k responses/sec and 100% success rate instead of 400-500/sec for a few second burst and then a total stall / nearly 0% success rate with HTTPS. I expect SSL to have some cost but not quite this huge, and the "stall" of traffic/health checks under heavy HTTPS load is a bit puzzling. Do you think it would be worth trying to install OpenSSL 3.0.7 from ports and manually build haproxy against that to compare with the current LibreSSL 3.6.0? Or is the bottleneck likely somewhere else? > Ah, great! Do you have any info on the signal that was received there ? > If you still have the core, issuing "info registers", then "disassemble > conn_backend_get" and pressing enter till the end of the function could > be useful to try to locate what's happening there. It was signal 11 and yes I do still have the core, attached!
GNU gdb 6.3 Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "amd64-unknown-openbsd7.2"... Core was generated by `haproxy'. Program terminated with signal 11, Segmentation fault. Reading symbols from /usr/lib/libpthread.so.26.2...done. Loaded symbols for /usr/lib/libpthread.so.26.2 Loaded symbols for /usr/local/sbin/haproxy Reading symbols from /usr/lib/libz.so.7.0...done. Loaded symbols for /usr/lib/libz.so.7.0 Symbols already loaded for /usr/lib/libpthread.so.26.2 Reading symbols from /usr/lib/libssl.so.53.0...done. Loaded symbols for /usr/lib/libssl.so.53.0 Reading symbols from /usr/lib/libcrypto.so.50.0...done. Loaded symbols for /usr/lib/libcrypto.so.50.0 Reading symbols from /usr/local/lib/libpcre2-8.so.0.6...done. Loaded symbols for /usr/local/lib/libpcre2-8.so.0.6 Reading symbols from /usr/local/lib/libpcre2-posix.so.1.0...done. Loaded symbols for /usr/local/lib/libpcre2-posix.so.1.0 Reading symbols from /usr/lib/libc.so.96.2...done. Loaded symbols for /usr/lib/libc.so.96.2 Reading symbols from /usr/libexec/ld.so...Error while reading shared library symbols: Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module /usr/libexec/ld.so] #0 conn_backend_get (s=0xafab7609000, srv=0xafac107d000, is_safe=0, hash=25106765055229623) at src/backend.c:1230 1230 src/backend.c: No such file or directory. in src/backend.c (gdb) bt #0 conn_backend_get (s=0xafab7609000, srv=0xafac107d000, is_safe=0, hash=25106765055229623) at src/backend.c:1230 #1 0x00000af892c7442e in back_try_conn_req (s=0xafab7609000) at endian.h:37 #2 0x00000af892bfa355 in process_stream (t=0xafafd7ed800, context=0xafab7609000, state=Unhandled dwarf expression opcode 0xa3 ) at src/stream.c:2302 #3 0x00000af892ceaf28 in run_tasks_from_lists (budgets=0xafb15d0d250) at src/task.c:682 #4 0x00000af892cebeb9 in process_runnable_tasks () at src/task.c:925 #5 0x00000af892cb2e03 in run_poll_loop () at src/haproxy.c:2818 #6 0x00000af892cb7641 in run_thread_poll_loop (data=Variable "data" is not available.) at src/haproxy.c:2993 #7 0x00000afaa6bf3ab1 in _rthread_start (v=Unhandled dwarf expression opcode 0xa3) at /usr/src/lib/librthread/rthread.c:96 #8 0x00000afb06bbdaca in __tfork_thread () at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:84#9 0x00000afb06bbdaca in __tfork_thread () at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:84Previous frame identical to this frame (corrupt stack?) (gdb) bt full #0 conn_backend_get (s=0xafab7609000, srv=0xafac107d000, is_safe=0, hash=25106765055229623) at src/backend.c:1230 __pl_r = Variable "__pl_r" is not available. (gdb) (gdb) info registers rax 0x0 0 rbx 0xafab7609000 12071934660608 rcx 0xafad0cc51c0 12072361152960 rdx 0xaf892d7a2c0 12062731772608 rsi 0x59327844937eb7 25106765055229623 rdi 0xafb692210a0 12074916909216 rbp 0xafb15d0cff0 0xafb15d0cff0 rsp 0xafb15d0cfa0 0xafb15d0cfa0 r8 0x165667b19e3779f9 1609587929392839161 r9 0x8 8 r10 0x85ebca77c2b2ae63 -8796714831421723037 r11 0x3e1ef055ec5ff740 4476279331481450304 r12 0xafad0cb9600 12072361104896 r13 0x2 2 r14 0xaf892d7a358 12062731772760 r15 0xafac107d000 12072096616448 rip 0xaf892c770c5 0xaf892c770c5 <conn_backend_get+1157> eflags 0x10206 66054 cs 0x2b 43 ss 0x23 35 ds 0x23 35 es 0x23 35 fs 0x23 35 gs 0x23 35 Current language: auto; currently minimal (gdb) disassemble Dump of assembler code for function conn_backend_get: 0x00000af892c76c40 <conn_backend_get+0>: mov 900913(%rip),%r11 # 0xaf892d52b78 <__retguard_600> 0x00000af892c76c47 <conn_backend_get+7>: xor (%rsp),%r11 0x00000af892c76c4b <conn_backend_get+11>: push %rbp 0x00000af892c76c4c <conn_backend_get+12>: mov %rsp,%rbp 0x00000af892c76c4f <conn_backend_get+15>: push %r11 0x00000af892c76c51 <conn_backend_get+17>: push %r15 0x00000af892c76c53 <conn_backend_get+19>: push %r14 0x00000af892c76c55 <conn_backend_get+21>: push %r13 0x00000af892c76c57 <conn_backend_get+23>: push %r12 0x00000af892c76c59 <conn_backend_get+25>: push %rbx 0x00000af892c76c5a <conn_backend_get+26>: sub $0x20,%rsp 0x00000af892c76c5e <conn_backend_get+30>: mov %rcx,0xffffffffffffffc0(%rbp) 0x00000af892c76c62 <conn_backend_get+34>: mov %edx,0xffffffffffffffcc(%rbp) 0x00000af892c76c65 <conn_backend_get+37>: mov %rsi,%r15 0x00000af892c76c68 <conn_backend_get+40>: mov %rdi,0xffffffffffffffb8(%rbp) 0x00000af892c76c6c <conn_backend_get+44>: mov 953093(%rip),%r12 # 0xaf892d5f778 <_DYNAMIC+472> 0x00000af892c76c73 <conn_backend_get+51>: mov %r12,%rdi 0x00000af892c76c76 <conn_backend_get+54>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76c7b <conn_backend_get+59>: mov (%rax),%r13d 0x00000af892c76c7e <conn_backend_get+62>: mov 953267(%rip),%r14 # 0xaf892d5f838 <_DYNAMIC+664> 0x00000af892c76c85 <conn_backend_get+69>: mov $0x100000004,%rbx 0x00000af892c76c8f <conn_backend_get+79>: mov %r13d,%eax 0x00000af892c76c92 <conn_backend_get+82>: mov %eax,%eax 0x00000af892c76c94 <conn_backend_get+84>: shl $0x6,%rax 0x00000af892c76c98 <conn_backend_get+88>: mov 0x18(%r14,%rax,1),%rax 0x00000af892c76c9d <conn_backend_get+93>: shr $0x20,%rax 0x00000af892c76ca1 <conn_backend_get+97>: jne 0xaf892c76cdc <conn_backend_get+156> 0x00000af892c76ca3 <conn_backend_get+99>: mov %r12,%rdi 0x00000af892c76ca6 <conn_backend_get+102>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76cab <conn_backend_get+107>: mov (%rax),%eax 0x00000af892c76cad <conn_backend_get+109>: shl $0x6,%rax 0x00000af892c76cb1 <conn_backend_get+113>: mov %rbx,%rcx 0x00000af892c76cb4 <conn_backend_get+116>: lock xadd %rcx,0x18(%r14,%rax,1) 0x00000af892c76cbb <conn_backend_get+123>: shr $0x20,%rcx 0x00000af892c76cbf <conn_backend_get+127>: je 0xaf892c76cea <conn_backend_get+170> 0x00000af892c76cc1 <conn_backend_get+129>: mov %r12,%rdi 0x00000af892c76cc4 <conn_backend_get+132>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76cc9 <conn_backend_get+137>: mov (%rax),%eax 0x00000af892c76ccb <conn_backend_get+139>: shl $0x6,%rax 0x00000af892c76ccf <conn_backend_get+143>: mov 953186(%rip),%r14 # 0xaf892d5f838 <_DYNAMIC+664> 0x00000af892c76cd6 <conn_backend_get+150>: lock sub %rbx,0x18(%r14,%rax,1) 0x00000af892c76cdc <conn_backend_get+156>: pause 0x00000af892c76cde <conn_backend_get+158>: mov %r12,%rdi 0x00000af892c76ce1 <conn_backend_get+161>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76ce6 <conn_backend_get+166>: mov (%rax),%eax 0x00000af892c76ce8 <conn_backend_get+168>: jmp 0xaf892c76c92 <conn_backend_get+82> 0x00000af892c76cea <conn_backend_get+170>: mov 952967(%rip),%rdi # 0xaf892d5f778 <_DYNAMIC+472> 0x00000af892c76cf1 <conn_backend_get+177>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76cf6 <conn_backend_get+182>: mov 0x58(%r15),%rcx 0x00000af892c76cfa <conn_backend_get+186>: mov (%rax),%eax 0x00000af892c76cfc <conn_backend_get+188>: cmpl $0x0,0xffffffffffffffcc(%rbp) 0x00000af892c76d00 <conn_backend_get+192>: je 0xaf892c76d25 <conn_backend_get+229> 0x00000af892c76d02 <conn_backend_get+194>: shl $0x6,%rax 0x00000af892c76d06 <conn_backend_get+198>: lea (%rcx,%rax,1),%rdi 0x00000af892c76d0a <conn_backend_get+202>: add $0x20,%rdi 0x00000af892c76d0e <conn_backend_get+206>: mov 0xffffffffffffffc0(%rbp),%rsi 0x00000af892c76d12 <conn_backend_get+210>: callq 0xaf892c24e00 <srv_lookup_conn> ---Type <return> to continue, or q <return> to quit---conn_backend_get 0x00000af892c76d17 <conn_backend_get+215>: test %rax,%rax 0x00000af892c76d1a <conn_backend_get+218>: mov 0xffffffffffffffb8(%rbp),%rbx 0x00000af892c76d1e <conn_backend_get+222>: je 0xaf892c76d55 <conn_backend_get+277> 0x00000af892c76d20 <conn_backend_get+224>: mov %rax,%r12 0x00000af892c76d23 <conn_backend_get+227>: jmp 0xaf892c76d46 <conn_backend_get+262> 0x00000af892c76d25 <conn_backend_get+229>: shl $0x6,%rax 0x00000af892c76d29 <conn_backend_get+233>: lea (%rcx,%rax,1),%rdi 0x00000af892c76d2d <conn_backend_get+237>: add $0x10,%rdi 0x00000af892c76d31 <conn_backend_get+241>: mov 0xffffffffffffffc0(%rbp),%rsi 0x00000af892c76d35 <conn_backend_get+245>: callq 0xaf892c24e00 <srv_lookup_conn> 0x00000af892c76d3a <conn_backend_get+250>: mov %rax,%r12 0x00000af892c76d3d <conn_backend_get+253>: test %rax,%rax 0x00000af892c76d40 <conn_backend_get+256>: mov 0xffffffffffffffb8(%rbp),%rbx 0x00000af892c76d44 <conn_backend_get+260>: je 0xaf892c76d5a <conn_backend_get+282> 0x00000af892c76d46 <conn_backend_get+262>: mov 0xb0(%r12),%rdi 0x00000af892c76d4e <conn_backend_get+270>: callq 0xaf892c89cb0 <conn_delete_from_tree> 0x00000af892c76d53 <conn_backend_get+275>: jmp 0xaf892c76da6 <conn_backend_get+358> 0x00000af892c76d55 <conn_backend_get+277>: xor %r12d,%r12d 0x00000af892c76d58 <conn_backend_get+280>: jmp 0xaf892c76da6 <conn_backend_get+358> 0x00000af892c76d5a <conn_backend_get+282>: cmpl $0x0,0x150(%r15) 0x00000af892c76d62 <conn_backend_get+290>: je 0xaf892c76d9c <conn_backend_get+348> 0x00000af892c76d64 <conn_backend_get+292>: mov 0x58(%r15),%r14 0x00000af892c76d68 <conn_backend_get+296>: mov 952841(%rip),%rdi # 0xaf892d5f778 <_DYNAMIC+472> 0x00000af892c76d6f <conn_backend_get+303>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76d74 <conn_backend_get+308>: mov (%rax),%eax 0x00000af892c76d76 <conn_backend_get+310>: shl $0x6,%rax 0x00000af892c76d7a <conn_backend_get+314>: lea (%r14,%rax,1),%rdi 0x00000af892c76d7e <conn_backend_get+318>: add $0x20,%rdi 0x00000af892c76d82 <conn_backend_get+322>: mov 0xffffffffffffffc0(%rbp),%rsi 0x00000af892c76d86 <conn_backend_get+326>: callq 0xaf892c24e00 <srv_lookup_conn> 0x00000af892c76d8b <conn_backend_get+331>: test %rax,%rax 0x00000af892c76d8e <conn_backend_get+334>: je 0xaf892c76d9c <conn_backend_get+348> 0x00000af892c76d90 <conn_backend_get+336>: mov %rax,%r12 0x00000af892c76d93 <conn_backend_get+339>: movl $0x1,0xffffffffffffffcc(%rbp) 0x00000af892c76d9a <conn_backend_get+346>: jmp 0xaf892c76d46 <conn_backend_get+262> 0x00000af892c76d9c <conn_backend_get+348>: xor %r12d,%r12d 0x00000af892c76d9f <conn_backend_get+351>: movl $0x0,0xffffffffffffffcc(%rbp) 0x00000af892c76da6 <conn_backend_get+358>: mov 952779(%rip),%rdi # 0xaf892d5f778 <_DYNAMIC+472> 0x00000af892c76dad <conn_backend_get+365>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76db2 <conn_backend_get+370>: mov (%rax),%eax 0x00000af892c76db4 <conn_backend_get+372>: shl $0x6,%rax 0x00000af892c76db8 <conn_backend_get+376>: mov $0x100000004,%rcx 0x00000af892c76dc2 <conn_backend_get+386>: mov 952943(%rip),%rdx # 0xaf892d5f838 <_DYNAMIC+664> 0x00000af892c76dc9 <conn_backend_get+393>: lock sub %rcx,0x18(%rdx,%rax,1) 0x00000af892c76dcf <conn_backend_get+399>: test %r12,%r12 0x00000af892c76dd2 <conn_backend_get+402>: je 0xaf892c76ea4 <conn_backend_get+612> 0x00000af892c76dd8 <conn_backend_get+408>: lea 0x1(%r13),%eax 0x00000af892c76ddc <conn_backend_get+412>: mov 952685(%rip),%rcx # 0xaf892d5f750 <_DYNAMIC+432> 0x00000af892c76de3 <conn_backend_get+419>: xor %edx,%edx 0x00000af892c76de5 <conn_backend_get+421>: cmp 0xc(%rcx),%eax 0x00000af892c76de8 <conn_backend_get+424>: cmovne %eax,%edx 0x00000af892c76deb <conn_backend_get+427>: mov %edx,0x160(%r15) 0x00000af892c76df2 <conn_backend_get+434>: mov $0x1,%eax 0x00000af892c76df7 <conn_backend_get+439>: lock xadd %eax,0x154(%r15) 0x00000af892c76e00 <conn_backend_get+448>: add $0x1,%eax 0x00000af892c76e03 <conn_backend_get+451>: mov 0x158(%r15),%ecx 0x00000af892c76e0a <conn_backend_get+458>: cmp %eax,%ecx 0x00000af892c76e0c <conn_backend_get+460>: jae 0xaf892c76e15 <conn_backend_get+469> ---Type <return> to continue, or q <return> to quit--- 0x00000af892c76e0e <conn_backend_get+462>: mov %eax,0x158(%r15) 0x00000af892c76e15 <conn_backend_get+469>: mov 0x15c(%r15),%ecx 0x00000af892c76e1c <conn_backend_get+476>: cmp %eax,%ecx 0x00000af892c76e1e <conn_backend_get+478>: jae 0xaf892c76e27 <conn_backend_get+487> 0x00000af892c76e20 <conn_backend_get+480>: mov %eax,0x15c(%r15) 0x00000af892c76e27 <conn_backend_get+487>: lock subl $0x1,0x148(%r15) 0x00000af892c76e30 <conn_backend_get+496>: mov 0x4(%r12),%eax 0x00000af892c76e35 <conn_backend_get+501>: and $0x1,%eax 0x00000af892c76e38 <conn_backend_get+504>: lock subl $0x1,0x14c(%r15,%rax,4) 0x00000af892c76e42 <conn_backend_get+514>: mov 0x60(%r15),%rax 0x00000af892c76e46 <conn_backend_get+518>: movslq %r13d,%rcx 0x00000af892c76e49 <conn_backend_get+521>: lock subl $0x1,(%rax,%rcx,4) 0x00000af892c76e4e <conn_backend_get+526>: andb $0xfc,0x4(%r12) 0x00000af892c76e54 <conn_backend_get+532>: mov 0xe0(%rbx),%rax 0x00000af892c76e5b <conn_backend_get+539>: mov 0x8(%rax),%eax 0x00000af892c76e5e <conn_backend_get+542>: and $0xc,%eax 0x00000af892c76e61 <conn_backend_get+545>: cmp $0x4,%eax 0x00000af892c76e64 <conn_backend_get+548>: jne 0xaf892c76e74 <conn_backend_get+564> 0x00000af892c76e66 <conn_backend_get+550>: mov 0x18(%r12),%rax 0x00000af892c76e6b <conn_backend_get+555>: testb $0x2,0xa8(%rax) 0x00000af892c76e72 <conn_backend_get+562>: jne 0xaf892c76ee1 <conn_backend_get+673> 0x00000af892c76e74 <conn_backend_get+564>: mov 0x58(%r15),%rbx 0x00000af892c76e78 <conn_backend_get+568>: mov 952569(%rip),%rdi # 0xaf892d5f778 <_DYNAMIC+472> 0x00000af892c76e7f <conn_backend_get+575>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76e84 <conn_backend_get+580>: mov (%rax),%eax 0x00000af892c76e86 <conn_backend_get+582>: shl $0x6,%rax 0x00000af892c76e8a <conn_backend_get+586>: lea (%rbx,%rax,1),%rdi 0x00000af892c76e8e <conn_backend_get+590>: add $0x30,%rdi 0x00000af892c76e92 <conn_backend_get+594>: mov 0xb0(%r12),%rsi 0x00000af892c76e9a <conn_backend_get+602>: callq 0xaf892d448a0 <eb64_insert> 0x00000af892c76e9f <conn_backend_get+607>: jmpq 0xaf892c771a6 <conn_backend_get+1382> 0x00000af892c76ea4 <conn_backend_get+612>: mov 952485(%rip),%rax # 0xaf892d5f750 <_DYNAMIC+432> 0x00000af892c76eab <conn_backend_get+619>: testb $0x10,0xfa(%rax) 0x00000af892c76eb2 <conn_backend_get+626>: je 0xaf892c76ed9 <conn_backend_get+665> 0x00000af892c76eb4 <conn_backend_get+628>: mov 0x148(%r15),%eax 0x00000af892c76ebb <conn_backend_get+635>: cmp 0x6c(%r15),%eax 0x00000af892c76ebf <conn_backend_get+639>: jae 0xaf892c76f32 <conn_backend_get+754> 0x00000af892c76ec1 <conn_backend_get+641>: mov 953352(%rip),%rax # 0xaf892d5fad0 <_DYNAMIC+1328> 0x00000af892c76ec8 <conn_backend_get+648>: mov (%rax),%eax 0x00000af892c76eca <conn_backend_get+650>: mov 952447(%rip),%rcx # 0xaf892d5f750 <_DYNAMIC+432> 0x00000af892c76ed1 <conn_backend_get+657>: cmp 0x148(%rcx),%eax 0x00000af892c76ed7 <conn_backend_get+663>: jge 0xaf892c76f32 <conn_backend_get+754> 0x00000af892c76ed9 <conn_backend_get+665>: xor %r12d,%r12d 0x00000af892c76edc <conn_backend_get+668>: jmpq 0xaf892c771a6 <conn_backend_get+1382> 0x00000af892c76ee1 <conn_backend_get+673>: mov 0x18(%rbx),%rax 0x00000af892c76ee5 <conn_backend_get+677>: mov %rax,0x30(%r12) 0x00000af892c76eea <conn_backend_get+682>: mov 0x18(%rbx),%r15 0x00000af892c76eee <conn_backend_get+686>: mov %r12,%rbx 0x00000af892c76ef1 <conn_backend_get+689>: mov 0x38(%r12),%r12 0x00000af892c76ef6 <conn_backend_get+694>: test %r12,%r12 0x00000af892c76ef9 <conn_backend_get+697>: je 0xaf892c7710b <conn_backend_get+1227> 0x00000af892c76eff <conn_backend_get+703>: cmpb $0x1,(%r12) 0x00000af892c76f04 <conn_backend_get+708>: jne 0xaf892c7710b <conn_backend_get+1227> 0x00000af892c76f0a <conn_backend_get+714>: lea -1510910(%rip),%rsi # 0xaf892b06113 <__emutls_t.poll_events+25939> 0x00000af892c76f11 <conn_backend_get+721>: xor %edi,%edi 0x00000af892c76f13 <conn_backend_get+723>: mov $0x3,%edx 0x00000af892c76f18 <conn_backend_get+728>: callq 0xaf892cddb00 <complain> 0x00000af892c76f1d <conn_backend_get+733>: callq 0xaf892cdd5f0 <ha_backtrace_to_stderr> ---Type <return> to continue, or q <return> to quit--- 0x00000af892c76f22 <conn_backend_get+738>: movb $0x0,0x1 0x00000af892c76f2a <conn_backend_get+746>: jmp 0xaf892c76f30 <conn_backend_get+752> 0x00000af892c76f2c <conn_backend_get+748>: int3 0x00000af892c76f2d <conn_backend_get+749>: int3 0x00000af892c76f2e <conn_backend_get+750>: int3 0x00000af892c76f2f <conn_backend_get+751>: int3 0x00000af892c76f30 <conn_backend_get+752>: jmp 0xaf892c76f30 <conn_backend_get+752> 0x00000af892c76f32 <conn_backend_get+754>: mov 0x160(%r15),%ecx 0x00000af892c76f39 <conn_backend_get+761>: xor %r12d,%r12d 0x00000af892c76f3c <conn_backend_get+764>: mov 952333(%rip),%rax # 0xaf892d5f750 <_DYNAMIC+432> 0x00000af892c76f43 <conn_backend_get+771>: cmp 0xc(%rax),%ecx 0x00000af892c76f46 <conn_backend_get+774>: cmovge %r12d,%ecx 0x00000af892c76f4a <conn_backend_get+778>: mov %ecx,0xffffffffffffffb4(%rbp) 0x00000af892c76f4d <conn_backend_get+781>: mov %ecx,%r13d 0x00000af892c76f50 <conn_backend_get+784>: jmp 0xaf892c76f9b <conn_backend_get+859> 0x00000af892c76f52 <conn_backend_get+786>: int3 0x00000af892c76f53 <conn_backend_get+787>: int3 0x00000af892c76f54 <conn_backend_get+788>: int3 0x00000af892c76f55 <conn_backend_get+789>: int3 0x00000af892c76f56 <conn_backend_get+790>: int3 0x00000af892c76f57 <conn_backend_get+791>: int3 0x00000af892c76f58 <conn_backend_get+792>: int3 0x00000af892c76f59 <conn_backend_get+793>: int3 0x00000af892c76f5a <conn_backend_get+794>: int3 0x00000af892c76f5b <conn_backend_get+795>: int3 0x00000af892c76f5c <conn_backend_get+796>: int3 0x00000af892c76f5d <conn_backend_get+797>: int3 0x00000af892c76f5e <conn_backend_get+798>: int3 0x00000af892c76f5f <conn_backend_get+799>: int3 0x00000af892c76f60 <conn_backend_get+800>: cmpl $0x0,0xffffffffffffffcc(%rbp) 0x00000af892c76f64 <conn_backend_get+804>: mov $0x0,%r12d 0x00000af892c76f6a <conn_backend_get+810>: je 0xaf892c77069 <conn_backend_get+1065> 0x00000af892c76f70 <conn_backend_get+816>: mov $0x100000004,%rax 0x00000af892c76f7a <conn_backend_get+826>: lock sub %rax,(%rbx) 0x00000af892c76f7e <conn_backend_get+830>: add $0x1,%r13d 0x00000af892c76f82 <conn_backend_get+834>: mov 952263(%rip),%rax # 0xaf892d5f750 <_DYNAMIC+432> 0x00000af892c76f89 <conn_backend_get+841>: cmp 0xc(%rax),%r13d 0x00000af892c76f8d <conn_backend_get+845>: cmove %r12d,%r13d 0x00000af892c76f91 <conn_backend_get+849>: cmp 0xffffffffffffffb4(%rbp),%r13d 0x00000af892c76f95 <conn_backend_get+853>: je 0xaf892c771a6 <conn_backend_get+1382> 0x00000af892c76f9b <conn_backend_get+859>: mov 0x60(%r15),%rbx 0x00000af892c76f9f <conn_backend_get+863>: movslq %r13d,%r14 0x00000af892c76fa2 <conn_backend_get+866>: mov 952271(%rip),%rdi # 0xaf892d5f778 <_DYNAMIC+472> 0x00000af892c76fa9 <conn_backend_get+873>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c76fae <conn_backend_get+878>: cmpl $0x0,(%rbx,%r14,4) 0x00000af892c76fb3 <conn_backend_get+883>: je 0xaf892c76f7e <conn_backend_get+830> 0x00000af892c76fb5 <conn_backend_get+885>: cmp (%rax),%r13d 0x00000af892c76fb8 <conn_backend_get+888>: mov 952441(%rip),%rcx # 0xaf892d5f838 <_DYNAMIC+664> 0x00000af892c76fbf <conn_backend_get+895>: je 0xaf892c76f7e <conn_backend_get+830> 0x00000af892c76fc1 <conn_backend_get+897>: shl $0x6,%r14 0x00000af892c76fc5 <conn_backend_get+901>: mov 0x18(%rcx,%r14,1),%rax 0x00000af892c76fca <conn_backend_get+906>: shr $0x20,%rax 0x00000af892c76fce <conn_backend_get+910>: jne 0xaf892c76f7e <conn_backend_get+830> 0x00000af892c76fd0 <conn_backend_get+912>: lea (%rcx,%r14,1),%rbx 0x00000af892c76fd4 <conn_backend_get+916>: xchg %rbx,%rax 0x00000af892c76fd7 <conn_backend_get+919>: add $0x18,%rax 0x00000af892c76fdb <conn_backend_get+923>: xchg %rbx,%rax 0x00000af892c76fde <conn_backend_get+926>: mov $0x100000004,%rax ---Type <return> to continue, or q <return> to quit--- 0x00000af892c76fe8 <conn_backend_get+936>: lock xadd %rax,(%rbx) 0x00000af892c76fed <conn_backend_get+941>: shr $0x20,%rax 0x00000af892c76ff1 <conn_backend_get+945>: jne 0xaf892c770f8 <conn_backend_get+1208> 0x00000af892c76ff7 <conn_backend_get+951>: xor %eax,%eax 0x00000af892c76ff9 <conn_backend_get+953>: cmpl $0x0,0xffffffffffffffcc(%rbp) 0x00000af892c76ffd <conn_backend_get+957>: setne %al 0x00000af892c77000 <conn_backend_get+960>: mov 0x58(%r15),%rcx 0x00000af892c77004 <conn_backend_get+964>: add %r14,%rcx 0x00000af892c77007 <conn_backend_get+967>: shl $0x4,%rax 0x00000af892c7700b <conn_backend_get+971>: lea (%rax,%rcx,1),%rdi 0x00000af892c7700f <conn_backend_get+975>: add $0x10,%rdi 0x00000af892c77013 <conn_backend_get+979>: mov 0xffffffffffffffc0(%rbp),%rsi 0x00000af892c77017 <conn_backend_get+983>: callq 0xaf892c24e00 <srv_lookup_conn> 0x00000af892c7701c <conn_backend_get+988>: test %rax,%rax 0x00000af892c7701f <conn_backend_get+991>: je 0xaf892c76f60 <conn_backend_get+800> 0x00000af892c77025 <conn_backend_get+997>: mov %rax,%r12 0x00000af892c77028 <conn_backend_get+1000>: jmp 0xaf892c77044 <conn_backend_get+1028> 0x00000af892c7702a <conn_backend_get+1002>: int3 0x00000af892c7702b <conn_backend_get+1003>: int3 0x00000af892c7702c <conn_backend_get+1004>: int3 0x00000af892c7702d <conn_backend_get+1005>: int3 0x00000af892c7702e <conn_backend_get+1006>: int3 0x00000af892c7702f <conn_backend_get+1007>: int3 0x00000af892c77030 <conn_backend_get+1008>: mov %r12,%rdi 0x00000af892c77033 <conn_backend_get+1011>: callq 0xaf892c24e40 <srv_lookup_conn_next> 0x00000af892c77038 <conn_backend_get+1016>: mov %rax,%r12 0x00000af892c7703b <conn_backend_get+1019>: test %rax,%rax 0x00000af892c7703e <conn_backend_get+1022>: je 0xaf892c76f60 <conn_backend_get+800> 0x00000af892c77044 <conn_backend_get+1028>: mov 0x18(%r12),%rax 0x00000af892c77049 <conn_backend_get+1033>: mov 0xa0(%rax),%r11 0x00000af892c77050 <conn_backend_get+1040>: test %r11,%r11 0x00000af892c77053 <conn_backend_get+1043>: je 0xaf892c77030 <conn_backend_get+1008> 0x00000af892c77055 <conn_backend_get+1045>: mov %r12,%rdi 0x00000af892c77058 <conn_backend_get+1048>: mov %r13d,%esi 0x00000af892c7705b <conn_backend_get+1051>: callq 0xaf892b83050 <__llvm_retpoline_r11> 0x00000af892c77060 <conn_backend_get+1056>: test %eax,%eax 0x00000af892c77062 <conn_backend_get+1058>: jne 0xaf892c77030 <conn_backend_get+1008> 0x00000af892c77064 <conn_backend_get+1060>: jmpq 0xaf892c771d0 <conn_backend_get+1424> 0x00000af892c77069 <conn_backend_get+1065>: movl $0x0,0xffffffffffffffcc(%rbp) 0x00000af892c77070 <conn_backend_get+1072>: cmpl $0x0,0x150(%r15) 0x00000af892c77078 <conn_backend_get+1080>: je 0xaf892c76f70 <conn_backend_get+816> 0x00000af892c7707e <conn_backend_get+1086>: mov 0x58(%r15),%rax 0x00000af892c77082 <conn_backend_get+1090>: lea (%rax,%r14,1),%rdi 0x00000af892c77086 <conn_backend_get+1094>: add $0x20,%rdi 0x00000af892c7708a <conn_backend_get+1098>: mov 0xffffffffffffffc0(%rbp),%rsi 0x00000af892c7708e <conn_backend_get+1102>: callq 0xaf892c24e00 <srv_lookup_conn> 0x00000af892c77093 <conn_backend_get+1107>: test %rax,%rax 0x00000af892c77096 <conn_backend_get+1110>: je 0xaf892c770f0 <conn_backend_get+1200> 0x00000af892c77098 <conn_backend_get+1112>: mov %rax,%r12 0x00000af892c7709b <conn_backend_get+1115>: mov %rbx,%r14 0x00000af892c7709e <conn_backend_get+1118>: mov 0xffffffffffffffb8(%rbp),%rbx 0x00000af892c770a2 <conn_backend_get+1122>: jmp 0xaf892c770c0 <conn_backend_get+1152> 0x00000af892c770a4 <conn_backend_get+1124>: int3 0x00000af892c770a5 <conn_backend_get+1125>: int3 0x00000af892c770a6 <conn_backend_get+1126>: int3 0x00000af892c770a7 <conn_backend_get+1127>: int3 0x00000af892c770a8 <conn_backend_get+1128>: int3 0x00000af892c770a9 <conn_backend_get+1129>: int3 ---Type <return> to continue, or q <return> to quit--- 0x00000af892c770aa <conn_backend_get+1130>: int3 0x00000af892c770ab <conn_backend_get+1131>: int3 0x00000af892c770ac <conn_backend_get+1132>: int3 0x00000af892c770ad <conn_backend_get+1133>: int3 0x00000af892c770ae <conn_backend_get+1134>: int3 0x00000af892c770af <conn_backend_get+1135>: int3 0x00000af892c770b0 <conn_backend_get+1136>: mov %r12,%rdi 0x00000af892c770b3 <conn_backend_get+1139>: callq 0xaf892c24e40 <srv_lookup_conn_next> 0x00000af892c770b8 <conn_backend_get+1144>: mov %rax,%r12 0x00000af892c770bb <conn_backend_get+1147>: test %rax,%rax 0x00000af892c770be <conn_backend_get+1150>: je 0xaf892c770e5 <conn_backend_get+1189> 0x00000af892c770c0 <conn_backend_get+1152>: mov 0x18(%r12),%rax 0x00000af892c770c5 <conn_backend_get+1157>: mov 0xa0(%rax),%r11 0x00000af892c770cc <conn_backend_get+1164>: test %r11,%r11 0x00000af892c770cf <conn_backend_get+1167>: je 0xaf892c770b0 <conn_backend_get+1136> 0x00000af892c770d1 <conn_backend_get+1169>: mov %r12,%rdi 0x00000af892c770d4 <conn_backend_get+1172>: mov %r13d,%esi 0x00000af892c770d7 <conn_backend_get+1175>: callq 0xaf892b83050 <__llvm_retpoline_r11> 0x00000af892c770dc <conn_backend_get+1180>: test %eax,%eax 0x00000af892c770de <conn_backend_get+1182>: jne 0xaf892c770b0 <conn_backend_get+1136> 0x00000af892c770e0 <conn_backend_get+1184>: jmpq 0xaf892c771d7 <conn_backend_get+1431> 0x00000af892c770e5 <conn_backend_get+1189>: xor %r12d,%r12d 0x00000af892c770e8 <conn_backend_get+1192>: mov %r14,%rbx 0x00000af892c770eb <conn_backend_get+1195>: jmpq 0xaf892c76f70 <conn_backend_get+816> 0x00000af892c770f0 <conn_backend_get+1200>: xor %r12d,%r12d 0x00000af892c770f3 <conn_backend_get+1203>: jmpq 0xaf892c76f70 <conn_backend_get+816> 0x00000af892c770f8 <conn_backend_get+1208>: mov $0x100000004,%rax 0x00000af892c77102 <conn_backend_get+1218>: lock sub %rax,(%rbx) 0x00000af892c77106 <conn_backend_get+1222>: jmpq 0xaf892c76f7e <conn_backend_get+830> 0x00000af892c7710b <conn_backend_get+1227>: mov %rbx,%rcx 0x00000af892c7710e <conn_backend_get+1230>: lea 0x58(%rbx),%r14 0x00000af892c77112 <conn_backend_get+1234>: cmp %r14,0x58(%rbx) 0x00000af892c77116 <conn_backend_get+1238>: jne 0xaf892c771a3 <conn_backend_get+1379> 0x00000af892c7711c <conn_backend_get+1244>: test %rax,%rax 0x00000af892c7711f <conn_backend_get+1247>: je 0xaf892c77126 <conn_backend_get+1254> 0x00000af892c77121 <conn_backend_get+1249>: cmp %r15,%rax 0x00000af892c77124 <conn_backend_get+1252>: jne 0xaf892c771a3 <conn_backend_get+1379> 0x00000af892c77126 <conn_backend_get+1254>: lea 0xa8(%r15),%r13 0x00000af892c7712d <conn_backend_get+1261>: mov 0xa8(%r15),%rax 0x00000af892c77134 <conn_backend_get+1268>: cmp %rax,%r13 0x00000af892c77137 <conn_backend_get+1271>: je 0xaf892c77152 <conn_backend_get+1298> 0x00000af892c77139 <conn_backend_get+1273>: jmp 0xaf892c77140 <conn_backend_get+1280> 0x00000af892c7713b <conn_backend_get+1275>: int3 0x00000af892c7713c <conn_backend_get+1276>: int3 0x00000af892c7713d <conn_backend_get+1277>: int3 0x00000af892c7713e <conn_backend_get+1278>: int3 0x00000af892c7713f <conn_backend_get+1279>: int3 0x00000af892c77140 <conn_backend_get+1280>: cmp %r12,0xffffffffffffffe8(%rax) 0x00000af892c77144 <conn_backend_get+1284>: je 0xaf892c77216 <conn_backend_get+1494> 0x00000af892c7714a <conn_backend_get+1290>: mov (%rax),%rax 0x00000af892c7714d <conn_backend_get+1293>: cmp %rax,%r13 0x00000af892c77150 <conn_backend_get+1296>: jne 0xaf892c77140 <conn_backend_get+1280> 0x00000af892c77152 <conn_backend_get+1298>: mov 952295(%rip),%rax # 0xaf892d5f940 <_DYNAMIC+928> 0x00000af892c77159 <conn_backend_get+1305>: mov (%rax),%rdi 0x00000af892c7715c <conn_backend_get+1308>: xor %esi,%esi 0x00000af892c7715e <conn_backend_get+1310>: callq 0xaf892d05020 <__pool_alloc> 0x00000af892c77163 <conn_backend_get+1315>: test %rax,%rax 0x00000af892c77166 <conn_backend_get+1318>: je 0xaf892c771a3 <conn_backend_get+1379> ---Type <return> to continue, or q <return> to quit--- 0x00000af892c77168 <conn_backend_get+1320>: mov %r12,(%rax) 0x00000af892c7716b <conn_backend_get+1323>: lea 0x8(%rax),%rcx 0x00000af892c7716f <conn_backend_get+1327>: mov %rcx,0x10(%rax) 0x00000af892c77173 <conn_backend_get+1331>: mov %rcx,0x8(%rax) 0x00000af892c77177 <conn_backend_get+1335>: mov 0xb0(%r15),%rcx 0x00000af892c7717e <conn_backend_get+1342>: mov %rax,%rdx 0x00000af892c77181 <conn_backend_get+1345>: xchg %rdx,%rax 0x00000af892c77184 <conn_backend_get+1348>: add $0x18,%rax 0x00000af892c77188 <conn_backend_get+1352>: xchg %rdx,%rax 0x00000af892c7718b <conn_backend_get+1355>: mov %rcx,0x20(%rax) 0x00000af892c7718f <conn_backend_get+1359>: mov %rdx,0xb0(%r15) 0x00000af892c77196 <conn_backend_get+1366>: mov 0x20(%rax),%rcx 0x00000af892c7719a <conn_backend_get+1370>: mov %rdx,(%rcx) 0x00000af892c7719d <conn_backend_get+1373>: mov %r13,0x18(%rax) 0x00000af892c771a1 <conn_backend_get+1377>: jmp 0xaf892c7721a <conn_backend_get+1498> 0x00000af892c771a3 <conn_backend_get+1379>: mov %rbx,%r12 0x00000af892c771a6 <conn_backend_get+1382>: mov %r12,%rax 0x00000af892c771a9 <conn_backend_get+1385>: add $0x20,%rsp 0x00000af892c771ad <conn_backend_get+1389>: pop %rbx 0x00000af892c771ae <conn_backend_get+1390>: pop %r12 0x00000af892c771b0 <conn_backend_get+1392>: pop %r13 0x00000af892c771b2 <conn_backend_get+1394>: pop %r14 0x00000af892c771b4 <conn_backend_get+1396>: pop %r15 0x00000af892c771b6 <conn_backend_get+1398>: pop %r11 0x00000af892c771b8 <conn_backend_get+1400>: pop %rbp 0x00000af892c771b9 <conn_backend_get+1401>: xor (%rsp),%r11 0x00000af892c771bd <conn_backend_get+1405>: cmp 899508(%rip),%r11 # 0xaf892d52b78 <__retguard_600> 0x00000af892c771c4 <conn_backend_get+1412>: je 0xaf892c771cf <conn_backend_get+1423> 0x00000af892c771c6 <conn_backend_get+1414>: int3 0x00000af892c771c7 <conn_backend_get+1415>: int3 0x00000af892c771c8 <conn_backend_get+1416>: int3 0x00000af892c771c9 <conn_backend_get+1417>: int3 0x00000af892c771ca <conn_backend_get+1418>: int3 0x00000af892c771cb <conn_backend_get+1419>: int3 0x00000af892c771cc <conn_backend_get+1420>: int3 0x00000af892c771cd <conn_backend_get+1421>: int3 0x00000af892c771ce <conn_backend_get+1422>: int3 0x00000af892c771cf <conn_backend_get+1423>: retq 0x00000af892c771d0 <conn_backend_get+1424>: mov %rbx,%r14 0x00000af892c771d3 <conn_backend_get+1427>: mov 0xffffffffffffffb8(%rbp),%rbx 0x00000af892c771d7 <conn_backend_get+1431>: mov 0xb0(%r12),%rdi 0x00000af892c771df <conn_backend_get+1439>: callq 0xaf892c89cb0 <conn_delete_from_tree> 0x00000af892c771e4 <conn_backend_get+1444>: mov 951693(%rip),%rdi # 0xaf892d5f778 <_DYNAMIC+472> 0x00000af892c771eb <conn_backend_get+1451>: callq 0xaf892d4dba0 <__emutls_get_address> 0x00000af892c771f0 <conn_backend_get+1456>: mov (%rax),%eax 0x00000af892c771f2 <conn_backend_get+1458>: shl $0x7,%rax 0x00000af892c771f6 <conn_backend_get+1462>: mov 951683(%rip),%rcx # 0xaf892d5f780 <_DYNAMIC+480> 0x00000af892c771fd <conn_backend_get+1469>: lock addl $0x1,0x38(%rcx,%rax,1) 0x00000af892c77203 <conn_backend_get+1475>: mov $0x100000004,%rax 0x00000af892c7720d <conn_backend_get+1485>: lock sub %rax,(%r14) 0x00000af892c77211 <conn_backend_get+1489>: jmpq 0xaf892c76dd8 <conn_backend_get+408> 0x00000af892c77216 <conn_backend_get+1494>: add $0xffffffffffffffe8,%rax 0x00000af892c7721a <conn_backend_get+1498>: lea 0x8(%rax),%rcx 0x00000af892c7721e <conn_backend_get+1502>: mov 0x10(%rax),%rdx 0x00000af892c77222 <conn_backend_get+1506>: mov %rbx,%r12 0x00000af892c77225 <conn_backend_get+1509>: mov %rdx,0x60(%rbx) 0x00000af892c77229 <conn_backend_get+1513>: mov %r14,0x10(%rax) 0x00000af892c7722d <conn_backend_get+1517>: mov 0x60(%rbx),%rax ---Type <return> to continue, or q <return> to quit--- 0x00000af892c77231 <conn_backend_get+1521>: mov %r14,(%rax) 0x00000af892c77234 <conn_backend_get+1524>: mov %rcx,0x58(%rbx) 0x00000af892c77238 <conn_backend_get+1528>: jmpq 0xaf892c771a6 <conn_backend_get+1382> End of assembler dump. (gdb)