Yes, the VM is x86_64. "pgrep -c nfsd" says: 9 I use NFS version 3. All network ports are connected with 1GBit/s. The exported file system is ext4. I do not use any authentication. The mount options in /etc/fstab are: rw,noatime,nfsvers=3,proto=tcp,hard,nointr,timeo=600,rsize=32768,wsize=32768,noauto The line in /etc/exports: /export/data3 192.168.0.0/16(fsid=<uuid>,rw,no_root_squash,async,no_subtree_check) > Gesendet: Sonntag, den 24.03.2024 um 22:10 Uhr > Von: "Chuck Lever III" <chuck.lever@xxxxxxxxxx> > An: "Jan Schunk" <scpcom@xxxxxx> > Cc: "Jeff Layton" <jlayton@xxxxxxxxxx>, "Neil Brown" <neilb@xxxxxxx>, "Olga Kornievskaia" <kolga@xxxxxxxxxx>, "Dai Ngo" <dai.ngo@xxxxxxxxxx>, "Tom Talpey" <tom@xxxxxxxxxx>, "Linux NFS Mailing List" <linux-nfs@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx> > Betreff: Re: [External] : nfsd: memory leak when client does many file operations > > > > On Mar 24, 2024, at 4:48 PM, Jan Schunk <scpcom@xxxxxx> wrote: > > > > The "heavy usage" is a simple script runinng on the client and does the following: > > 1. Create a empty git repository on the share > > 2. Unpacking a tar.gz archive (Qnap GPL source code) > > 3. Remove some folders/files > > 4. Use diff to compare it with an older version > > 5. commit them to the git > > 6. Repeat at step 2 with next archive > > > > On my armhf NAS the other memory consuming workload is an SMB server. > > I'm not sure any of us has a Freescale system to try this ... > > > > On the test VM the other memory consuming workload is a GNOME desktop. > > ... and so I'm hoping this VM is an x86_64 system. > > > > But it does not make much difference if I stop other services it just takes a bit longer until the same issue happens. > > The size of swap also does not make a difference. > > What is the nfsd thread count on the server? 'pgrep -c nfsd' > > What version of NFS does your client mount with? > > What is the speed of the network between your client and server? > > What is the type of the exported file system? > > Do you use NFS with Kerberos? > > > >> Gesendet: Sonntag, den 24.03.2024 um 21:14 Uhr > >> Von: "Chuck Lever III" <chuck.lever@xxxxxxxxxx> > >> An: "Jan Schunk" <scpcom@xxxxxx> > >> Cc: "Jeff Layton" <jlayton@xxxxxxxxxx>, "Neil Brown" <neilb@xxxxxxx>, "Olga Kornievskaia" <kolga@xxxxxxxxxx>, "Dai Ngo" <dai.ngo@xxxxxxxxxx>, "Tom Talpey" <tom@xxxxxxxxxx>, "Linux NFS Mailing List" <linux-nfs@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx> > >> Betreff: Re: [External] : nfsd: memory leak when client does many file operations > >> > >> > >> > >>> On Mar 24, 2024, at 3:57 PM, Jan Schunk <scpcom@xxxxxx> 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 > >> > >> > > -- > Chuck Lever > >