lkml.org 
[lkml]   [2022]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] psi: Treat ksm swapping in copy as memstall
Date
From: Yang Yang <yang.yang29@zte.com.cn>

When faults in from swap what used to be a ksm page and that page
had been swapped in before, system has to make a copy. Obviously
this kind of copy is related to high memory pressure, so we treat
it as memstall. Although ksm page merging is not because of high
memory pressure.

Information of this new kind of stall will help psi to account
memory pressure more precise.

Signed-off-by: Yang Yang <yang.yang29@zte.com.cn>
---
mm/ksm.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/mm/ksm.c b/mm/ksm.c
index 4a7f8614e57d..d4ec6773f9b8 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -39,6 +39,7 @@
#include <linux/freezer.h>
#include <linux/oom.h>
#include <linux/numa.h>
+#include <linux/psi.h>

#include <asm/tlbflush.h>
#include "internal.h"
@@ -2569,6 +2570,7 @@ struct page *ksm_might_need_to_copy(struct page *page,
{
struct anon_vma *anon_vma = page_anon_vma(page);
struct page *new_page;
+ unsigned long pflags;

if (PageKsm(page)) {
if (page_stable_node(page) &&
@@ -2583,6 +2585,7 @@ struct page *ksm_might_need_to_copy(struct page *page,
if (!PageUptodate(page))
return page; /* let do_swap_page report the error */

+ psi_memstall_enter(&pflags);
new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address);
if (new_page &&
mem_cgroup_charge(page_folio(new_page), vma->vm_mm, GFP_KERNEL)) {
@@ -2600,6 +2603,7 @@ struct page *ksm_might_need_to_copy(struct page *page,
#endif
}

+ psi_memstall_leave(&pflags);
return new_page;
}

--
2.25.1
\
 
 \ /
  Last update: 2022-01-16 16:23    [W:0.076 / U:0.064 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site