Re: [External] Re: [PATCH v2 4/6] mm: hugetlb: add return -EAGAIN for dissolve_free_huge_page
From: Michal Hocko <mhocko@suse.com>
Date: 2021-01-07 11:23:29
Also in:
lkml
On Thu 07-01-21 17:01:16, Muchun Song wrote:
On Thu, Jan 7, 2021 at 4:39 PM Michal Hocko [off-list ref] wrote:quoted
On Thu 07-01-21 11:11:41, Muchun Song wrote:quoted
On Thu, Jan 7, 2021 at 1:07 AM Michal Hocko [off-list ref] wrote:quoted
On Wed 06-01-21 16:47:37, Muchun Song wrote:quoted
When dissolve_free_huge_page() races with __free_huge_page(), we can do a retry. Because the race window is small.Is this a bug fix or mere optimization. I have hard time to tell from the description.It is optimization. Thanks.quoted
quoted
Signed-off-by: Muchun Song <redacted> --- mm/hugetlb.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-)diff --git a/mm/hugetlb.c b/mm/hugetlb.c[...]quoted
@@ -1825,6 +1828,14 @@ int dissolve_free_huge_page(struct page *page) } out: spin_unlock(&hugetlb_lock); + + /* + * If the freeing of the HugeTLB page is put on a work queue, we should + * flush the work before retrying. + */ + if (unlikely(rc == -EAGAIN)) + flush_work(&free_hpage_work);Is it safe to wait for the work to finish from this context?Yes. It is safe.Please expand on why in the changelog. Same for the optimization including some numbers showing it really helps.OK. Changelog should be updated. Do you agree the race window is quite small?
Yes, the race is very rare and the window itself should be relatively small. This doesn't really answer the question about blocking though.
If so, why is it not an optimization? Don’t we dissolve the page as successfully as possible when we call dissolve_free_huge_page()? I am confused about numbers showing. Because this is not a performance optimization, but an increase in the success rate of dissolving.
And it is a very theoretical one, right? Can you even trigger it? What would happen if the race is lost? Is it serious? This all would be part of the changelog ideally. This is a tricky area that spans hugetlb, memory hotplug and hwpoisoning. All of them tricky. -- Michal Hocko SUSE Labs