* [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages()
@ 2016-07-28 2:54 Jia He
2016-07-28 6:41 ` Naoya Horiguchi
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Jia He @ 2016-07-28 2:54 UTC (permalink / raw)
To: linux-mm
Cc: linux-kernel, Jia He, Andrew Morton, Naoya Horiguchi,
Mike Kravetz, Kirill A. Shutemov, Michal Hocko, Dave Hansen,
Paul Gortmaker
In powerpc servers with large memory(32TB), we watched several soft
lockups for hugepage under stress tests.
The call trace are as follows:
1.
get_page_from_freelist+0x2d8/0xd50
__alloc_pages_nodemask+0x180/0xc20
alloc_fresh_huge_page+0xb0/0x190
set_max_huge_pages+0x164/0x3b0
2.
prep_new_huge_page+0x5c/0x100
alloc_fresh_huge_page+0xc8/0x190
set_max_huge_pages+0x164/0x3b0
This patch is to fix such soft lockups. It is safe to call cond_resched()
there because it is out of spin_lock/unlock section.
Signed-off-by: Jia He <hejianet@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
---
Changes in V2: move cond_resched to a common calling site in set_max_huge_pages
mm/hugetlb.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index abc1c5f..9284280 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2216,6 +2216,10 @@ static unsigned long set_max_huge_pages(struct hstate *h, unsigned long count,
* and reducing the surplus.
*/
spin_unlock(&hugetlb_lock);
+
+ /* yield cpu to avoid soft lockup */
+ cond_resched();
+
if (hstate_is_gigantic(h))
ret = alloc_fresh_gigantic_page(h, nodes_allowed);
else
--
2.5.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages()
2016-07-28 2:54 [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages() Jia He
@ 2016-07-28 6:41 ` Naoya Horiguchi
2016-07-28 7:09 ` Michal Hocko
2016-07-28 16:42 ` Dave Hansen
2 siblings, 0 replies; 4+ messages in thread
From: Naoya Horiguchi @ 2016-07-28 6:41 UTC (permalink / raw)
To: Jia He
Cc: linux-mm, linux-kernel, Andrew Morton, Mike Kravetz,
Kirill A. Shutemov, Michal Hocko, Dave Hansen, Paul Gortmaker
On Thu, Jul 28, 2016 at 10:54:02AM +0800, Jia He wrote:
> In powerpc servers with large memory(32TB), we watched several soft
> lockups for hugepage under stress tests.
> The call trace are as follows:
> 1.
> get_page_from_freelist+0x2d8/0xd50
> __alloc_pages_nodemask+0x180/0xc20
> alloc_fresh_huge_page+0xb0/0x190
> set_max_huge_pages+0x164/0x3b0
>
> 2.
> prep_new_huge_page+0x5c/0x100
> alloc_fresh_huge_page+0xc8/0x190
> set_max_huge_pages+0x164/0x3b0
>
> This patch is to fix such soft lockups. It is safe to call cond_resched()
> there because it is out of spin_lock/unlock section.
>
> Signed-off-by: Jia He <hejianet@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
> Cc: Mike Kravetz <mike.kravetz@oracle.com>
> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Looks good to me.
Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Thanks,
Naoya Horiguchi
>
> ---
> Changes in V2: move cond_resched to a common calling site in set_max_huge_pages
>
> mm/hugetlb.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index abc1c5f..9284280 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -2216,6 +2216,10 @@ static unsigned long set_max_huge_pages(struct hstate *h, unsigned long count,
> * and reducing the surplus.
> */
> spin_unlock(&hugetlb_lock);
> +
> + /* yield cpu to avoid soft lockup */
> + cond_resched();
> +
> if (hstate_is_gigantic(h))
> ret = alloc_fresh_gigantic_page(h, nodes_allowed);
> else
> --
> 2.5.0
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages()
2016-07-28 2:54 [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages() Jia He
2016-07-28 6:41 ` Naoya Horiguchi
@ 2016-07-28 7:09 ` Michal Hocko
2016-07-28 16:42 ` Dave Hansen
2 siblings, 0 replies; 4+ messages in thread
From: Michal Hocko @ 2016-07-28 7:09 UTC (permalink / raw)
To: Jia He
Cc: linux-mm, linux-kernel, Andrew Morton, Naoya Horiguchi,
Mike Kravetz, Kirill A. Shutemov, Dave Hansen, Paul Gortmaker
On Thu 28-07-16 10:54:02, Jia He wrote:
> In powerpc servers with large memory(32TB), we watched several soft
> lockups for hugepage under stress tests.
> The call trace are as follows:
> 1.
> get_page_from_freelist+0x2d8/0xd50
> __alloc_pages_nodemask+0x180/0xc20
> alloc_fresh_huge_page+0xb0/0x190
> set_max_huge_pages+0x164/0x3b0
>
> 2.
> prep_new_huge_page+0x5c/0x100
> alloc_fresh_huge_page+0xc8/0x190
> set_max_huge_pages+0x164/0x3b0
>
> This patch is to fix such soft lockups. It is safe to call cond_resched()
> there because it is out of spin_lock/unlock section.
>
> Signed-off-by: Jia He <hejianet@gmail.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
> Cc: Mike Kravetz <mike.kravetz@oracle.com>
> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Acked-by: Michal Hocko <mhocko@suse.com>
>
> ---
> Changes in V2: move cond_resched to a common calling site in set_max_huge_pages
>
> mm/hugetlb.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index abc1c5f..9284280 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -2216,6 +2216,10 @@ static unsigned long set_max_huge_pages(struct hstate *h, unsigned long count,
> * and reducing the surplus.
> */
> spin_unlock(&hugetlb_lock);
> +
> + /* yield cpu to avoid soft lockup */
> + cond_resched();
> +
> if (hstate_is_gigantic(h))
> ret = alloc_fresh_gigantic_page(h, nodes_allowed);
> else
> --
> 2.5.0
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
--
Michal Hocko
SUSE Labs
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages()
2016-07-28 2:54 [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages() Jia He
2016-07-28 6:41 ` Naoya Horiguchi
2016-07-28 7:09 ` Michal Hocko
@ 2016-07-28 16:42 ` Dave Hansen
2 siblings, 0 replies; 4+ messages in thread
From: Dave Hansen @ 2016-07-28 16:42 UTC (permalink / raw)
To: Jia He, linux-mm
Cc: linux-kernel, Andrew Morton, Naoya Horiguchi, Mike Kravetz,
Kirill A. Shutemov, Michal Hocko, Paul Gortmaker
Looks fine to me.
Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-07-28 16:42 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-28 2:54 [PATCH V2] mm/hugetlb: Avoid soft lockup in set_max_huge_pages() Jia He
2016-07-28 6:41 ` Naoya Horiguchi
2016-07-28 7:09 ` Michal Hocko
2016-07-28 16:42 ` Dave Hansen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).