[Bug 223015] [tmpfs] [patch] tmpfs does not support sparse files

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Mon Oct 23 14:53:49 UTC 2017


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223015

--- Comment #9 from Konstantin Belousov <kib at FreeBSD.org> ---
(In reply to Keith White from comment #8)
Let me explain it in full:
1. tmpfs should not try to use current counters of the active/inactive or free
queues, since they are irrelevant to the system ability to satisfy page
requests.  If page is needed, the queues are scanned and a usable page might
appear even if there is no free pages or all swap space is used (e.g. we can
write out dirty file page or reuse clean file page).
2. tmpfs should provide a global limit on the number of used pages, in fact it
already has it "-o size".  The limit is compared against the maintained counter
of the supposedly used pages tm_pages_used.
3. Your problem is because tm_pages_used is too harsh.  It just sums up all
files sizes, while it really should only count file pages which were really
written to.  In other words, instead of adjusting tm_pages_used in
tmpfs_reg_resize(), it should be adjusted in tmpfs_write().  [There is
additional complication, see below].
4. The tmpfs_mem_avail() should be removed.  See item 1.

The complication is due to the tmpfs using in-place mapping, i.e. the vm object
which contains the pages with the file data, directly provides the pages used
for file mapping.  This was highly desirable feature, because it avoids
duplicating memory for the mmapped tmpfs files, and makes mmap zero-copy.

Problem is, page faults in the sparcerly allocated mmaped file range
instantiate the file pages, which must be accounted for in tm_pages_max.  The
tmpfs vm objects are already flagged so this is not too hard to do, just that
you cannot limit the patch to fs/tmpfs only.

This is my current opinion on the issue, hope this is clean enough.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-fs mailing list