mm/page_alloc: fix stalls/soft lockups with huge VMs
Subsystems (2)
cover mm/page_alloc: fix stalls/soft lockups with huge VMs
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without CONFIG_PREEMPT.
David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initialization mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous()
mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+)
Signature · 1 line
2.25.1
PATCH 1/2 mm/page_alloc: fix RCU stalls during deferred page initialization
With CONFIG_DEFERRED_STRUCT_PAGE_INIT and without CONFIG_PREEMPT, it can happen that we get RCU stalls detected when booting up.
[ 60.474005] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 60.475000] rcu: 1-...0: (0 ticks this GP) idle=02a/1/0x4000000000000000 softirq=1/1 fqs=15000 [ 60.475000] rcu: (detected by 0, t=60002 jiffies, g=-1199, q=1) [ 60.475000] Sending NMI from CPU 0 to CPUs 1: [ 1.760091] NMI backtrace for cpu 1 [ 1.760091] CPU: 1 PID: 20 Comm: pgdatinit0 Not tainted 4.18.0-147.9.1.el8_1.x86_64 #1 [ 1.760091] Hardware name: Red Hat KVM, BIOS 1.13.0-1.module+el8.2.0+5520+4e5817f3 04/01/2014 [ 1.760091] RIP: 0010:__init_single_page.isra.65+0x10/0x4f [ 1.760091] Code: 48 83 cf 63 48 89 f8 0f 1f 40 00 48 89 c6 48 89 d7 e8 6b 18 80 ff 66 90 5b c3 31 c0 b9 10 00 00 00 49 89 f8 48 c1 e6 33 f3 ab <b8> 07 00 00 00 48 c1 e2 36 41 c7 40 34 01 00 00 00 48 c1 e0 33 41 [ 1.760091] RSP: 0000:ffffba783123be40 EFLAGS: 00000006 [ 1.760091] RAX: 0000000000000000 RBX: fffffad34405e300 RCX: 0000000000000000 [ 1.760091] RDX: 0000000000000000 RSI: 0010000000000000 RDI: fffffad34405e340 [ 1.760091] RBP: 0000000033f3177e R08: fffffad34405e300 R09: 0000000000000002 [ 1.760091] R10: 000000000000002b R11: ffff98afb691a500 R12: 0000000000000002 [ 1.760091] R13: 0000000000000000 R14: 000000003f03ea00 R15: 000000003e10178c [ 1.760091] FS: 0000000000000000(0000) GS:ffff9c9ebeb00000(0000) knlGS:0000000000000000 [ 1.760091] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.760091] CR2: 00000000ffffffff CR3: 000000a1cf20a001 CR4: 00000000003606e0 [ 1.760091] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.760091] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.760091] Call Trace: [ 1.760091] deferred_init_pages+0x8f/0xbf [ 1.760091] deferred_init_memmap+0x184/0x29d [ 1.760091] ? deferred_free_pages.isra.97+0xba/0xba [ 1.760091] kthread+0x112/0x130 [ 1.760091] ? kthread_flush_work_fn+0x10/0x10 [ 1.760091] ret_from_fork+0x35/0x40 [ 89.123011] node 0 initialised, 1055935372 pages in 88650ms
The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Adding the cond_resched() makes RCU happy.
--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)
mm/page_alloc.c +1 -0
@@ -1877,6 +1877,7 @@ static int __init deferred_init_memmap(void *data) prev_nr_pages = nr_pages; pgdat->first_deferred_pfn = spfn;pgdat_resize_unlock (pgdat, &flags); +cond_resched (); goto again; } }
Signature · 1 line
2.25.1
Re: [PATCH v1 1/2] mm/page_alloc: fix RCU stalls during deferred page initialization
Quoted 40 lines · David Hildenbrand
With
CONFIG_DEFERRED_STRUCT_PAGE_INITand withoutCONFIG_PREEMPT, it can happen that we get RCU stalls detected when booting up.[ 60.474005] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 60.475000] rcu: 1-...0: (0 ticks this GP) idle=02a/1/0x4000000000000000 softirq=1/1 fqs=15000 [ 60.475000] rcu: (detected by 0, t=60002 jiffies, g=-1199, q=1) [ 60.475000] Sending NMI from CPU 0 to CPUs 1: [ 1.760091] NMI backtrace for cpu 1 [ 1.760091] CPU: 1 PID: 20 Comm: pgdatinit0 Not tainted 4.18.0-147.9.1.el8_1.x86_64 #1 [ 1.760091] Hardware name: Red Hat KVM, BIOS 1.13.0-1.module+el8.2.0+5520+4e5817f3 04/01/2014 [ 1.760091] RIP: 0010:__init_single_page.isra.65+0x10/0x4f [ 1.760091] Code: 48 83 cf 63 48 89 f8 0f 1f 40 00 48 89 c6 48 89 d7 e8 6b 18 80 ff 66 90 5b c3 31 c0 b9 10 00 00 00 49 89 f8 48 c1 e6 33 f3 ab <b8> 07 00 00 00 48 c1 e2 36 41 c7 40 34 01 00 00 00 48 c1 e0 33 41 [ 1.760091] RSP: 0000:ffffba783123be40 EFLAGS: 00000006 [ 1.760091] RAX: 0000000000000000 RBX: fffffad34405e300 RCX: 0000000000000000 [ 1.760091] RDX: 0000000000000000 RSI: 0010000000000000 RDI: fffffad34405e340 [ 1.760091] RBP: 0000000033f3177e R08: fffffad34405e300 R09: 0000000000000002 [ 1.760091] R10: 000000000000002b R11: ffff98afb691a500 R12: 0000000000000002 [ 1.760091] R13: 0000000000000000 R14: 000000003f03ea00 R15: 000000003e10178c [ 1.760091] FS: 0000000000000000(0000) GS:ffff9c9ebeb00000(0000) knlGS:0000000000000000 [ 1.760091] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.760091] CR2: 00000000ffffffff CR3: 000000a1cf20a001 CR4: 00000000003606e0 [ 1.760091] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.760091] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.760091] Call Trace: [ 1.760091] deferred_init_pages+0x8f/0xbf [ 1.760091] deferred_init_memmap+0x184/0x29d [ 1.760091] ? deferred_free_pages.isra.97+0xba/0xba [ 1.760091] kthread+0x112/0x130 [ 1.760091] ? kthread_flush_work_fn+0x10/0x10 [ 1.760091] ret_from_fork+0x35/0x40 [ 89.123011] node 0 initialised, 1055935372 pages in 88650msThe issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Adding the
cond_resched()makes RCU happy.
Quoted 11 lines
Reported-by Yiqian Wei <[email protected]>Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>
Re: [PATCH v1 1/2] mm/page_alloc: fix RCU stalls during deferred page initialization
In reply to David HildenbrandQuoted 59 lines · David Hildenbrand
With
CONFIG_DEFERRED_STRUCT_PAGE_INITand withoutCONFIG_PREEMPT, it can happen that we get RCU stalls detected when booting up.[ 60.474005] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 60.475000] rcu: 1-...0: (0 ticks this GP) idle=02a/1/0x4000000000000000 softirq=1/1 fqs=15000 [ 60.475000] rcu: (detected by 0, t=60002 jiffies, g=-1199, q=1) [ 60.475000] Sending NMI from CPU 0 to CPUs 1: [ 1.760091] NMI backtrace for cpu 1 [ 1.760091] CPU: 1 PID: 20 Comm: pgdatinit0 Not tainted 4.18.0-147.9.1.el8_1.x86_64 #1 [ 1.760091] Hardware name: Red Hat KVM, BIOS 1.13.0-1.module+el8.2.0+5520+4e5817f3 04/01/2014 [ 1.760091] RIP: 0010:__init_single_page.isra.65+0x10/0x4f [ 1.760091] Code: 48 83 cf 63 48 89 f8 0f 1f 40 00 48 89 c6 48 89 d7 e8 6b 18 80 ff 66 90 5b c3 31 c0 b9 10 00 00 00 49 89 f8 48 c1 e6 33 f3 ab <b8> 07 00 00 00 48 c1 e2 36 41 c7 40 34 01 00 00 00 48 c1 e0 33 41 [ 1.760091] RSP: 0000:ffffba783123be40 EFLAGS: 00000006 [ 1.760091] RAX: 0000000000000000 RBX: fffffad34405e300 RCX: 0000000000000000 [ 1.760091] RDX: 0000000000000000 RSI: 0010000000000000 RDI: fffffad34405e340 [ 1.760091] RBP: 0000000033f3177e R08: fffffad34405e300 R09: 0000000000000002 [ 1.760091] R10: 000000000000002b R11: ffff98afb691a500 R12: 0000000000000002 [ 1.760091] R13: 0000000000000000 R14: 000000003f03ea00 R15: 000000003e10178c [ 1.760091] FS: 0000000000000000(0000) GS:ffff9c9ebeb00000(0000) knlGS:0000000000000000 [ 1.760091] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.760091] CR2: 00000000ffffffff CR3: 000000a1cf20a001 CR4: 00000000003606e0 [ 1.760091] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.760091] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.760091] Call Trace: [ 1.760091] deferred_init_pages+0x8f/0xbf [ 1.760091] deferred_init_memmap+0x184/0x29d [ 1.760091] ? deferred_free_pages.isra.97+0xba/0xba [ 1.760091] kthread+0x112/0x130 [ 1.760091] ? kthread_flush_work_fn+0x10/0x10 [ 1.760091] ret_from_fork+0x35/0x40 [ 89.123011] node 0 initialised, 1055935372 pages in 88650msThe issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Adding the
cond_resched()makes RCU happy.Reported-by Yiqian Wei <[email protected]>Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +0
-0
mm/page_alloc.c static int __init deferred_init_memmap(void *data) · line 1881
Quoted 5 lines
mm/page_alloc.c +1
-0@@ -1877,6 +1877,7 @@ static int __init deferred_init_memmap(void *data) prev_nr_pages = nr_pages; pgdat->first_deferred_pfn = spfn;pgdat_resize_unlock (pgdat, &flags); +cond_resched (); goto again;
Re: [PATCH v1 1/2] mm/page_alloc: fix RCU stalls during deferred page initialization
In reply to David HildenbrandQuoted 59 lines · David Hildenbrand
With
CONFIG_DEFERRED_STRUCT_PAGE_INITand withoutCONFIG_PREEMPT, it can happen that we get RCU stalls detected when booting up.[ 60.474005] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 60.475000] rcu: 1-...0: (0 ticks this GP) idle=02a/1/0x4000000000000000 softirq=1/1 fqs=15000 [ 60.475000] rcu: (detected by 0, t=60002 jiffies, g=-1199, q=1) [ 60.475000] Sending NMI from CPU 0 to CPUs 1: [ 1.760091] NMI backtrace for cpu 1 [ 1.760091] CPU: 1 PID: 20 Comm: pgdatinit0 Not tainted 4.18.0-147.9.1.el8_1.x86_64 #1 [ 1.760091] Hardware name: Red Hat KVM, BIOS 1.13.0-1.module+el8.2.0+5520+4e5817f3 04/01/2014 [ 1.760091] RIP: 0010:__init_single_page.isra.65+0x10/0x4f [ 1.760091] Code: 48 83 cf 63 48 89 f8 0f 1f 40 00 48 89 c6 48 89 d7 e8 6b 18 80 ff 66 90 5b c3 31 c0 b9 10 00 00 00 49 89 f8 48 c1 e6 33 f3 ab <b8> 07 00 00 00 48 c1 e2 36 41 c7 40 34 01 00 00 00 48 c1 e0 33 41 [ 1.760091] RSP: 0000:ffffba783123be40 EFLAGS: 00000006 [ 1.760091] RAX: 0000000000000000 RBX: fffffad34405e300 RCX: 0000000000000000 [ 1.760091] RDX: 0000000000000000 RSI: 0010000000000000 RDI: fffffad34405e340 [ 1.760091] RBP: 0000000033f3177e R08: fffffad34405e300 R09: 0000000000000002 [ 1.760091] R10: 000000000000002b R11: ffff98afb691a500 R12: 0000000000000002 [ 1.760091] R13: 0000000000000000 R14: 000000003f03ea00 R15: 000000003e10178c [ 1.760091] FS: 0000000000000000(0000) GS:ffff9c9ebeb00000(0000) knlGS:0000000000000000 [ 1.760091] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.760091] CR2: 00000000ffffffff CR3: 000000a1cf20a001 CR4: 00000000003606e0 [ 1.760091] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.760091] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.760091] Call Trace: [ 1.760091] deferred_init_pages+0x8f/0xbf [ 1.760091] deferred_init_memmap+0x184/0x29d [ 1.760091] ? deferred_free_pages.isra.97+0xba/0xba [ 1.760091] kthread+0x112/0x130 [ 1.760091] ? kthread_flush_work_fn+0x10/0x10 [ 1.760091] ret_from_fork+0x35/0x40 [ 89.123011] node 0 initialised, 1055935372 pages in 88650msThe issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Adding the
cond_resched()makes RCU happy.Reported-by Yiqian Wei <[email protected]>Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +0
-0
mm/page_alloc.c static int __init deferred_init_memmap(void *data) · line 1883
Quoted 7 lines
mm/page_alloc.c +1
-0@@ -1877,6 +1877,7 @@ static int __init deferred_init_memmap(void *data) prev_nr_pages = nr_pages; pgdat->first_deferred_pfn = spfn;pgdat_resize_unlock (pgdat, &flags); +cond_resched (); goto again; } }
Re: [PATCH v1 1/2] mm/page_alloc: fix RCU stalls during deferred page initialization
In reply to David HildenbrandQuoted 59 lines
With
CONFIG_DEFERRED_STRUCT_PAGE_INITand withoutCONFIG_PREEMPT, it can happen that we get RCU stalls detected when booting up.[ 60.474005] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 60.475000] rcu: 1-...0: (0 ticks this GP) idle=02a/1/0x4000000000000000 softirq=1/1 fqs=15000 [ 60.475000] rcu: (detected by 0, t=60002 jiffies, g=-1199, q=1) [ 60.475000] Sending NMI from CPU 0 to CPUs 1: [ 1.760091] NMI backtrace for cpu 1 [ 1.760091] CPU: 1 PID: 20 Comm: pgdatinit0 Not tainted 4.18.0-147.9.1.el8_1.x86_64 #1 [ 1.760091] Hardware name: Red Hat KVM, BIOS 1.13.0-1.module+el8.2.0+5520+4e5817f3 04/01/2014 [ 1.760091] RIP: 0010:__init_single_page.isra.65+0x10/0x4f [ 1.760091] Code: 48 83 cf 63 48 89 f8 0f 1f 40 00 48 89 c6 48 89 d7 e8 6b 18 80 ff 66 90 5b c3 31 c0 b9 10 00 00 00 49 89 f8 48 c1 e6 33 f3 ab <b8> 07 00 00 00 48 c1 e2 36 41 c7 40 34 01 00 00 00 48 c1 e0 33 41 [ 1.760091] RSP: 0000:ffffba783123be40 EFLAGS: 00000006 [ 1.760091] RAX: 0000000000000000 RBX: fffffad34405e300 RCX: 0000000000000000 [ 1.760091] RDX: 0000000000000000 RSI: 0010000000000000 RDI: fffffad34405e340 [ 1.760091] RBP: 0000000033f3177e R08: fffffad34405e300 R09: 0000000000000002 [ 1.760091] R10: 000000000000002b R11: ffff98afb691a500 R12: 0000000000000002 [ 1.760091] R13: 0000000000000000 R14: 000000003f03ea00 R15: 000000003e10178c [ 1.760091] FS: 0000000000000000(0000) GS:ffff9c9ebeb00000(0000) knlGS:0000000000000000 [ 1.760091] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.760091] CR2: 00000000ffffffff CR3: 000000a1cf20a001 CR4: 00000000003606e0 [ 1.760091] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.760091] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.760091] Call Trace: [ 1.760091] deferred_init_pages+0x8f/0xbf [ 1.760091] deferred_init_memmap+0x184/0x29d [ 1.760091] ? deferred_free_pages.isra.97+0xba/0xba [ 1.760091] kthread+0x112/0x130 [ 1.760091] ? kthread_flush_work_fn+0x10/0x10 [ 1.760091] ret_from_fork+0x35/0x40 [ 89.123011] node 0 initialised, 1055935372 pages in 88650msThe issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Adding the
cond_resched()makes RCU happy.Reported-by Yiqian Wei <[email protected]>Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +0
-0
mm/page_alloc.c static int __init deferred_init_memmap(void *data)
Quoted 8 lines
mm/page_alloc.c +1
-1@@ -1877,6 +1877,7 @@ static int __init deferred_init_memmap(void *data) prev_nr_pages = nr_pages; pgdat->first_deferred_pfn = spfn;pgdat_resize_unlock (pgdat, &flags); +cond_resched (); goto again; } } --
Quoted 3 lines
2.25.1
Re: [PATCH v1 1/2] mm/page_alloc: fix RCU stalls during deferred page initialization
In reply to David HildenbrandQuoted 32 lines · David Hildenbrand
With
CONFIG_DEFERRED_STRUCT_PAGE_INITand withoutCONFIG_PREEMPT, it can happen that we get RCU stalls detected when booting up.[ 60.474005] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 60.475000] rcu: 1-...0: (0 ticks this GP) idle=02a/1/0x4000000000000000 softirq=1/1 fqs=15000 [ 60.475000] rcu: (detected by 0, t=60002 jiffies, g=-1199, q=1) [ 60.475000] Sending NMI from CPU 0 to CPUs 1: [ 1.760091] NMI backtrace for cpu 1 [ 1.760091] CPU: 1 PID: 20 Comm: pgdatinit0 Not tainted 4.18.0-147.9.1.el8_1.x86_64 #1 [ 1.760091] Hardware name: Red Hat KVM, BIOS 1.13.0-1.module+el8.2.0+5520+4e5817f3 04/01/2014 [ 1.760091] RIP: 0010:__init_single_page.isra.65+0x10/0x4f [ 1.760091] Code: 48 83 cf 63 48 89 f8 0f 1f 40 00 48 89 c6 48 89 d7 e8 6b 18 80 ff 66 90 5b c3 31 c0 b9 10 00 00 00 49 89 f8 48 c1 e6 33 f3 ab <b8> 07 00 00 00 48 c1 e2 36 41 c7 40 34 01 00 00 00 48 c1 e0 33 41 [ 1.760091] RSP: 0000:ffffba783123be40 EFLAGS: 00000006 [ 1.760091] RAX: 0000000000000000 RBX: fffffad34405e300 RCX: 0000000000000000 [ 1.760091] RDX: 0000000000000000 RSI: 0010000000000000 RDI: fffffad34405e340 [ 1.760091] RBP: 0000000033f3177e R08: fffffad34405e300 R09: 0000000000000002 [ 1.760091] R10: 000000000000002b R11: ffff98afb691a500 R12: 0000000000000002 [ 1.760091] R13: 0000000000000000 R14: 000000003f03ea00 R15: 000000003e10178c [ 1.760091] FS: 0000000000000000(0000) GS:ffff9c9ebeb00000(0000) knlGS:0000000000000000 [ 1.760091] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.760091] CR2: 00000000ffffffff CR3: 000000a1cf20a001 CR4: 00000000003606e0 [ 1.760091] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.760091] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.760091] Call Trace: [ 1.760091] deferred_init_pages+0x8f/0xbf [ 1.760091] deferred_init_memmap+0x184/0x29d [ 1.760091] ? deferred_free_pages.isra.97+0xba/0xba [ 1.760091] kthread+0x112/0x130 [ 1.760091] ? kthread_flush_work_fn+0x10/0x10 [ 1.760091] ret_from_fork+0x35/0x40 [ 89.123011] node 0 initialised, 1055935372 pages in 88650ms
Quoted 6 lines
The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Adding the
cond_resched()makes RCU happy.
I believe the patch you depend on is a wrong way to go so please let's wait until that settles down. But your cond_resched makes a perfect sense. Just have it called $FOO pages - e.g. hotplug is once per section. This is not bound to SPARSEMEM so you would have to use a differen't constant but something along those lines would work.
Quoted 30 lines
Reported-by Yiqian Wei <[email protected]>Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +1
-0@@ -1877,6 +1877,7 @@ static int __init deferred_init_memmap(void *data) prev_nr_pages = nr_pages; pgdat->first_deferred_pfn = spfn;pgdat_resize_unlock (pgdat, &flags); +cond_resched (); goto again; } }Signature · 1 line
2.25.1
Signature · 2 lines
Michal Hocko SUSE Labs
Re: [PATCH v1 1/2] mm/page_alloc: fix RCU stalls during deferred page initialization
Quoted 38 lines · Michal Hocko
Quoted 37 lines · David Hildenbrand
With
CONFIG_DEFERRED_STRUCT_PAGE_INITand withoutCONFIG_PREEMPT, it can happen that we get RCU stalls detected when booting up.[ 60.474005] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 60.475000] rcu: 1-...0: (0 ticks this GP) idle=02a/1/0x4000000000000000 softirq=1/1 fqs=15000 [ 60.475000] rcu: (detected by 0, t=60002 jiffies, g=-1199, q=1) [ 60.475000] Sending NMI from CPU 0 to CPUs 1: [ 1.760091] NMI backtrace for cpu 1 [ 1.760091] CPU: 1 PID: 20 Comm: pgdatinit0 Not tainted 4.18.0-147.9.1.el8_1.x86_64 #1 [ 1.760091] Hardware name: Red Hat KVM, BIOS 1.13.0-1.module+el8.2.0+5520+4e5817f3 04/01/2014 [ 1.760091] RIP: 0010:__init_single_page.isra.65+0x10/0x4f [ 1.760091] Code: 48 83 cf 63 48 89 f8 0f 1f 40 00 48 89 c6 48 89 d7 e8 6b 18 80 ff 66 90 5b c3 31 c0 b9 10 00 00 00 49 89 f8 48 c1 e6 33 f3 ab <b8> 07 00 00 00 48 c1 e2 36 41 c7 40 34 01 00 00 00 48 c1 e0 33 41 [ 1.760091] RSP: 0000:ffffba783123be40 EFLAGS: 00000006 [ 1.760091] RAX: 0000000000000000 RBX: fffffad34405e300 RCX: 0000000000000000 [ 1.760091] RDX: 0000000000000000 RSI: 0010000000000000 RDI: fffffad34405e340 [ 1.760091] RBP: 0000000033f3177e R08: fffffad34405e300 R09: 0000000000000002 [ 1.760091] R10: 000000000000002b R11: ffff98afb691a500 R12: 0000000000000002 [ 1.760091] R13: 0000000000000000 R14: 000000003f03ea00 R15: 000000003e10178c [ 1.760091] FS: 0000000000000000(0000) GS:ffff9c9ebeb00000(0000) knlGS:0000000000000000 [ 1.760091] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.760091] CR2: 00000000ffffffff CR3: 000000a1cf20a001 CR4: 00000000003606e0 [ 1.760091] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.760091] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.760091] Call Trace: [ 1.760091] deferred_init_pages+0x8f/0xbf [ 1.760091] deferred_init_memmap+0x184/0x29d [ 1.760091] ? deferred_free_pages.isra.97+0xba/0xba [ 1.760091] kthread+0x112/0x130 [ 1.760091] ? kthread_flush_work_fn+0x10/0x10 [ 1.760091] ret_from_fork+0x35/0x40 [ 89.123011] node 0 initialised, 1055935372 pages in 88650msThe issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Quoted 4 lines
Quoted 1 line
Adding the
cond_resched()makes RCU happy.I believe the patch you depend on is a wrong way to go so please let's wait until that settles down.
I saw a RB as a reply and thought this would get picked up fairly soon. But sure, let's see how that will look like. Thanks
Signature · 3 lines
Thanks, David / dhildenb
PATCH 2/2 mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous()
In reply to David HildenbrandWithout CONFIG_PREEMPT, it can happen that we get soft lockups detected, e.g., while booting up.
[ 105.608900] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1] [ 105.608933] Modules linked in: [ 105.608933] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.0-next-20200331+ #4 [ 105.608933] Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014 [ 105.608933] RIP: 0010:__pageblock_pfn_to_page+0x134/0x1c0 [ 105.608933] Code: 85 c0 74 71 4a 8b 04 d0 48 85 c0 74 68 48 01 c1 74 63 f6 01 04 74 5e 48 c1 e7 06 4c 8b 05 cc 991 [ 105.608933] RSP: 0000:ffffb6d94000fe60 EFLAGS: 00010286 ORIG_RAX: ffffffffffffff13 [ 105.608933] RAX: fffff81953250000 RBX: 000000000a4c9600 RCX: ffff8fe9ff7c1990 [ 105.608933] RDX: ffff8fe9ff7dab80 RSI: 000000000a4c95ff RDI: 0000000293250000 [ 105.608933] RBP: ffff8fe9ff7dab80 R08: fffff816c0000000 R09: 0000000000000008 [ 105.608933] R10: 0000000000000014 R11: 0000000000000014 R12: 0000000000000000 [ 105.608933] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 [ 105.608933] FS: 0000000000000000(0000) GS:ffff8fe1ff400000(0000) knlGS:0000000000000000 [ 105.608933] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 105.608933] CR2: 000000000f613000 CR3: 00000088cf20a000 CR4: 00000000000006f0 [ 105.608933] Call Trace: [ 105.608933] set_zone_contiguous+0x56/0x70 [ 105.608933] page_alloc_init_late+0x166/0x176 [ 105.608933] kernel_init_freeable+0xfa/0x255 [ 105.608933] ? rest_init+0xaa/0xaa [ 105.608933] kernel_init+0xa/0x106 [ 105.608933] ret_from_fork+0x35/0x40
The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)
mm/page_alloc.c +1 -0
@@ -1607,6 +1607,7 @@ void set_zone_contiguous(struct zone *zone)if (!__pageblock_pfn_to_page (block_start_pfn, block_end_pfn, zone))return ; +cond_resched (); }/* We confirm that there is no hole */
Signature · 1 line
2.25.1
Re: [PATCH v1 2/2] mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous()
Quoted 32 lines · David Hildenbrand
Without
CONFIG_PREEMPT, it can happen that we get soft lockups detected, e.g., while booting up.[ 105.608900] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1] [ 105.608933] Modules linked in: [ 105.608933] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.0-next-20200331+ #4 [ 105.608933] Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014 [ 105.608933] RIP: 0010:__pageblock_pfn_to_page+0x134/0x1c0 [ 105.608933] Code: 85 c0 74 71 4a 8b 04 d0 48 85 c0 74 68 48 01 c1 74 63 f6 01 04 74 5e 48 c1 e7 06 4c 8b 05 cc 991 [ 105.608933] RSP: 0000:ffffb6d94000fe60 EFLAGS: 00010286 ORIG_RAX: ffffffffffffff13 [ 105.608933] RAX: fffff81953250000 RBX: 000000000a4c9600 RCX: ffff8fe9ff7c1990 [ 105.608933] RDX: ffff8fe9ff7dab80 RSI: 000000000a4c95ff RDI: 0000000293250000 [ 105.608933] RBP: ffff8fe9ff7dab80 R08: fffff816c0000000 R09: 0000000000000008 [ 105.608933] R10: 0000000000000014 R11: 0000000000000014 R12: 0000000000000000 [ 105.608933] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 [ 105.608933] FS: 0000000000000000(0000) GS:ffff8fe1ff400000(0000) knlGS:0000000000000000 [ 105.608933] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 105.608933] CR2: 000000000f613000 CR3: 00000088cf20a000 CR4: 00000000000006f0 [ 105.608933] Call Trace: [ 105.608933] set_zone_contiguous+0x56/0x70 [ 105.608933] page_alloc_init_late+0x166/0x176 [ 105.608933] kernel_init_freeable+0xfa/0x255 [ 105.608933] ? rest_init+0xaa/0xaa [ 105.608933] kernel_init+0xa/0x106 [ 105.608933] ret_from_fork+0x35/0x40The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Quoted 10 lines
Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>
Re: [PATCH v1 2/2] mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous()
In reply to David HildenbrandQuoted 50 lines
Without
CONFIG_PREEMPT, it can happen that we get soft lockups detected, e.g., while booting up.[ 105.608900] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1] [ 105.608933] Modules linked in: [ 105.608933] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.0-next-20200331+ #4 [ 105.608933] Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014 [ 105.608933] RIP: 0010:__pageblock_pfn_to_page+0x134/0x1c0 [ 105.608933] Code: 85 c0 74 71 4a 8b 04 d0 48 85 c0 74 68 48 01 c1 74 63 f6 01 04 74 5e 48 c1 e7 06 4c 8b 05 cc 991 [ 105.608933] RSP: 0000:ffffb6d94000fe60 EFLAGS: 00010286 ORIG_RAX: ffffffffffffff13 [ 105.608933] RAX: fffff81953250000 RBX: 000000000a4c9600 RCX: ffff8fe9ff7c1990 [ 105.608933] RDX: ffff8fe9ff7dab80 RSI: 000000000a4c95ff RDI: 0000000293250000 [ 105.608933] RBP: ffff8fe9ff7dab80 R08: fffff816c0000000 R09: 0000000000000008 [ 105.608933] R10: 0000000000000014 R11: 0000000000000014 R12: 0000000000000000 [ 105.608933] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 [ 105.608933] FS: 0000000000000000(0000) GS:ffff8fe1ff400000(0000) knlGS:0000000000000000 [ 105.608933] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 105.608933] CR2: 000000000f613000 CR3: 00000088cf20a000 CR4: 00000000000006f0 [ 105.608933] Call Trace: [ 105.608933] set_zone_contiguous+0x56/0x70 [ 105.608933] page_alloc_init_late+0x166/0x176 [ 105.608933] kernel_init_freeable+0xfa/0x255 [ 105.608933] ? rest_init+0xaa/0xaa [ 105.608933] kernel_init+0xa/0x106 [ 105.608933] ret_from_fork+0x35/0x40The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +0
-0
mm/page_alloc.c void set_zone_contiguous(struct zone *zone)
Quoted 8 lines
mm/page_alloc.c +1
-1@@ -1607,6 +1607,7 @@ void set_zone_contiguous(struct zone *zone)if (!__pageblock_pfn_to_page (block_start_pfn, block_end_pfn, zone))return ; +cond_resched (); }/* We confirm that there is no hole */ --
Quoted 3 lines
2.25.1
Re: [PATCH v1 2/2] mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous()
In reply to David HildenbrandQuoted 50 lines · David Hildenbrand
Without
CONFIG_PREEMPT, it can happen that we get soft lockups detected, e.g., while booting up.[ 105.608900] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1] [ 105.608933] Modules linked in: [ 105.608933] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.0-next-20200331+ #4 [ 105.608933] Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014 [ 105.608933] RIP: 0010:__pageblock_pfn_to_page+0x134/0x1c0 [ 105.608933] Code: 85 c0 74 71 4a 8b 04 d0 48 85 c0 74 68 48 01 c1 74 63 f6 01 04 74 5e 48 c1 e7 06 4c 8b 05 cc 991 [ 105.608933] RSP: 0000:ffffb6d94000fe60 EFLAGS: 00010286 ORIG_RAX: ffffffffffffff13 [ 105.608933] RAX: fffff81953250000 RBX: 000000000a4c9600 RCX: ffff8fe9ff7c1990 [ 105.608933] RDX: ffff8fe9ff7dab80 RSI: 000000000a4c95ff RDI: 0000000293250000 [ 105.608933] RBP: ffff8fe9ff7dab80 R08: fffff816c0000000 R09: 0000000000000008 [ 105.608933] R10: 0000000000000014 R11: 0000000000000014 R12: 0000000000000000 [ 105.608933] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 [ 105.608933] FS: 0000000000000000(0000) GS:ffff8fe1ff400000(0000) knlGS:0000000000000000 [ 105.608933] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 105.608933] CR2: 000000000f613000 CR3: 00000088cf20a000 CR4: 00000000000006f0 [ 105.608933] Call Trace: [ 105.608933] set_zone_contiguous+0x56/0x70 [ 105.608933] page_alloc_init_late+0x166/0x176 [ 105.608933] kernel_init_freeable+0xfa/0x255 [ 105.608933] ? rest_init+0xaa/0xaa [ 105.608933] kernel_init+0xa/0x106 [ 105.608933] ret_from_fork+0x35/0x40The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +0
-0
mm/page_alloc.c void set_zone_contiguous(struct zone *zone) · line 1611
Quoted 5 lines
mm/page_alloc.c +1
-0@@ -1607,6 +1607,7 @@ void set_zone_contiguous(struct zone *zone)if (!__pageblock_pfn_to_page (block_start_pfn, block_end_pfn, zone))return ; +cond_resched (); }
Re: [PATCH v1 2/2] mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous()
In reply to David HildenbrandQuoted 50 lines · David Hildenbrand
Without
CONFIG_PREEMPT, it can happen that we get soft lockups detected, e.g., while booting up.[ 105.608900] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1] [ 105.608933] Modules linked in: [ 105.608933] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.0-next-20200331+ #4 [ 105.608933] Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014 [ 105.608933] RIP: 0010:__pageblock_pfn_to_page+0x134/0x1c0 [ 105.608933] Code: 85 c0 74 71 4a 8b 04 d0 48 85 c0 74 68 48 01 c1 74 63 f6 01 04 74 5e 48 c1 e7 06 4c 8b 05 cc 991 [ 105.608933] RSP: 0000:ffffb6d94000fe60 EFLAGS: 00010286 ORIG_RAX: ffffffffffffff13 [ 105.608933] RAX: fffff81953250000 RBX: 000000000a4c9600 RCX: ffff8fe9ff7c1990 [ 105.608933] RDX: ffff8fe9ff7dab80 RSI: 000000000a4c95ff RDI: 0000000293250000 [ 105.608933] RBP: ffff8fe9ff7dab80 R08: fffff816c0000000 R09: 0000000000000008 [ 105.608933] R10: 0000000000000014 R11: 0000000000000014 R12: 0000000000000000 [ 105.608933] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 [ 105.608933] FS: 0000000000000000(0000) GS:ffff8fe1ff400000(0000) knlGS:0000000000000000 [ 105.608933] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 105.608933] CR2: 000000000f613000 CR3: 00000088cf20a000 CR4: 00000000000006f0 [ 105.608933] Call Trace: [ 105.608933] set_zone_contiguous+0x56/0x70 [ 105.608933] page_alloc_init_late+0x166/0x176 [ 105.608933] kernel_init_freeable+0xfa/0x255 [ 105.608933] ? rest_init+0xaa/0xaa [ 105.608933] kernel_init+0xa/0x106 [ 105.608933] ret_from_fork+0x35/0x40The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +0
-0
mm/page_alloc.c void set_zone_contiguous(struct zone *zone) · line 1613
Quoted 7 lines
mm/page_alloc.c +1
-0@@ -1607,6 +1607,7 @@ void set_zone_contiguous(struct zone *zone)if (!__pageblock_pfn_to_page (block_start_pfn, block_end_pfn, zone))return ; +cond_resched (); }/* We confirm that there is no hole */
Re: [PATCH v1 2/2] mm/page_alloc: fix watchdog soft lockups during set_zone_contiguous()
In reply to David HildenbrandQuoted 31 lines · David Hildenbrand
Without
CONFIG_PREEMPT, it can happen that we get soft lockups detected, e.g., while booting up.[ 105.608900] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1] [ 105.608933] Modules linked in: [ 105.608933] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.6.0-next-20200331+ #4 [ 105.608933] Hardware name: Red Hat KVM, BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/01/2014 [ 105.608933] RIP: 0010:__pageblock_pfn_to_page+0x134/0x1c0 [ 105.608933] Code: 85 c0 74 71 4a 8b 04 d0 48 85 c0 74 68 48 01 c1 74 63 f6 01 04 74 5e 48 c1 e7 06 4c 8b 05 cc 991 [ 105.608933] RSP: 0000:ffffb6d94000fe60 EFLAGS: 00010286 ORIG_RAX: ffffffffffffff13 [ 105.608933] RAX: fffff81953250000 RBX: 000000000a4c9600 RCX: ffff8fe9ff7c1990 [ 105.608933] RDX: ffff8fe9ff7dab80 RSI: 000000000a4c95ff RDI: 0000000293250000 [ 105.608933] RBP: ffff8fe9ff7dab80 R08: fffff816c0000000 R09: 0000000000000008 [ 105.608933] R10: 0000000000000014 R11: 0000000000000014 R12: 0000000000000000 [ 105.608933] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 [ 105.608933] FS: 0000000000000000(0000) GS:ffff8fe1ff400000(0000) knlGS:0000000000000000 [ 105.608933] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 105.608933] CR2: 000000000f613000 CR3: 00000088cf20a000 CR4: 00000000000006f0 [ 105.608933] Call Trace: [ 105.608933] set_zone_contiguous+0x56/0x70 [ 105.608933] page_alloc_init_late+0x166/0x176 [ 105.608933] kernel_init_freeable+0xfa/0x255 [ 105.608933] ? rest_init+0xaa/0xaa [ 105.608933] kernel_init+0xa/0x106 [ 105.608933] ret_from_fork+0x35/0x40The issue becomes visible when having a lot of memory (e.g., 4TB) assigned to a single NUMA node - a system that can easily be created using QEMU. Inside VMs on a hypervisor with quite some memory overcommit, this is fairly easy to trigger.
Quoted 10 lines
Cc Andrew Morton <[email protected]>Cc Kirill Tkhai <[email protected]>Cc Shile Zhang <[email protected]>Cc Pavel Tatashin <[email protected]>Cc Daniel Jordan <[email protected]>Cc Michal Hocko <[email protected]>Cc Alexander Duyck <[email protected]>Cc Baoquan He <[email protected]>Cc Oscar Salvador <[email protected]>Signed-off-by David Hildenbrand <[email protected]>
Quoted 18 lines
--- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+)mm/page_alloc.c +1
-0@@ -1607,6 +1607,7 @@ void set_zone_contiguous(struct zone *zone)if (!__pageblock_pfn_to_page (block_start_pfn, block_end_pfn, zone))return ; +cond_resched (); }/* We confirm that there is no hole */ Signature · 1 line
2.25.1
Signature · 2 lines
Michal Hocko SUSE Labs
Quoted 10 lines · David Hildenbrand
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without
CONFIG_PREEMPT.David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initializationmm/page_alloc: fix watchdog soft lockups duringset_zone_contiguous()mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+)
Patch #1 requires "[PATCH v3] mm: fix tick timer stall during deferred page init"
https://lkml.kernel.org/r/[email protected]
Signature · 3 lines
Thanks, David / dhildenb
Quoted 8 lines · David Hildenbrand
Quoted 7 lines
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without
CONFIG_PREEMPT.David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initializationmm/page_alloc: fix watchdog soft lockups duringset_zone_contiguous()
Quoted 8 lines
Quoted 3 lines
mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+)Patch #1 requires "[PATCH v3] mm: fix tick timer stall during deferred page init"
Thanks! Took me some time to figure it out.
Pankaj
Quoted 7 lines
--
Thanks,David / dhildenb
Quoted 12 lines · Pankaj Gupta
Quoted 12 lines · David Hildenbrand
Quoted 10 lines
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without
CONFIG_PREEMPT.David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initializationmm/page_alloc: fix watchdog soft lockups duringset_zone_contiguous()mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+)
Quoted 6 lines
Quoted 4 lines
Patch #1 requires "[PATCH v3] mm: fix tick timer stall during deferred page init"
Thanks! Took me some time to figure it out.
FYI, I'm planning to post an alternate version of that fix, hopefully today if all goes well with my testing.
Quoted 16 lines · Daniel Jordan
Quoted 15 lines · Pankaj Gupta
Quoted 15 lines · David Hildenbrand
Quoted 10 lines
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without
CONFIG_PREEMPT.David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initializationmm/page_alloc: fix watchdog soft lockups duringset_zone_contiguous()mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+)Patch #1 requires "[PATCH v3] mm: fix tick timer stall during deferred page init"
Quoted 7 lines
Quoted 3 lines
Quoted 1 line
Thanks! Took me some time to figure it out.
FYI, I'm planning to post an alternate version of that fix, hopefully today if all goes well with my testing.
Cool, please CC me :)
Signature · 3 lines
Thanks, David / dhildenb
Quoted 19 lines · David Hildenbrand
Quoted 18 lines · Daniel Jordan
Quoted 17 lines · Pankaj Gupta
Quoted 16 lines · David Hildenbrand
Quoted 10 lines
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without
CONFIG_PREEMPT.David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initializationmm/page_alloc: fix watchdog soft lockups duringset_zone_contiguous()mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+)Patch #1 requires "[PATCH v3] mm: fix tick timer stall during deferred page init"
Quoted 7 lines
Quoted 5 lines
Quoted 1 line
Thanks! Took me some time to figure it out.
FYI, I'm planning to post an alternate version of that fix, hopefully today if all goes well with my testing.
Cool, please CC me :)
Sure, in fact you already were! :)
Andrew Morton
maintainerQuoted 16 lines · On Wed, 1 Apr 2020 10:45:29 -0400 Daniel Jordan <[email protected]>…
Quoted 15 lines · Pankaj Gupta
Quoted 15 lines · David Hildenbrand
Quoted 10 lines
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without
CONFIG_PREEMPT.David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initializationmm/page_alloc: fix watchdog soft lockups duringset_zone_contiguous()mm/page_alloc.c | 2 ++ 1 file changed, 2 insertions(+)Patch #1 requires "[PATCH v3] mm: fix tick timer stall during deferred page init"
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
Thanks! Took me some time to figure it out.
FYI, I'm planning to post an alternate version of that fix, hopefully today if all goes well with my testing.
I assume you'll redo this two-patch series to apply on top of this forthcoming patch?
Quoted 24 lines
Am 01.04.2020 um 20:06 schrieb Andrew Morton <[email protected]>:
Quoted 18 lines · On Wed, 1 Apr 2020 10:45:29 -0400 Daniel Jordan <[email protected]>…
Quoted 17 lines · Pankaj Gupta
Quoted 16 lines
Quoted 16 lines · David Hildenbrand
Quoted 10 lines
Two fixes for misleading stall messages / soft lockups with huge nodes / zones during boot without
CONFIG_PREEMPT.David Hildenbrand (2):
mm/page_alloc: fix RCU stalls during deferred page initializationmm/page_alloc: fix watchdog soft lockups duringset_zone_contiguous()
mm/page_alloc.c| 2 ++1 file changed, 2 insertions(+)Patch #1 requires "[PATCH v3] mm: fix tick timer stall during deferred page init"
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
Thanks! Took me some time to figure it out.
FYI, I'm planning to post an alternate version of that fix, hopefully today if all goes well with my testing.
I assume you'll redo this two-patch series to apply on top of this forthcoming patch?
Yes, will wait until the old one in -next has been replaced by a revised one. Thanks!