Re: [PATCH RFC] hugetlbfs 'noautofill' mount option

From: Prakash Sangappa
Date: Mon May 08 2017 - 01:57:35 EST




On 5/3/17 12:02 PM, Prakash Sangappa wrote:
On 5/2/17 4:43 PM, Dave Hansen wrote:

Ideally, it would be something that is *not* specifically for hugetlbfs.
MADV_NOAUTOFILL, for instance, could be defined to SIGSEGV whenever
memory is touched that was not populated with MADV_WILLNEED, mlock(), etc...

If this is a generic advice type, necessary support will have to be implemented
in various filesystems which can support this.

The proposed behavior for 'noautofill' was to not fill holes in files(like sparse files).
In the page fault path, mm would not know if the mmapped address on which
the fault occurred, is over a hole in the file or just that the page is not available
in the page cache. The underlying filesystem would be called and it determines
if it is a hole and that is where it would fail and not fill the hole, if this support is added.
Normally, filesystem which support sparse files(holes in file) automatically fill the hole
when accessed. Then there is the issue of file system block size and page size. If the
block sizes are smaller then page size, it could mean the noautofill would only work
if the hole size is equal to or a multiple of, page size?

In case of hugetlbfs it is much straight forward. Since this filesystem is not like a normal
filesystems and and the file sizes are multiple of huge pages. The hole will be a multiple
of the huge page size. For this reason then should the advise be specific to hugetlbfs?




Any further comments? I think introducing a general madvise option or a mmap flag applicable to all filesystems, may not be required. The 'noautofill' behavior would be specifically useful in hugetlbfs filesystem.

So, if it is specific to hugetlbfs, will the mount option be ok? Otherwise adding a madvise / mmap option specific to hugetlbfs, be preferred?