On 01/07/2024 09:57, David Hildenbrand wrote: > On 01.07.24 10:50, Ryan Roberts wrote: >> On 01/07/2024 09:48, David Hildenbrand wrote: >>> On 01.07.24 10:40, Ryan Roberts wrote: >>>> On 01/07/2024 09:33, Baolin Wang wrote: >>>>> >>>>> >>>>> On 2024/7/1 15:55, Ryan Roberts wrote: >>>>>> On 28/06/2024 11:49, Bang Li wrote: >>>>>>> After the commit 7fb1b252afb5 ("mm: shmem: add mTHP support for >>>>>>> anonymous shmem"), we can configure different policies through >>>>>>> the multi-size THP sysfs interface for anonymous shmem. But >>>>>>> currently "THPeligible" indicates only whether the mapping is >>>>>>> eligible for allocating THP-pages as well as the THP is PMD >>>>>>> mappable or not for anonymous shmem, we need to support semantics >>>>>>> for mTHP with anonymous shmem similar to those for mTHP with >>>>>>> anonymous memory. >>>>>>> >>>>>>> Signed-off-by: Bang Li <libang.li@xxxxxxxxxxxx> >>>>>>> --- >>>>>>> fs/proc/task_mmu.c | 10 +++++++--- >>>>>>> include/linux/huge_mm.h | 11 +++++++++++ >>>>>>> mm/shmem.c | 9 +-------- >>>>>>> 3 files changed, 19 insertions(+), 11 deletions(-) >>>>>>> >>>>>>> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c >>>>>>> index 93fb2c61b154..09b5db356886 100644 >>>>>>> --- a/fs/proc/task_mmu.c >>>>>>> +++ b/fs/proc/task_mmu.c >>>>>>> @@ -870,6 +870,7 @@ static int show_smap(struct seq_file *m, void *v) >>>>>>> { >>>>>>> struct vm_area_struct *vma = v; >>>>>>> struct mem_size_stats mss = {}; >>>>>>> + bool thp_eligible; >>>>>>> smap_gather_stats(vma, &mss, 0); >>>>>>> @@ -882,9 +883,12 @@ static int show_smap(struct seq_file *m, void *v) >>>>>>> __show_smap(m, &mss, false); >>>>>>> - seq_printf(m, "THPeligible: %8u\n", >>>>>>> - !!thp_vma_allowable_orders(vma, vma->vm_flags, >>>>>>> - TVA_SMAPS | TVA_ENFORCE_SYSFS, THP_ORDERS_ALL)); >>>>>>> + thp_eligible = !!thp_vma_allowable_orders(vma, vma->vm_flags, >>>>>>> + TVA_SMAPS | TVA_ENFORCE_SYSFS, THP_ORDERS_ALL); >>>>>>> + if (vma_is_anon_shmem(vma)) >>>>>>> + thp_eligible = >>>>>>> !!shmem_allowable_huge_orders(file_inode(vma->vm_file), >>>>>>> + vma, vma->vm_pgoff, thp_eligible); >>>>>> >>>>>> Afraid I haven't been following the shmem mTHP support work as much as I >>>>>> would >>>>>> have liked, but is there a reason why we need a separate function for shmem? >>>>> >>>>> Since shmem_allowable_huge_orders() only uses shmem specific logic to >>>>> determine >>>>> if huge orders are allowable, there is no need to complicate the >>>>> thp_vma_allowable_orders() function by adding more shmem related logic, making >>>>> it more bloated. In my view, providing a dedicated helper >>>>> shmem_allowable_huge_orders(), specifically for shmem, simplifies the logic. >>>> >>>> My point was really that a single interface (thp_vma_allowable_orders) >>>> should be >>>> used to get this information. I have no strong opinon on how the implementation >>>> of that interface looks. What you suggest below seems perfectly reasonable >>>> to me. >>> >>> Right. thp_vma_allowable_orders() might require some care as discussed in other >>> context (cleanly separate dax and shmem handling/orders). But that would be >>> follow-up cleanups. >> >> Are you planning to do that, or do you want me to send a patch? > > I'm planning on looking into some details, especially the interaction with large > folios in the pagecache. I'll let you know once I have a better idea what > actually should be done :) OK great - I'll scrub it from my todo list... really getting things done today :)