2022-03-18 00:32:46

by Yang Shi

[permalink] [raw]
Subject: [v2 PATCH 3/8] mm: khugepaged: skip DAX vma

The DAX vma may be seen by khugepaged when the mm has other khugepaged
suitable vmas. So khugepaged may try to collapse THP for DAX vma, but
it will fail due to page sanity check, for example, page is not
on LRU.

So it is not harmful, but it is definitely pointless to run khugepaged
against DAX vma, so skip it in early check.

Reviewed-by: Miaohe Lin <[email protected]>
Signed-off-by: Yang Shi <[email protected]>
---
mm/khugepaged.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 82c71c6da9ce..a0e4fa33660e 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -448,6 +448,10 @@ static bool hugepage_vma_check(struct vm_area_struct *vma,
if (vm_flags & VM_NO_KHUGEPAGED)
return false;

+ /* Don't run khugepaged against DAX vma */
+ if (vma_is_dax(vma))
+ return false;
+
if (vma->vm_file && !IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) -
vma->vm_pgoff, HPAGE_PMD_NR))
return false;
--
2.26.3


2022-03-21 14:12:21

by Hyeonggon Yoo

[permalink] [raw]
Subject: Re: [v2 PATCH 3/8] mm: khugepaged: skip DAX vma

On Thu, Mar 17, 2022 at 04:48:22PM -0700, Yang Shi wrote:
> The DAX vma may be seen by khugepaged when the mm has other khugepaged
> suitable vmas. So khugepaged may try to collapse THP for DAX vma, but
> it will fail due to page sanity check, for example, page is not
> on LRU.
>
> So it is not harmful, but it is definitely pointless to run khugepaged
> against DAX vma, so skip it in early check.

in fs/xfs/xfs_file.c:
1391 STATIC int
1392 xfs_file_mmap(
1393 struct file *file,
1394 struct vm_area_struct *vma)
1395 {
1396 struct inode *inode = file_inode(file);
1397 struct xfs_buftarg *target = xfs_inode_buftarg(XFS_I(inode));
1398
1399 /*
1400 * We don't support synchronous mappings for non-DAX files and
1401 * for DAX files if underneath dax_device is not synchronous.
1402 */
1403 if (!daxdev_mapping_supported(vma, target->bt_daxdev))
1404 return -EOPNOTSUPP;
1405
1406 file_accessed(file);
1407 vma->vm_ops = &xfs_file_vm_ops;
1408 if (IS_DAX(inode))
1409 vma->vm_flags |= VM_HUGEPAGE;

Are xfs and other filesystems setting VM_HUGEPAGE flag even if it can
never be collapsed?

1410 return 0;
1411 }


> Reviewed-by: Miaohe Lin <[email protected]>
> Signed-off-by: Yang Shi <[email protected]>
> ---
> mm/khugepaged.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index 82c71c6da9ce..a0e4fa33660e 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -448,6 +448,10 @@ static bool hugepage_vma_check(struct vm_area_struct *vma,
> if (vm_flags & VM_NO_KHUGEPAGED)
> return false;
>
> + /* Don't run khugepaged against DAX vma */
> + if (vma_is_dax(vma))
> + return false;
> +
> if (vma->vm_file && !IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) -
> vma->vm_pgoff, HPAGE_PMD_NR))
> return false;
> --
> 2.26.3
>
>

--
Thank you, You are awesome!
Hyeonggon :-)

2022-03-21 23:23:15

by Yang Shi

[permalink] [raw]
Subject: Re: [v2 PATCH 3/8] mm: khugepaged: skip DAX vma

On Mon, Mar 21, 2022 at 5:04 AM Hyeonggon Yoo <[email protected]> wrote:
>
> On Thu, Mar 17, 2022 at 04:48:22PM -0700, Yang Shi wrote:
> > The DAX vma may be seen by khugepaged when the mm has other khugepaged
> > suitable vmas. So khugepaged may try to collapse THP for DAX vma, but
> > it will fail due to page sanity check, for example, page is not
> > on LRU.
> >
> > So it is not harmful, but it is definitely pointless to run khugepaged
> > against DAX vma, so skip it in early check.
>
> in fs/xfs/xfs_file.c:
> 1391 STATIC int
> 1392 xfs_file_mmap(
> 1393 struct file *file,
> 1394 struct vm_area_struct *vma)
> 1395 {
> 1396 struct inode *inode = file_inode(file);
> 1397 struct xfs_buftarg *target = xfs_inode_buftarg(XFS_I(inode));
> 1398
> 1399 /*
> 1400 * We don't support synchronous mappings for non-DAX files and
> 1401 * for DAX files if underneath dax_device is not synchronous.
> 1402 */
> 1403 if (!daxdev_mapping_supported(vma, target->bt_daxdev))
> 1404 return -EOPNOTSUPP;
> 1405
> 1406 file_accessed(file);
> 1407 vma->vm_ops = &xfs_file_vm_ops;
> 1408 if (IS_DAX(inode))
> 1409 vma->vm_flags |= VM_HUGEPAGE;
>
> Are xfs and other filesystems setting VM_HUGEPAGE flag even if it can
> never be collapsed?

DAX is available or intended to use on some special devices, for
example, persistent memory. Collapsing huge pages on such devices is
not the intended usecase of khugepaged.

>
> 1410 return 0;
> 1411 }
>
>
> > Reviewed-by: Miaohe Lin <[email protected]>
> > Signed-off-by: Yang Shi <[email protected]>
> > ---
> > mm/khugepaged.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> > index 82c71c6da9ce..a0e4fa33660e 100644
> > --- a/mm/khugepaged.c
> > +++ b/mm/khugepaged.c
> > @@ -448,6 +448,10 @@ static bool hugepage_vma_check(struct vm_area_struct *vma,
> > if (vm_flags & VM_NO_KHUGEPAGED)
> > return false;
> >
> > + /* Don't run khugepaged against DAX vma */
> > + if (vma_is_dax(vma))
> > + return false;
> > +
> > if (vma->vm_file && !IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) -
> > vma->vm_pgoff, HPAGE_PMD_NR))
> > return false;
> > --
> > 2.26.3
> >
> >
>
> --
> Thank you, You are awesome!
> Hyeonggon :-)