linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).