From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
To: kosaki.motohiro@jp.fujitsu.com
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
akpm@linux-foundation.org, kamezawa.hiroyu@jp.fujitsu.com,
minchan.kim@gmail.com, riel@redhat.com
Subject: [PATCH 3/3] vmscan: implement swap token priority decay
Date: Fri, 13 May 2011 20:42:11 +0900 [thread overview]
Message-ID: <4DCD1913.2090200@jp.fujitsu.com> (raw)
In-Reply-To: <4DCD1824.1060801@jp.fujitsu.com>
While testing for memcg aware swap token, I observed a swap token
was often grabbed an intermittent running process (eg init, auditd)
and they never release a token.
Why? Currently, swap toke priority is only decreased at page fault
path. Then, if the process sleep immediately after to grab swap
token, their swap token priority never be decreased. That makes
obviously undesired result.
This patch implement very poor (and lightweight) priority decay
mechanism. It only be affect to the above corner case and doesn't
change swap tendency workload performance (eg multi process qsbench
load)
Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
---
include/trace/events/vmscan.h | 12 ++++++++----
mm/thrash.c | 5 ++++-
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h
index 1798e0c..ba18137 100644
--- a/include/trace/events/vmscan.h
+++ b/include/trace/events/vmscan.h
@@ -366,9 +366,10 @@ DEFINE_EVENT_CONDITION(put_swap_token_template, disable_swap_token,
TRACE_EVENT_CONDITION(update_swap_token_priority,
TP_PROTO(struct mm_struct *mm,
- unsigned int old_prio),
+ unsigned int old_prio,
+ struct mm_struct *swap_token_mm),
- TP_ARGS(mm, old_prio),
+ TP_ARGS(mm, old_prio, swap_token_mm),
TP_CONDITION(mm->token_priority != old_prio),
@@ -376,16 +377,19 @@ TRACE_EVENT_CONDITION(update_swap_token_priority,
__field(struct mm_struct*, mm)
__field(unsigned int, old_prio)
__field(unsigned int, new_prio)
+ __field(unsigned int, token_prio)
),
TP_fast_assign(
__entry->mm = mm;
__entry->old_prio = old_prio;
__entry->new_prio = mm->token_priority;
+ __entry->token_prio = swap_token_mm ? swap_token_mm->token_priority : 0;
),
- TP_printk("mm=%p old_prio=%u new_prio=%u",
- __entry->mm, __entry->old_prio, __entry->new_prio)
+ TP_printk("mm=%p old_prio=%u new_prio=%u token_prio=%u",
+ __entry->mm, __entry->old_prio, __entry->new_prio,
+ __entry->token_prio)
);
#endif /* _TRACE_VMSCAN_H */
diff --git a/mm/thrash.c b/mm/thrash.c
index 14c6c9f..0c4f0a8 100644
--- a/mm/thrash.c
+++ b/mm/thrash.c
@@ -47,6 +47,9 @@ void grab_swap_token(struct mm_struct *mm)
if (!swap_token_mm)
goto replace_token;
+ if (!(global_faults & 0xff))
+ mm->token_priority /= 2;
+
if (mm == swap_token_mm) {
mm->token_priority += 2;
goto update_priority;
@@ -64,7 +67,7 @@ void grab_swap_token(struct mm_struct *mm)
goto replace_token;
update_priority:
- trace_update_swap_token_priority(mm, old_prio);
+ trace_update_swap_token_priority(mm, old_prio, swap_token_mm);
out:
mm->faultstamp = global_faults;
--
1.7.3.1
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2011-05-13 11:40 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-13 11:38 [PATCH 0/3] swap token revisit KOSAKI Motohiro
2011-05-13 11:40 ` [PATCH 1/3] vmscan,memcg: memcg aware swap token KOSAKI Motohiro
2011-05-15 17:56 ` Rik van Riel
2011-05-16 8:01 ` KAMEZAWA Hiroyuki
2011-05-13 11:40 ` [PATCH 2/3] vmscan: implement swap token trace KOSAKI Motohiro
2011-05-15 22:26 ` Rik van Riel
2011-05-16 8:02 ` KAMEZAWA Hiroyuki
2011-05-13 11:42 ` KOSAKI Motohiro [this message]
2011-05-15 22:34 ` [PATCH 3/3] vmscan: implement swap token priority decay Rik van Riel
2011-05-16 8:22 ` KAMEZAWA Hiroyuki
2011-05-18 1:08 ` KOSAKI Motohiro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DCD1913.2090200@jp.fujitsu.com \
--to=kosaki.motohiro@jp.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan.kim@gmail.com \
--cc=riel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox