[Bug 281560] gve (4) uma deadlock during high tcp throughput
[email protected] Thu, 26 Sep 2024 00:38:27 +0000
Newsgroups
gmane.os.freebsd.devel.net
Message-ID
<[email protected] /bugzilla/>
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=281560
--- Comment #6 from [email protected] ---
I reproduced this with invariants+witness+ddb, it takes much longer to hit the
deadlock due to lowered throughput due to invariants and witness. Backtraces of
locked driver threads:
```
[root@FreeBSD14 ~]# for locktid in $(procstat -ta | grep gve | grep lock | cut
-d" " -f6); do procstat -k $locktid | grep $locktid; done
0 100413 kernel gve0 rxq 0 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_m_copym tcp_default_output
tcp_do_segment tcp_input_with_port tcp_input ip_input netisr_dispatch_src
ether_demux ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush
tcp_lro_rx_done
0 100414 kernel gve0 rxq 1 mi_switch __rw_wlock_hard
_rw_wlock_cookie _inp_smr_lock in_pcblookup_hash_smr in_pcblookup_mbuf
tcp_input_with_port tcp_input ip_input netisr_dispatch_src ether_demux
ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush tcp_lro_rx_done
tcp_lro_flush_all gve_rx_cleanup_tq_dqo
0 100415 kernel gve0 rxq 2 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_m_copym tcp_default_output
tcp_do_segment tcp_input_with_port tcp_input ip_input netisr_dispatch_src
ether_demux ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush
tcp_lro_rx_done
0 100416 kernel gve0 rxq 3 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_m_copym tcp_default_output
tcp_do_segment tcp_input_with_port tcp_input ip_input netisr_dispatch_src
ether_demux ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush
tcp_lro_rx_done
0 100417 kernel gve0 rxq 4 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_default_output
tcp_do_segment tcp_input_with_port tcp_input ip_input netisr_dispatch_src
ether_demux ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush
tcp_lro_rx_done tcp_lro_flush_all
0 100418 kernel gve0 rxq 5 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_m_copym tcp_default_output
tcp_do_segment tcp_input_with_port tcp_input ip_input netisr_dispatch_src
ether_demux ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush
tcp_lro_rx_done
0 100419 kernel gve0 rxq 6 mi_switch __rw_wlock_hard
_rw_wlock_cookie _inp_smr_lock in_pcblookup_hash_smr in_pcblookup_mbuf
tcp_input_with_port tcp_input ip_input netisr_dispatch_src ether_demux
ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush tcp_lro_rx_done
tcp_lro_flush_all gve_rx_cleanup_tq_dqo
0 100420 kernel gve0 rxq 7 mi_switch __rw_wlock_hard
_rw_wlock_cookie _inp_smr_lock in_pcblookup_hash_smr in_pcblookup_mbuf
tcp_input_with_port tcp_input ip_input netisr_dispatch_src ether_demux
ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush tcp_lro_rx_done
tcp_lro_flush_all gve_rx_cleanup_tq_dqo
0 100421 kernel gve0 rxq 8 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg mb_free_ext m_free
m_freem tcp_do_segment tcp_input_with_port tcp_input ip_input
netisr_dispatch_src ether_demux ether_nh_input netisr_dispatch_src ether_input
0 100422 kernel gve0 rxq 9 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_default_output
tcp_do_segment tcp_input_with_port tcp_input ip_input netisr_dispatch_src
ether_demux ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush
tcp_lro_rx_done tcp_lro_flush_all
0 100423 kernel gve0 rxq 10 mi_switch __rw_wlock_hard
_rw_wlock_cookie _inp_smr_lock in_pcblookup_hash_smr in_pcblookup_mbuf
tcp_input_with_port tcp_input ip_input netisr_dispatch_src ether_demux
ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush tcp_lro_rx_done
tcp_lro_flush_all gve_rx_cleanup_tq_dqo
0 100424 kernel gve0 rxq 11 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_default_output
tcp_do_segment tcp_input_with_port tcp_input ip_input netisr_dispatch_src
ether_demux ether_nh_input netisr_dispatch_src ether_input tcp_lro_flush
tcp_lro_rx_done tcp_lro_flush_all
0 100425 kernel gve0 rxq 12 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg mb_free_ext m_free
m_freem tcp_do_segment tcp_input_with_port tcp_input ip_input
netisr_dispatch_src ether_demux ether_nh_input netisr_dispatch_src ether_input
0 100426 kernel gve0 rxq 13 mi_switch __mtx_lock_sleep
__mtx_lock_flags cache_alloc cache_alloc_retry tcp_m_copym tcp_default_output
tcp_output tcp_do_segment tcp_input_with_port tcp_input ip_input
netisr_dispatch_src ether_demux ether_nh_input netisr_dispatch_src ether_input
tcp_push_and_replace
0 100427 kernel gve0 rxq 14 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg mb_free_ext m_free
m_freem tcp_do_segment tcp_input_with_port tcp_input ip_input
netisr_dispatch_src ether_demux ether_nh_input netisr_dispatch_src ether_input
0 100433 kernel gve0 txq 2 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg m_free m_freem
gve_tx_cleanup_tq_dqo taskqueue_run_locked taskqueue_thread_loop fork_exit
fork_trampoline
0 100437 kernel gve0 txq 4 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg m_free m_freem
gve_tx_cleanup_tq_dqo taskqueue_run_locked taskqueue_thread_loop fork_exit
fork_trampoline
0 100443 kernel gve0 txq 7 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg m_free m_freem
gve_tx_cleanup_tq_dqo taskqueue_run_locked taskqueue_thread_loop fork_exit
fork_trampoline
0 100453 kernel gve0 txq 12 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg m_free m_freem
gve_tx_cleanup_tq_dqo taskqueue_run_locked taskqueue_thread_loop fork_exit
fork_trampoline
0 100459 kernel gve0 txq 15 mi_switch __mtx_lock_sleep
__mtx_lock_flags zone_put_bucket cache_free uma_zfree_arg m_free m_freem
gve_tx_cleanup_tq_dqo taskqueue_run_locked taskqueue_thread_loop fork_exit
fork_trampoline
```
show alllocks output:
```
db> show alllocks
Process 857 (iperf) thread 0xfffff800168c7000 (100673)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e4d2c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800168c8740 (100674)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a020140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800168c8000 (100675)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016e288c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800168cf740 (100676)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8ae9140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800168cf000 (100677)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e56dc80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8845000 (100678)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b85708c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8770000 (100679)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a0cb8c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8716000 (100680)
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff80016dbe8e0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff8002e5e2020) locked @
/usr/src/sys/netinet/tcp_usrreq.c:925
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016dbe8c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8730000 (100681)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a14bc80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87f5000 (100682)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e13ec80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87ab000 (100683)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e25e140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8827000 (100684)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b88b28c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b874e000 (100685)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e6c78c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8750000 (100686)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e56d140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8764000 (100687)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e6c7500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b875d000 (100688)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016dbe500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b880c000 (100689)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e044500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8789000 (100690)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e2b0140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87e9740 (100691)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8d3ac80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87f6740 (100692)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e769c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8855000 (100693)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a05a500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87ca740 (100694)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e045c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87a0000 (100695)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b85b78c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b880c740 (100696)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e4ad140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff80016da6000 (100697)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e6e3c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87ff740 (100698)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016984c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b873b740 (100699)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016ff78c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b875b000 (100700)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8963c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87ff000 (100701)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016dcfc80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8772740 (100702)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b89168c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8877740 (100703)
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff80016dcf8e0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b8d53020) locked @
/usr/src/sys/netinet/tcp_usrreq.c:925
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016dcf8c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8787740 (100704)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e044140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b881a740 (100705)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e39e140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b873b000 (100706)
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff800169848e0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b86f8560) locked @
/usr/src/sys/netinet/tcp_usrreq.c:925
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800169848c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8731740 (100707)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016e28500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87dd000 (100708)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016dcf500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b883b740 (100709)
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff8002e4aeca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff8002e2fc560) locked @
/usr/src/sys/netinet/tcp_usrreq.c:925
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e4aec80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8818740 (100710)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016e28140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8845740 (100711)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a14b8c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b878a000 (100712)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e2b1c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8764740 (100713)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016dcf140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b870a740 (100714)
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff8002e4ae8e0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff8002e2fc020) locked @
/usr/src/sys/netinet/tcp_usrreq.c:925
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e4ae8c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b878a740 (100715)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a05a140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff80013a2d000 (100716)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b85b7500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8716740 (100717)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e844500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87f6000 (100718)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a021c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87ca000 (100719)
exclusive sleep mutex mbuf (UMA zone) r = 0 (0xfffffe00df57a3d0) locked @
/usr/src/sys/vm/uma_core.c:701
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff80016ff7ca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b8ad0aa0) locked @
/usr/src/sys/netinet/tcp_usrreq.c:925
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016ff7c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8797740 (100720)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8d578c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8857000 (100721)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e45bc80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8766740 (100722)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e7698c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87bb740 (100723)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e6c7140) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8878740 (100724)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a14b500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8751000 (100725)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016ff7500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8789740 (100726)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff80016e29c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b880a000 (100727)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8d57c80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87a0740 (100728)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8916500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b873d000 (100729)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e769500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87ac740 (100730)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a0218c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87e7740 (100731)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e45b8c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8837740 (100732)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b88b2500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b8743000 (100733)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8aeac80) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87db000 (100734)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8002e4d28c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b875d740 (100735)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff800b8570500) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 857 (iperf) thread 0xfffff800b87dc740 (100736)
exclusive sx so_snd_sx (so_snd_sx) r = 0 (0xfffff8011a2bf8c0) locked @
/usr/src/sys/kern/uipc_socket.c:4044
Process 0 (kernel) thread 0xfffff80016a34000 (100413) **gve rxq 0**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff8002e56d160) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff80016f3caa0) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b626d000 (100415) **gve rxq 2**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff800b8963ca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b8960020) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b626e740 (100416) **gve rxq 3**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff80016dcfca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff8002eab9560) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b626e000 (100417) **gve rxq 4**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff8002e56dca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff8002ee5a020) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b626f740 (100418) **gve rxq 5**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff80016984ca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b86f8aa0) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b6270000 (100421) **gve rxq 8**
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b88af560) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b74c5740 (100422) **gve rxq 9**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff8002e6e3ca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b8ae5aa0) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b74c6740 (100424) **gve rxq 11**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff800b8916520) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b8914560) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b74c6000 (100425) **gve rxq 12**
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff8002e9f2560) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b74c7740 (100426) **gve rxq 13**
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff8002e4d28e0) locked @
/usr/src/sys/netinet/tcp_output.c:350
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff800b8556aa0) locked @
/usr/src/sys/netinet/in_pcb.c:1437
Process 0 (kernel) thread 0xfffff800b74c7000 (100427) **gve rxq 14**
exclusive rw tcpinp (tcpinp) r = 0 (0xfffff8002e6bfaa0) locked @
/usr/src/sys/netinet/in_pcb.c:1421
```
and the ps output of driver threads:
```
100413 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 0]
100414 L *tcpinp 0xfffff80016ab20c0 [gve0 rxq 1]
100415 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 2]
100416 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 3]
100417 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 4]
100418 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 5]
100419 L *tcpinp 0xfffff80016ab3480 [gve0 rxq 6]
100420 L *tcpinp 0xfffff800b87c9840 [gve0 rxq 7]
100421 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 8]
100422 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 9]
100423 L *tcpinp 0xfffff80016ab2c00 [gve0 rxq 10]
100424 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 11]
100425 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 12]
100426 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 13]
100427 L *mbuf 0xfffff800b877e9c0 [gve0 rxq 14]
100428 D - 0xfffff800b82c7400 [gve0 rxq 15]
100429 D - 0xfffff800b82c7200 [gve0 txq 0]
100430 D - 0xfffff800b82c7000 [gve0 txq 0 xmit]
100431 D - 0xfffff800b828ad00 [gve0 txq 1]
100432 D - 0xfffff800b828ab00 [gve0 txq 1 xmit]
100433 L *mbuf 0xfffff800b877e9c0 [gve0 txq 2]
100434 D - 0xfffff800b828a700 [gve0 txq 2 xmit]
100435 D - 0xfffff800b828a500 [gve0 txq 3]
100436 D - 0xfffff800b828a300 [gve0 txq 3 xmit]
100437 L *mbuf 0xfffff800b877e9c0 [gve0 txq 4]
100438 Run CPU 11 [gve0 txq 4 xmit]
100439 D - 0xfffff800b828bc00 [gve0 txq 5]
100440 D - 0xfffff800b828ba00 [gve0 txq 5 xmit]
100441 D - 0xfffff800b828b800 [gve0 txq 6]
100442 D - 0xfffff800b828b600 [gve0 txq 6 xmit]
100443 L *mbuf 0xfffff800b877e9c0 [gve0 txq 7]
100444 D - 0xfffff800b828b200 [gve0 txq 7 xmit]
100445 D - 0xfffff800b828b000 [gve0 txq 8]
100446 D - 0xfffff800b828cd00 [gve0 txq 8 xmit]
100447 D - 0xfffff800b828cb00 [gve0 txq 9]
100448 D - 0xfffff800b828c900 [gve0 txq 9 xmit]
100449 D - 0xfffff800b828c700 [gve0 txq 10]
100450 D - 0xfffff800b828c500 [gve0 txq 10 xmit]
100451 D - 0xfffff800b828c300 [gve0 txq 11]
100452 D - 0xfffff800b828c100 [gve0 txq 11 xmit]
100453 L *mbuf 0xfffff800b877e9c0 [gve0 txq 12]
100454 D - 0xfffff8002e54dc00 [gve0 txq 12 xmit]
100455 D - 0xfffff8002e54da00 [gve0 txq 13]
100456 D - 0xfffff8002e54d800 [gve0 txq 13 xmit]
100457 D - 0xfffff8002e54d600 [gve0 txq 14]
100458 D - 0xfffff8002e54d400 [gve0 txq 14 xmit]
100459 L *mbuf 0xfffff800b877e9c0 [gve0 txq 15]
100460 D - 0xfffff800b84fc400 [gve0 txq 15 xmit]
```
ddb backtrace of one of the locked driver threads:
```
db> trace 100413
Tracing pid 0 tid 100413 td 0xfffff80016a34000
sched_switch() at sched_switch+0x5d2/frame 0xfffffe018a1fe4d0
mi_switch() at mi_switch+0x171/frame 0xfffffe018a1fe4f0
__mtx_lock_sleep() at __mtx_lock_sleep+0x1ba/frame 0xfffffe018a1fe580
__mtx_lock_flags() at __mtx_lock_flags+0xe1/frame 0xfffffe018a1fe5d0
cache_alloc() at cache_alloc+0x237/frame 0xfffffe018a1fe630
cache_alloc_retry() at cache_alloc_retry+0x23/frame 0xfffffe018a1fe670
tcp_m_copym() at tcp_m_copym+0x227/frame 0xfffffe018a1fe710
tcp_default_output() at tcp_default_output+0x146c/frame 0xfffffe018a1fe8e0
tcp_do_segment() at tcp_do_segment+0x24c9/frame 0xfffffe018a1fe9c0
tcp_input_with_port() at tcp_input_with_port+0x1135/frame 0xfffffe018a1feb10
tcp_input() at tcp_input+0xb/frame 0xfffffe018a1feb20
ip_input() at ip_input+0x2ae/frame 0xfffffe018a1feb80
netisr_dispatch_src() at netisr_dispatch_src+0xad/frame 0xfffffe018a1febe0
ether_demux() at ether_demux+0x17a/frame 0xfffffe018a1fec10
ether_nh_input() at ether_nh_input+0x3f8/frame 0xfffffe018a1fec60
netisr_dispatch_src() at netisr_dispatch_src+0xad/frame 0xfffffe018a1fecc0
ether_input() at ether_input+0xe5/frame 0xfffffe018a1fed20
tcp_lro_flush() at tcp_lro_flush+0x34f/frame 0xfffffe018a1fed50
tcp_lro_rx_done() at tcp_lro_rx_done+0x37/frame 0xfffffe018a1fed70
tcp_lro_flush_all() at tcp_lro_flush_all+0x16e/frame 0xfffffe018a1fedc0
gve_rx_cleanup_tq_dqo() at gve_rx_cleanup_tq_dqo+0x854/frame 0xfffffe018a1fee40
```
Now in trying to find the resource loop, I initially failed because most driver
threads are waiting on the uma zone lock (the lock that cache_alloc presumably
needs) and this lock's address in the wchan column is 0xfffff800b877e9c0. But
0xfffff800b877e9c0 does not show up in the `show alllocks` output at all.
However, there _is_ an owner for the uma zone lock there:
```
Process 857 (iperf) thread 0xfffff800b87ca000 (100719)
exclusive sleep mutex mbuf (UMA zone) r = 0 (0xfffffe00df57a3d0) locked @
/usr/src/sys/vm/uma_core.c:701
exclusive sleep mutex so_snd (so_snd) r = 0 (0xfffff80016ff7ca0) locked @
/usr/src/sys/netinet/tcp_output.c:350
```
In holding this lock, this iperf thread is probably holding up the driver
threads. I'm not sure what to make of the fact that the addresses dont match:
0xfffffe00df57a3d0 (iperf) vs 0xfffff800b877e9c0 (gve). Especially given that
we know both iperf and gve are getting at the mbuf zone.
As advised in comment #4 and comment #5, I looked at the uma, page and vmstat
outputs:
```
[root@FreeBSD14 ~]# vmstat -z | grep -E "^ITEM|mbuf"
ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP XDOM
mbuf_packet: 256, 0, 16768, 9902,9837509268, 0, 0, 0
mbuf: 256,6513896, 24752, 56286,224742586944, 0, 0,
0
mbuf_cluster: 2048,1017796, 26670, 254, 26670, 0, 0, 0
mbuf_jumbo_page: 4096, 508898, 21827, 25925,104428955976, 0, 0,
0
mbuf_jumbo_9k: 9216, 150784, 0, 0, 0, 0, 0, 0
mbuf_jumbo_16k: 16384, 84816, 0, 0, 0, 0, 0, 0
```
```
[root@FreeBSD14 ~]# netstat -m
41520/66188/107708 mbufs in use (current/cache/total)
16768/10156/26924/1017796 mbuf clusters in use (current/cache/total/max)
16768/9902 mbuf+clusters out of packet secondary zone in use (current/cache)
21827/25925/47752/508898 4k (page size) jumbo clusters in use
(current/cache/total/max)
0/0/0/150784 9k jumbo clusters in use (current/cache/total/max)
0/0/0/84816 16k jumbo clusters in use (current/cache/total/max)
131224K/140559K/271783K bytes allocated to network (current/cache/total)
...
```
```
db> show page
vm_cnt.v_free_count: 3261805
vm_cnt.v_inactive_count: 156959
vm_cnt.v_active_count: 36342
vm_cnt.v_laundry_count: 0
vm_cnt.v_wire_count: 649216
vm_cnt.v_free_reserved: 5367
vm_cnt.v_free_min: 25722
vm_cnt.v_free_target: 86787
vm_cnt.v_inactive_target: 130180
db> show uma
Zone Size Used Free Requests Sleeps Bucket Total
Mem XFree
FFS inode 1168 349865 331 864424 0 8
409028928 0
VNODE 600 349906 665 864497 0 16
210342600 0
mbuf_jumbo_page 4096 21827 25925 104428955976 0 254
195592192 0
FFS2 dinode 256 349865 1120 864424 0 62
89852160 0
mbuf_cluster 2048 26670 254 26670 0 254
55140352 0
S VFS Cache 104 356473 7124 870718 0 126
37814088 0
VM OBJECT 264 124446 1314 174315 0 30
33200640 0
256 Bucket 2048 1149 10785 522000068 0 254
24440832 0
mbuf 256 24752 56286 224742586945 0 254
20745728 0
BUF TRIE 144 6267 99041 12431 0 62
15164352 0
UMA Slabs 0 112 120097 29 156673 0 126
13454112 0
RADIX NODE 144 59629 5103 154477 0 62
9321408 0
vmem btag 56 135753 3691 135883 0 254
7808864 0
socket 960 112 8016 2267 0 254
7802880 0
pbuf 2512 0 2962 0 0 0
7440544 0
mbuf_packet 256 16768 9902 9837509269 0 254
6827520 0
malloc-65536 65536 44 33 700 0 1
5046272 0
L VFS Cache 320 6359 4237 19741 0 30
3390720 0
DIRHASH 1024 2408 280 2408 0 16
2752512 0
malloc-4096 4096 547 67 4542 0 2
2514944 0
FPU_save_area 2696 692 85 2026 0 4
2094792 0
malloc-16384 16384 19 105 304 0 1
2031616 0
malloc-128 128 11601 3031 83012 0 126
1872896 0
unpcb 256 45 6825 1881 0 254
1758720 0
128 Bucket 1024 466 1097 755733 0 18
1600512 0
THREAD 1824 690 142 931 0 8
1517568 0
malloc-32768 32768 36 10 157 0 1
1507328 0
malloc-256 256 2141 1579 15213 0 62
952320 0
64 Bucket 512 624 1056 206913 0 30
860160 0
MAP ENTRY 96 3269 5425 163701 0 126
834624 0
malloc-64 64 5034 7692 306248 0 254
814464 0
32 Bucket 256 616 2324 55277 0 62
752640 0
malloc-1024 1024 206 466 12113 0 16
688128 0
NAMEI 1024 0 608 1314258 0 16
622592 0
UMA Zones 4608 127 3 127 0 1
599040 0
malloc-2048 2048 49 215 528 0 8
540672 0
PROC 1376 113 272 2881 0 8
529760 0
lkpicurr 168 2 3118 2 0 62
524160 0
filedesc0 1072 114 362 2882 0 8
510272 0
2 Bucket 32 10694 4804 139800 0 254
495936 0
malloc-512 512 494 466 887 0 30
491520 0
PGRP 120 21 3906 582 0 126
471240 0
ksiginfo 112 267 3909 1064 0 126
467712 0
g_bio 400 0 1140 570886 0 30
456000 0
malloc-384 384 561 549 1297 0 30
426240 0
VMSPACE 616 98 592 2866 0 16
425040 0
ertt_txseginfo 40 989 9515 12981364553 0 254
420160 0
malloc-32 32 5719 7007 14479 0 254
407232 0
pipe 728 78 472 1557 0 16
400400 0
4 Bucket 48 113 8035 570 0 254
391104 0
SLEEPQUEUE 88 833 3583 833 0 126
388608 0
tcp_inpcb 1304 65 232 265 0 8
387288 0
PWD 40 8 8981 249907 0 254
359560 0
16 Bucket 144 376 2032 100944 0 62
346752 0
TURNSTILE 136 833 1603 833 0 62
331296 0
8 Bucket 80 334 3766 109633 0 126
328000 0
rl_entry 40 225 7956 283 0 254
327240 0
Files 80 308 3742 335446 0 126
324000 0
clpbuf 2512 0 128 2197 0 4
321536 0
sackhole 32 10 9440 14771020 0 254
302400 0
ertt 72 65 3967 265 0 126
290304 0
DEVCTL 1024 0 276 187 0 0
282624 0
malloc-16 16 10380 6620 91137 0 254
272000 0
tcp_inpcb ports 32 65 8125 265 0 254
262080 0
malloc-8192 8192 27 4 195 0 1
253952 0
ttyoutq 256 105 825 423 0 62
238080 0
udp_inpcb 424 2 538 87 0 30
228960 0
kenv 258 9 681 1932 0 30
178020 0
lkpimm 56 1 3095 1 0 254
173376 0
cpuset 200 67 749 67 0 62
163200 0
ttyinq 160 199 801 810 0 62
160000 0
netlink 2048 0 64 39 0 8
131072 0
Mountpoints 2944 9 23 9 0 4
94208 0
pcpu-64 64 459 821 459 0 254
81920 0
routing nhops 256 7 308 12 0 62
80640 0
pcpu-8 8 3823 5905 3825 0 254
77824 0
rtentry 168 10 302 12 0 62
52416 0
UMA Kegs 384 101 2 101 0 30
39552 0
pcpu-16 16 32 2016 32 0 254
32768 0
ripcb 392 0 63 3 0 30
24696 0
SMR CPU 32 7 760 7 0 254
24544 0
SMR SHARED 24 7 760 7 0 254
18408 0
epoch_record pcpu 256 4 60 4 0 62
16384 0
TMPFS node 232 1 67 1 0 62
15776 0
vmem 1856 1 7 1 0 8
14848 0
udp_inpcb ports 32 1 377 1 0 254
12096 0
hostcache 64 0 126 1 0 120
8064 0
vtnet_tx_hdr 24 0 167 0 0 254
4008 0
UMA Slabs 1 176 18 4 18 0 62
3872 0
KMAP ENTRY 96 31 8 34 0 0
3744 0
FFS1 dinode 128 0 0 0 0 126
0 0
swblk 136 0 0 0 0 62
0 0
swpctrie 144 0 0 0 0 62
0 0
da_ccb 536 0 0 0 0 16
0 0
ada_ccb 272 0 0 0 0 30
0 0
tfo_ccache_entries 80 0 0 0 0 126
0 0
tfo 4 0 0 0 0 254
0 0
syncache 168 0 0 0 0 120
0 0
ipq 56 0 0 0 0 248
0 0
tcp_log_id_node 120 0 0 0 0 126
0 0
tcp_log_id_bucket 176 0 0 0 0 62
0 0
tcp_log 416 0 0 0 0 254
0 0
tcpreass 48 0 0 0 0 254
0 0
udplite_inpcb ports 32 0 0 0 0 254
0 0
udplite_inpcb 424 0 0 0 0 30
0 0
ripcb ports 32 0 0 0 0 254
0 0
IPsec SA lft_c 16 0 0 0 0 254
0 0
KNOTE 160 0 0 0 0 62
0 0
itimer 352 0 0 0 0 30
0 0
AIOLIO 272 0 0 0 0 30
0 0
AIOCB 552 0 0 0 0 16
0 0
AIO 208 0 0 0 0 62
0 0
NCLNODE 760 0 0 0 0 16
0 0
LTS VFS Cache 360 0 0 0 0 30
0 0
STS VFS Cache 144 0 0 0 0 62
0 0
cryptop 280 0 0 0 0 30
0 0
linux_dma_object 32 0 0 0 0 254
0 0
linux_dma_pctrie 144 0 0 0 0 62
0 0
IOMMU_MAP_ENTRY 104 0 0 0 0 126
0 0
mbuf_jumbo_16k 16384 0 0 0 0 254
0 0
mbuf_jumbo_9k 9216 0 0 0 0 254
0 0
audit_record 1280 0 0 0 0 8
0 0
domainset 40 0 0 0 0 254
0 0
MAC labels 40 0 0 0 0 254
0 0
vnpbuf 2512 0 0 0 0 16
0 0
nfspbuf 2512 0 0 0 0 4
0 0
swwbuf 2512 0 0 0 0 2
0 0
swrbuf 2512 0 0 0 0 4
0 0
umtx_shm 88 0 0 0 0 126
0 0
umtx pi 96 0 0 0 0 126
0 0
rangeset pctrie nodes 144 0 0 0 0 62
0 0
pcpu-32 32 0 0 0 0 254
0 0
pcpu-4 4 0 0 0 0 254
0 0
fakepg 104 0 0 0 0 126
0 0
UMA Hash 256 0 0 0 0 62
0 0
```
But I'm not sure if the counts hint at a leak or if they are just representing
the memory footprint of the blocked threads.
--
You are receiving this mail because:
You are the assignee for the bug.