Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
How to limit amount of virtual memory used for files (was: Re: Tuning ZFS memory usage on NetBSD - call for advice)
Hello all,
Am 31.08.2022 um 21:57 schrieb Lloyd Parkes:
It might not be ZFS related. But it could be.
Someone else reported excessive, ongoing, increasing "File" usage a 
while back and I was somewhat dismissive because they were running a 
truckload of apps at the same time (not in VMs).
I did manage to reproduce his problem on an empty non-ZFS NetBSD system, 
so there is definitely something going on where "File" pages are not 
getting reclaimed when there is pressure on the memory system.
I haven't got around to looking into it any deeper though.
BTW the test was to copy a single large file (>1TB?) from SATA storage 
to USB storage. Since the file is held open for the duration of the copy 
(I used dd IIRC) this might end up exercising many of the same code 
paths as a VM accessing a disk image.
Cheers,
Lloyd
I think I had answered this earlier (but I'm not quite sure) - the 
problem only occurs when I write the data obtained with "zfs send" to a 
local file system (e.g. the USB HDD). If I send the data to a remote 
system with netcat instead, the "file usage" remains within the green 
range. I can therefore confirm your test case and am now pretty sure 
that ZFS is not the culprit here.
In general, I have found relatively little about how exactly the memory 
under "File" is composed. The man page for top does not contain any 
information on this. I got a bit of an idea in [1], so I'm going to make 
a few assumptions. If anyone could confirm or contradict these, I would 
be very grateful.
Accordingly, the memory shown under "File" could be areas of files in 
the file system mapped into the main memory. As a consequence, my 
massive writing to a large file probably leads to the data first being 
"parked" in memory pages of the main memory and then gradually being 
written to the backing storage (hard disk). Since "zfs send" can read 
the data from a SATA SSD much faster than it can be written to the slow 
USB HDD, the main memory is utilised to the maximum for the duration of 
the process.
This raises the question for me: can I somehow limit this kind of memory 
use on a process basis? Could ulimit help here?
```
vhost$ ulimit -a
time(cpu-seconds)    unlimited
file(blocks)         unlimited
coredump(blocks)     unlimited
data(kbytes)         262144
stack(kbytes)        4096
lockedmem(kbytes)    2565180
memory(kbytes)       7695540
nofiles(descriptors) 1024
processes            1024
threads              1024
vmemory(kbytes)      unlimited
sbsize(bytes)        unlimited
vhost$
```
Unfortunately, I have not found any more detailed descriptions of the 
above parameters. At least "file(blocks)" reads promisingly...
Kind regards
Matthias
[1] https://www.netbsd.org/docs/internals/en/chap-memory.html
Home |
Main Index |
Thread Index |
Old Index