Re: [PATCH 2/2] mm/mempolicy: Skip walking HUGETLB vma if MPOL_MF_STRICT is specified alone

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 1/14/20 5:24 PM, Yang Shi wrote:
> 
> 
> On 1/14/20 5:07 PM, Mike Kravetz wrote:
>> On 1/14/20 6:09 AM, Li Xinhai wrote:
>>> Add cc to
>>> Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx>
>>> Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx>
>>> , who has been worked on this part
>>>
>>> On 2020-01-14 at 17:16 Li Xinhai wrote:
>>>> Checking MPOL_MF_STRICT is ignored for HUGETLB vma according to mbind man
>>>> page:
>>>>
>>>> Notes
>>>> MPOL_MF_STRICT is ignored on huge page mappings.
>>>>
>>>> If MPOL_MF_STRICT is specified alone without any MOVE flag, we should
>>>> indicate, from test_walk, that walking this vma should be skipped even if
>>>> there are misplaced pages.
>>>>
>>>> Signed-off-by: Li Xinhai <lixinhai.lxh@xxxxxxxxx>
>>>> Cc: Michal Hocko <mhocko@xxxxxxxx>
>>>> Cc: Mike Kravetz <mike.kravetz@xxxxxxxxxx>
>> I do not necessarily disagree with the change.  However, this has made me
>> question a couple things:
>> 1) Why does the man page say MPOL_MF_STRICT is ignored on huge page mappings?
>>     - Is that leftover from the the days when huge page migration was not
>>       supported?
>>     - Is it just because huge page migration is more likely to fail than
>>       base page migration.
>> 2) Does the mbind code function properly when unable to migrate a huge page
>>     MPOL_MF_STRICT is set?  A quick look at the code looks like it returns
>>     EIO.
> 
> I don't know the answer about question #1 I didn't dig into the history. The queue_pages_hugetlb() returns 0 unconditionally, I think this is what "MPOL_MF_STRICT is ignored on huge page mappings" means in code.
> 
> It would return -EIO for base pages or THP as what the manpage describes.
> 

I was thinking about a migration failure after isolation.  This block of
code in do_mbind() after queue_pages_range() and mbind_range().

        if (!err) {
                int nr_failed = 0;

                if (!list_empty(&pagelist)) {
                        WARN_ON_ONCE(flags & MPOL_MF_LAZY);
                        nr_failed = migrate_pages(&pagelist, new_page, NULL,
                                start, MIGRATE_SYNC, MR_MEMPOLICY_MBIND);
                        if (nr_failed)
                                putback_movable_pages(&pagelist);
                }

                if ((ret > 0) || (nr_failed && (flags & MPOL_MF_STRICT)))
                        err = -EIO;

-- 
Mike Kravetz




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux