2024-03-24 20:15:10

by Chuck Lever

[permalink] [raw]
Subject: Re: [External] : nfsd: memory leak when client does many file operations



> On Mar 24, 2024, at 3:57 PM, Jan Schunk <[email protected]> wrote:
>
> Issue found on: v6.5.13 v6.6.13, v6.6.14, v6.6.20 and v6.8.1
> Not found on: v6.4, v6.1.82 and below
> Architectures: amd64 and arm(hf)
>
> Steps to reproduce:
> - Create a VM with 1GB RAM
> - Install Debian 12
> - Install linux-image-6.6.13+bpo-amd64-unsigned and nfs-kernel-server
> - Export some folder
> On the client:
> - Mount the share
> - Run a script that does produce heavy usage on the share (like unpacking large tar archives that cointain many small files into a git and commiting them)

Hi Jan, thanks for the report.

The "produce heavy usage" instruction here is pretty vague.
I run CI testing with kmemleak enabled, and have not seen
any leaks on recent kernels when running the git regression
tests, which are similar to this kind of workload.

Can you try to narrow the reproducer for us, even just a
little? What client action exactly is triggering the memory
leak? Is there any other workload on your NFS server that
might be consuming memory?


> On my setup it takes 20-40 hours until the memory is full and oom-kill gets hired by nfsd to kill other processes. the memory stays full and the system reboots:
>
> [121969.590000] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,task=dbus-daemon,pid=454,uid=101
> [121969.600000] Out of memory: Killed process 454 (dbus-daemon) total-vm:6196kB, anon-rss:128kB, file-rss:1408kB, shmem-rss:0kB, UID:101 pgtables:12kB oom_score_adj:-900
> [121971.700000] oom_reaper: reaped process 454 (dbus-daemon), now anon-rss:0kB, file-rss:64kB, shmem-rss:0kB
> [121971.920000] nfsd invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=0, oom_score_adj=0
> [121971.930000] CPU: 1 PID: 537 Comm: nfsd Not tainted 6.8.1+nas5xx #nas5xx
> [121971.930000] Hardware name: Freescale LS1024A
> [121971.940000] unwind_backtrace from show_stack+0xb/0xc
> [121971.940000] show_stack from dump_stack_lvl+0x2b/0x34
> [121971.950000] dump_stack_lvl from dump_header+0x35/0x212
> [121971.950000] dump_header from out_of_memory+0x317/0x34c
> [121971.960000] out_of_memory from __alloc_pages+0x8e7/0xbb0
> [121971.970000] __alloc_pages from __alloc_pages_bulk+0x26d/0x3d8
> [121971.970000] __alloc_pages_bulk from svc_recv+0x9d/0x7d4
> [121971.980000] svc_recv from nfsd+0x7d/0xd4
> [121971.980000] nfsd from kthread+0xb9/0xcc
> [121971.990000] kthread from ret_from_fork+0x11/0x1c
> [121971.990000] Exception stack(0xc2cadfb0 to 0xc2cadff8)
> [121971.990000] dfa0: 00000000 00000000 00000000 00000000
> [121972.000000] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> [121972.010000] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [121972.020000] Mem-Info:
> [121972.020000] active_anon:101 inactive_anon:127 isolated_anon:29
> [121972.020000] active_file:1200 inactive_file:1204 isolated_file:98
> [121972.020000] unevictable:394 dirty:296 writeback:17
> [121972.020000] slab_reclaimable:13680 slab_unreclaimable:4350
> [121972.020000] mapped:637 shmem:4 pagetables:414
> [121972.020000] sec_pagetables:0 bounce:0
> [121972.020000] kernel_misc_reclaimable:0
> [121972.020000] free:7279 free_pcp:184 free_cma:1094
> [121972.060000] Node 0 active_anon:404kB inactive_anon:508kB active_file:4736kB inactive_file:4884kB unevictable:1576kB isolated(anon):116kB isolated(file):388kB mapped:2548kB dirty:1184kB writeback:68kB shmem:16kB writeback_tmp:0kB kernel_stack:1088kB pagetables:1656kB sec_pagetables:0kB all_unreclaimable? no
> [121972.090000] Normal free:29116kB boost:18432kB min:26624kB low:28672kB high:30720kB reserved_highatomic:0KB active_anon:404kB inactive_anon:712kB active_file:4788kB inactive_file:4752kB unevictable:1576kB writepending:1252kB present:1048576kB managed:1011988kB mlocked:1576kB bounce:0kB free_pcp:736kB local_pcp:236kB free_cma:4376kB
> [121972.120000] lowmem_reserve[]: 0 0
> [121972.120000] Normal: 2137*4kB (UEC) 1173*8kB (UEC) 529*16kB (UEC) 19*32kB (UC) 7*64kB (C) 5*128kB (C) 2*256kB (C) 1*512kB (C) 0*1024kB 0*2048kB 0*4096kB = 29116kB
> [121972.140000] 2991 total pagecache pages
> [121972.140000] 166 pages in swap cache
> [121972.140000] Free swap = 93424kB
> [121972.150000] Total swap = 102396kB
> [121972.150000] 262144 pages RAM
> [121972.150000] 0 pages HighMem/MovableOnly
> [121972.160000] 9147 pages reserved
> [121972.160000] 4096 pages cma reserved
> [121972.160000] Unreclaimable slab info:
> [121972.170000] Name Used Total
> [121972.170000] bio-88 64KB 64KB
> [121972.180000] TCPv6 61KB 61KB
> [121972.180000] bio-76 16KB 16KB
> [121972.190000] bio-188 11KB 11KB
> [121972.190000] nfs_read_data 22KB 22KB
> [121972.200000] kioctx 15KB 15KB
> [121972.200000] posix_timers_cache 7KB 7KB
> [121972.210000] UDP 63KB 63KB
> [121972.220000] tw_sock_TCP 3KB 3KB
> [121972.220000] request_sock_TCP 3KB 3KB
> [121972.230000] TCP 62KB 62KB
> [121972.230000] bio-168 7KB 7KB
> [121972.240000] ep_head 8KB 8KB
> [121972.240000] request_queue 15KB 15KB
> [121972.250000] bio-124 18KB 40KB
> [121972.250000] biovec-max 264KB 264KB
> [121972.260000] biovec-128 63KB 63KB
> [121972.260000] biovec-64 157KB 157KB
> [121972.270000] skbuff_small_head 94KB 94KB
> [121972.270000] skbuff_fclone_cache 55KB 63KB
> [121972.280000] skbuff_head_cache 59KB 59KB
> [121972.280000] fsnotify_mark_connector 16KB 28KB
> [121972.290000] sigqueue 19KB 31KB
> [121972.300000] shmem_inode_cache 1622KB 1662KB
> [121972.300000] kernfs_iattrs_cache 15KB 15KB
> [121972.310000] kernfs_node_cache 2107KB 2138KB
> [121972.310000] filp 259KB 315KB
> [121972.320000] net_namespace 30KB 30KB
> [121972.320000] uts_namespace 15KB 15KB
> [121972.330000] vma_lock 143KB 179KB
> [121972.330000] vm_area_struct 459KB 553KB
> [121972.340000] sighand_cache 191KB 220KB
> [121972.340000] task_struct 378KB 446KB
> [121972.350000] anon_vma_chain 753KB 804KB
> [121972.360000] anon_vma 170KB 207KB
> [121972.360000] trace_event_file 83KB 83KB
> [121972.370000] mm_struct 157KB 173KB
> [121972.370000] vmap_area 217KB 354KB
> [121972.380000] kmalloc-8k 224KB 224KB
> [121972.380000] kmalloc-4k 860KB 992KB
> [121972.390000] kmalloc-2k 352KB 352KB
> [121972.390000] kmalloc-1k 563KB 576KB
> [121972.400000] kmalloc-512 936KB 936KB
> [121972.400000] kmalloc-256 196KB 240KB
> [121972.410000] kmalloc-192 160KB 169KB
> [121972.410000] kmalloc-128 546KB 764KB
> [121972.420000] kmalloc-64 1213KB 1288KB
> [121972.420000] kmem_cache_node 12KB 12KB
> [121972.430000] kmem_cache 16KB 16KB
> [121972.440000] Tasks state (memory values in pages):
> [121972.440000] [ pid ] uid tgid total_vm rss rss_anon rss_file rss_shmem pgtables_bytes swapents oom_score_adj name
> [121972.450000] [ 209] 0 209 5140 320 0 320 0 16384 480 -1000 systemd-udevd
> [121972.460000] [ 230] 998 230 2887 55 32 23 0 18432 0 0 systemd-network
> [121972.470000] [ 420] 0 420 596 0 0 0 0 6144 22 0 mdadm
> [121972.490000] [ 421] 102 421 1393 56 32 24 0 10240 0 0 rpcbind
> [121972.500000] [ 429] 996 429 3695 17 0 17 0 20480 0 0 systemd-resolve
> [121972.510000] [ 433] 0 433 494 51 0 51 0 8192 0 0 rpc.idmapd
> [121972.520000] [ 434] 0 434 743 92 33 59 0 8192 7 0 nfsdcld
> [121972.530000] [ 451] 0 451 390 0 0 0 0 6144 0 0 acpid
> [121972.540000] [ 453] 105 453 1380 50 32 18 0 10240 18 0 avahi-daemon
> [121972.550000] [ 454] 101 454 1549 16 0 16 0 12288 32 -900 dbus-daemon
> [121972.560000] [ 466] 0 466 3771 60 0 60 0 14336 0 0 irqbalance
> [121972.570000] [ 475] 0 475 6269 32 32 0 0 18432 0 0 rsyslogd
> [121972.590000] [ 487] 105 487 1347 68 38 30 0 10240 0 0 avahi-daemon
> [121972.600000] [ 492] 0 492 1765 0 0 0 0 12288 0 0 cron
> [121972.610000] [ 493] 0 493 2593 0 0 0 0 16384 0 0 wpa_supplicant
> [121972.620000] [ 494] 0 494 607 0 0 0 0 8192 32 0 atd
> [121972.630000] [ 506] 0 506 1065 25 0 25 0 10240 0 0 rpc.mountd
> [121972.640000] [ 514] 103 514 809 25 0 25 0 8192 0 0 rpc.statd
> [121972.650000] [ 522] 0 522 999 31 0 31 0 10240 0 0 agetty
> [121972.660000] [ 524] 0 524 1540 28 0 28 0 12288 0 0 agetty
> [121972.670000] [ 525] 0 525 9098 56 32 24 0 34816 0 0 unattended-upgr
> [121972.690000] [ 526] 0 526 2621 320 0 320 0 14336 192 -1000 sshd
> [121972.700000] [ 539] 0 539 849 32 32 0 0 8192 0 0 in.tftpd
> [121972.710000] [ 544] 113 544 4361 6 6 0 0 16384 25 0 chronyd
> [121972.720000] [ 546] 0 546 16816 62 32 30 0 45056 0 0 winbindd
> [121972.730000] [ 552] 0 552 16905 59 32 27 0 45056 3 0 winbindd
> [121972.740000] [ 559] 0 559 17849 94 32 30 32 49152 4 0 smbd
> [121972.750000] [ 572] 0 572 17409 40 16 24 0 43008 11 0 smbd-notifyd
> [121972.760000] [ 573] 0 573 17412 16 16 0 0 43008 24 0 cleanupd
> [121972.770000] [ 584] 0 584 3036 20 0 20 0 16384 4 0 sshd
> [121972.780000] [ 589] 0 589 16816 32 2 30 0 40960 21 0 winbindd
> [121972.790000] [ 590] 0 590 27009 47 23 24 0 65536 21 0 smbd
> [121972.810000] [ 597] 501 597 3344 91 32 59 0 20480 0 100 systemd
> [121972.820000] [ 653] 501 653 3036 0 0 0 0 16384 33 0 sshd
> [121972.830000] [ 656] 501 656 1938 93 32 61 0 12288 9 0 bash
> [121972.840000] [ 704] 0 704 395 352 64 288 0 6144 0 -1000 watchdog
> [121972.850000] [ 738] 501 738 2834 12 0 12 0 16384 6 0 top
> [121972.860000] [ 4750] 0 4750 4218 44 26 18 0 18432 11 0 proftpd
> [121972.870000] [ 4768] 0 4768 401 31 0 31 0 6144 0 0 apt.systemd.dai
> [121972.880000] [ 4772] 0 4772 401 31 0 31 0 6144 0 0 apt.systemd.dai
> [121972.890000] [ 4778] 0 4778 13556 54 0 54 0 59392 26 0 apt-get
> [121972.900000] Out of memory and no killable processes...
> [121972.910000] Kernel panic - not syncing: System is deadlocked on memory
> [121972.920000] CPU: 1 PID: 537 Comm: nfsd Not tainted 6.8.1+nas5xx #nas5xx
> [121972.920000] Hardware name: Freescale LS1024A
> [121972.930000] unwind_backtrace from show_stack+0xb/0xc
> [121972.930000] show_stack from dump_stack_lvl+0x2b/0x34
> [121972.940000] dump_stack_lvl from panic+0xbf/0x264
> [121972.940000] panic from out_of_memory+0x33f/0x34c
> [121972.950000] out_of_memory from __alloc_pages+0x8e7/0xbb0
> [121972.950000] __alloc_pages from __alloc_pages_bulk+0x26d/0x3d8
> [121972.960000] __alloc_pages_bulk from svc_recv+0x9d/0x7d4
> [121972.960000] svc_recv from nfsd+0x7d/0xd4
> [121972.970000] nfsd from kthread+0xb9/0xcc
> [121972.970000] kthread from ret_from_fork+0x11/0x1c
> [121972.980000] Exception stack(0xc2cadfb0 to 0xc2cadff8)
> [121972.980000] dfa0: 00000000 00000000 00000000 00000000
> [121972.990000] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> [121973.000000] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [121973.010000] CPU0: stopping
> [121973.010000] CPU: 0 PID: 540 Comm: nfsd Not tainted 6.8.1+nas5xx #nas5xx
> [121973.010000] Hardware name: Freescale LS1024A
> [121973.010000] unwind_backtrace from show_stack+0xb/0xc
> [121973.010000] show_stack from dump_stack_lvl+0x2b/0x34
> [121973.010000] dump_stack_lvl from do_handle_IPI+0x151/0x178
> [121973.010000] do_handle_IPI from ipi_handler+0x13/0x18
> [121973.010000] ipi_handler from handle_percpu_devid_irq+0x55/0x144
> [121973.010000] handle_percpu_devid_irq from generic_handle_domain_irq+0x17/0x20
> [121973.010000] generic_handle_domain_irq from gic_handle_irq+0x5f/0x70
> [121973.010000] gic_handle_irq from generic_handle_arch_irq+0x27/0x34
> [121973.010000] generic_handle_arch_irq from call_with_stack+0xd/0x10
> [121973.010000] Rebooting in 90 seconds..

--
Chuck Lever