Date: Sat, 9 Mar 2024 16:27:03 -0800 From: Brad Ackerman <brad@facefault.org> To: freebsd-virtualization@freebsd.org Subject: 14.0-RELEASE and 15-CURRENT have high interrupt count/latency in Xen domu (xcp-ng host) Message-ID: <92898E90-B3BA-4B89-8929-34F397BDE9BF@facefault.org>
next in thread | raw e-mail | index | archive | help
On an xcp-ng VM running 14.0-RELEASE (also tested on p5 and 15-CURRENT), = top shows a lot of CPU time in interrupts (always a double-digit = percentage, usually around 70% but it varies all over the place). Based = on dtrace, the problem appears to be in ata_interrupt and I=E2=80=99d = guess it=E2=80=99s mutex-related. What else do I want to do to investigate this issue? All of below is on an instance with 1GB RAM and 2 vCPUs; the host is = xcp-ng 8.2 with all available patches. dtrace -n '::*interrupt*:entry { self->ts =3D timestamp; } = ::*interrupt*:return /self->ts/ { @[probefunc] =3D quantize(timestamp - = self->ts); self->ts =3D 0; }' run for one minute on an otherwise idle VM produces: zio_delay_interrupt value ------------- Distribution ------------- count 512 | 0 1024 |@@@@@@@ 2 2048 |@@@ 1 4096 | 0 8192 |@@@@@@@@@@@@@@@@@@@@ 6 16384 |@@@@@@@@@@ 3 32768 | 0 ata_interrupt value ------------- Distribution ------------- count 65536 | 0 131072 |@@@ 3 262144 |@@@@@@@@@@@@@@@@@ 19 524288 |@@@@@@@@ 9 1048576 |@@@@@@@@@@@@ 13 2097152 | 0 On CURRENT, that dtrace invocation returns nothing at all; dtrace -l = shows an entry but not return for ata_interrupt so that appears to be an = fbt issue.=20 The disk does appear to be using the PV driver: xbd0: 32768MB <Virtual Block Device> at device/vbd/768 on xenbusb_front0 xbd0: attaching as ada0 xbd0: features: write_barrier xbd0: synchronize cache commands enabled. There are two mutex warnings that show up on CURRENT, but they seem = unrelated: Invoking IPv6 network device address event may sleep with the following = non-sleepable locks held: exclusive sleep mutex xnrx_1 (netfront receive lock) r =3D 0 = (0xfffffe00496d2d48) locked @ = /usr/src/sys/dev/xen/netfront/netfront.c:679 stack backtrace: #0 0xffffffff80bc9a35 at witness_debugger+0x65 #1 0xffffffff80bcab99 at witness_warn+0x3e9 #2 0xffffffff80d793c4 at in6_update_ifa+0xcb4 #3 0xffffffff80da4f80 at in6_ifadd+0x1e0 #4 0xffffffff80da16d9 at nd6_ra_input+0x1029 #5 0xffffffff80d73de0 at icmp6_input+0x870 #6 0xffffffff80d8c4ae at ip6_input+0xc8e #7 0xffffffff80cadbbd at netisr_dispatch_src+0xad #8 0xffffffff80c9065a at ether_demux+0x16a #9 0xffffffff80c91d73 at ether_nh_input+0x403 #10 0xffffffff80cadbbd at netisr_dispatch_src+0xad #11 0xffffffff80c90ab9 at ether_input+0xd9 #12 0xffffffff809c6ebc at xn_rxeof+0x5dc #13 0xffffffff809c8238 at xn_intr+0x48 #14 0xffffffff80b0d556 at ithread_loop+0x266 #15 0xffffffff80b09972 at fork_exit+0x82 #16 0xffffffff8102e06e at fork_trampoline+0xe lock order reversal: (sleepable after non-sleepable) 1st 0xfffffe00496d2d48 xnrx_1 (netfront receive lock, sleep mutex) @ = /usr/src/sys/dev/xen/netfront/netfront.c:679 2nd 0xffffffff81abe830 in6_multi_sx (in6_multi_sx, sx) @ = /usr/src/sys/netinet6/in6_mcast.c:1217 lock order netfront receive lock -> in6_multi_sx attempted at: #0 0xffffffff80bc95f3 at witness_checkorder+0xb63 #1 0xffffffff80b5f0fd at _sx_xlock+0x5d #2 0xffffffff80d81b11 at in6_joingroup+0x31 #3 0xffffffff80d7977d at in6_update_ifa+0x106d #4 0xffffffff80da4f80 at in6_ifadd+0x1e0 #5 0xffffffff80da16d9 at nd6_ra_input+0x1029 #6 0xffffffff80d73de0 at icmp6_input+0x870 #7 0xffffffff80d8c4ae at ip6_input+0xc8e #8 0xffffffff80cadbbd at netisr_dispatch_src+0xad #9 0xffffffff80c9065a at ether_demux+0x16a #10 0xffffffff80c91d73 at ether_nh_input+0x403 #11 0xffffffff80cadbbd at netisr_dispatch_src+0xad #12 0xffffffff80c90ab9 at ether_input+0xd9 #13 0xffffffff809c6ebc at xn_rxeof+0x5dc #14 0xffffffff809c8238 at xn_intr+0x48 #15 0xffffffff80b0d556 at ithread_loop+0x266 #16 0xffffffff80b09972 at fork_exit+0x82 #17 0xffffffff8102e06e at fork_trampoline+0xe (The "non-sleepable locks held=E2=80=9D backtrace shows up a second time = but without a lock reversal.) systat -vmstat on RELEASE: 3 users Load 0.13 0.19 0.22 Mar 10 00:21:55 Mem usage: 89%Phy 78%Kmem VN PAGER SWAP = PAGER Mem: REAL VIRTUAL in out in = out Tot Share Tot Share Free count Act 47944K 20684K 406M 24480K 107M pages All 50736K 23368K 446M 57372K ioflt = Interrupts Proc: cow 69 = total r p d s w Csw Trp Sys Int Sof Flt zfod = atkbd0 1 31 91 2 67 36 1 ozfod = ata1 15 %ozfod = uhci0 23 0.0%Sys 78.9%Intr 0.0%User 0.0%Nice 21.1%Idle daefr 17 = cpu0:xen | | | | | | | | | | | prcfr 17 = cpu1:xen +++++++++++++++++++++++++++++++++++++++ totfr = cpu0:r dtbuf react = cpu0:itlb Namei Name-cache Dir-cache 62482 maxvn pdwak 4 = cpu0:b Calls hits % hits % 17168 numvn 5 pdpgs = cpu1:r 7 7 100 16002 frevn intrn = cpu1:itlb 772M wire 6 = cpu1:b Disks ada0 cd0 pass0 13M act 13 = xen_et0:c0 KB/t 0.00 0.00 0.00 60M inact 11 = xen_et0:c1 tps 0 0 0 0 laund = xenstore0 MB/s 0.00 0.00 0.00 107M free = xbd0 2113 %busy 0 0 0 0 buf 1 = xn0 2114 = xn0 2115 = xn0 2116 = xn0 2117 and on CURRENT: 4 users Load 0.15 0.12 0.16 Mar 10 00:23:11 Mem usage: 35%Phy 8%Kmem VN PAGER SWAP = PAGER Mem: REAL VIRTUAL in out in = out Tot Share Tot Share Free count Act 103M 14608K 454M 16848K 626M pages All 105M 16908K 486M 49620K ioflt = Interrupts Proc: cow 274 = total r p d s w Csw Trp Sys Int Sof Flt zfod = atkbd0 1 29 272 1 49 137 1 ozfod = uhci0 23 %ozfod 114 = cpu0:xen 0.0%Sys 56.0%Intr 0.0%User 0.0%Nice 44.0%Idle daefr 23 = cpu1:xen | | | | | | | | | | | prcfr 2 = cpu0:r ++++++++++++++++++++++++++++ totfr = cpu0:itlb 6 dtbuf react 12 = cpu0:b Namei Name-cache Dir-cache 62833 maxvn pdwak 1 = cpu1:r Calls hits % hits % 920 numvn 10 pdpgs = cpu1:itlb 7 7 100 126 frevn intrn 17 = cpu1:b 217M wire 100 = xen_et0:c0 Disks ada0 31M act 4 = xen_et0:c1 KB/t 0.00 84M inact = xenstore0 tps 0 0 laund = xbd0 2113 MB/s 0.00 626M free 1 = xn0 2114 %busy 0 80M buf = xn0 2115 = xn0 2116 = xn0 2117 =E2=80=94=20 Brad Ackerman brad@facefault.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?92898E90-B3BA-4B89-8929-34F397BDE9BF>