fuse: enable per inode DAX
authorJeffle Xu <jefflexu@linux.alibaba.com>
Thu, 25 Nov 2021 07:05:27 +0000 (15:05 +0800)
committerMiklos Szeredi <mszeredi@redhat.com>
Tue, 14 Dec 2021 10:09:37 +0000 (11:09 +0100)
commit93a497b9ad695bb2f38a302c5b29dbc9b555ff3f
tree3a778130fc515d71d49d049a7c677ca0f7312abb
parent98046f7486db723ec8bb99a950a4fa5f5be55cd1
fuse: enable per inode DAX

DAX may be limited in some specific situation. When the number of usable
DAX windows is under watermark, the recalim routine will be triggered to
reclaim some DAX windows. It may have a negative impact on the
performance, since some processes may need to wait for DAX windows to be
recalimed and reused then. To mitigate the performance degradation, the
overall DAX window need to be expanded larger.

However, simply expanding the DAX window may not be a good deal in some
scenario. To maintain one DAX window chunk (i.e., 2MB in size), 32KB
(512 * 64 bytes) memory footprint will be consumed for page descriptors
inside guest, which is greater than the memory footprint if it uses
guest page cache when DAX disabled. Thus it'd better disable DAX for
those files smaller than 32KB, to reduce the demand for DAX window and
thus avoid the unworthy memory overhead.

Per inode DAX feature is introduced to address this issue, by offering a
finer grained control for dax to users, trying to achieve a balance
between performance and memory overhead.

The FUSE_ATTR_DAX flag in FUSE_LOOKUP reply is used to indicate whether
DAX should be enabled or not for corresponding file. Currently the state
whether DAX is enabled or not for the file is initialized only when
inode is instantiated.

Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/dax.c
fs/fuse/file.c
fs/fuse/fuse_i.h
fs/fuse/inode.c