From: Balbir Singh <balbir@linux.vnet.ibm.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>,
Paul Menage <menage@google.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Balbir Singh <balbir@linux.vnet.ibm.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Subject: [RFC 4/5] Memory controller soft limit resource counter additions
Date: Fri, 27 Jun 2008 20:48:56 +0530 [thread overview]
Message-ID: <20080627151856.31664.88305.sendpatchset@balbir-laptop> (raw)
In-Reply-To: <20080627151808.31664.36047.sendpatchset@balbir-laptop>
Add soft_limit is a parameter to the resource counters infrastructure.
Helper routines are also added to detect soft limit overflow.
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
---
include/linux/res_counter.h | 35 +++++++++++++++++++++++++++++++----
kernel/res_counter.c | 2 ++
mm/memcontrol.c | 6 ++++++
3 files changed, 39 insertions(+), 4 deletions(-)
diff -puN include/linux/res_counter.h~memory-controller-soft-limit-res-counter-updates include/linux/res_counter.h
--- linux-2.6.26-rc5/include/linux/res_counter.h~memory-controller-soft-limit-res-counter-updates 2008-06-27 20:43:10.000000000 +0530
+++ linux-2.6.26-rc5-balbir/include/linux/res_counter.h 2008-06-27 20:43:10.000000000 +0530
@@ -35,6 +35,12 @@ struct res_counter {
*/
unsigned long long limit;
/*
+ * the limit that usage can exceed. When resource contention is
+ * detected, the controller will try and pull back resources from
+ * counters that have exceeded their soft limit.
+ */
+ unsigned long long soft_limit;
+ /*
* the number of unsuccessful attempts to consume the resource
*/
unsigned long long failcnt;
@@ -75,6 +81,7 @@ enum {
RES_USAGE,
RES_MAX_USAGE,
RES_LIMIT,
+ RES_SOFT_LIMIT,
RES_FAILCNT,
};
@@ -113,11 +120,17 @@ int __must_check res_counter_charge(stru
void res_counter_uncharge_locked(struct res_counter *counter, unsigned long val);
void res_counter_uncharge(struct res_counter *counter, unsigned long val);
-static inline bool res_counter_limit_check_locked(struct res_counter *cnt)
+static inline bool res_counter_limit_check_locked(struct res_counter *cnt,
+ int member)
{
- if (cnt->usage < cnt->limit)
+ switch (member) {
+ case RES_LIMIT:
+ if (cnt->usage < cnt->limit)
return true;
-
+ case RES_SOFT_LIMIT:
+ if (cnt->usage < cnt->soft_limit)
+ return true;
+ }
return false;
}
@@ -131,7 +144,21 @@ static inline bool res_counter_check_und
unsigned long flags;
spin_lock_irqsave(&cnt->lock, flags);
- ret = res_counter_limit_check_locked(cnt);
+ ret = res_counter_limit_check_locked(cnt, RES_LIMIT);
+ spin_unlock_irqrestore(&cnt->lock, flags);
+ return ret;
+}
+
+/*
+ * Helper function to detect if the cgroup is within it's soft limit
+ */
+static inline bool res_counter_check_under_soft_limit(struct res_counter *cnt)
+{
+ bool ret;
+ unsigned long flags;
+
+ spin_lock_irqsave(&cnt->lock, flags);
+ ret = res_counter_limit_check_locked(cnt, RES_SOFT_LIMIT);
spin_unlock_irqrestore(&cnt->lock, flags);
return ret;
}
diff -puN kernel/res_counter.c~memory-controller-soft-limit-res-counter-updates kernel/res_counter.c
--- linux-2.6.26-rc5/kernel/res_counter.c~memory-controller-soft-limit-res-counter-updates 2008-06-27 20:43:10.000000000 +0530
+++ linux-2.6.26-rc5-balbir/kernel/res_counter.c 2008-06-27 20:43:10.000000000 +0530
@@ -72,6 +72,8 @@ res_counter_member(struct res_counter *c
return &counter->max_usage;
case RES_LIMIT:
return &counter->limit;
+ case RES_SOFT_LIMIT:
+ return &counter->soft_limit;
case RES_FAILCNT:
return &counter->failcnt;
};
diff -puN mm/memcontrol.c~memory-controller-soft-limit-res-counter-updates mm/memcontrol.c
--- linux-2.6.26-rc5/mm/memcontrol.c~memory-controller-soft-limit-res-counter-updates 2008-06-27 20:43:10.000000000 +0530
+++ linux-2.6.26-rc5-balbir/mm/memcontrol.c 2008-06-27 20:43:10.000000000 +0530
@@ -972,6 +972,12 @@ static struct cftype mem_cgroup_files[]
.read_u64 = mem_cgroup_read,
},
{
+ .name = "soft_limit_in_bytes",
+ .private = RES_SOFT_LIMIT,
+ .write = mem_cgroup_write,
+ .read_u64 = mem_cgroup_read,
+ },
+ {
.name = "failcnt",
.private = RES_FAILCNT,
.trigger = mem_cgroup_reset,
diff -puN include/linux/memcontrol.h~memory-controller-soft-limit-res-counter-updates include/linux/memcontrol.h
_
--
Warm Regards,
Balbir Singh
Linux Technology Center
IBM, ISTL
--
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>
next prev parent reply other threads:[~2008-06-27 15:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-27 15:18 [RFC 0/5] Memory controller soft limit introduction (v3) Balbir Singh
2008-06-27 15:18 ` [RFC 1/5] Memory controller soft limit documentation Balbir Singh
2008-06-27 15:18 ` [RFC 2/5] Add delete max to prio heap Balbir Singh
2008-06-27 15:18 ` [RFC 3/5] Replacement policy on heap overfull Balbir Singh
2008-06-27 15:37 ` Paul Menage
2008-06-30 3:46 ` Balbir Singh
2008-06-27 15:18 ` Balbir Singh [this message]
2008-06-27 15:19 ` [RFC 5/5] Memory controller soft limit reclaim on contention Balbir Singh
2008-06-27 16:09 ` Paul Menage
2008-06-29 4:48 ` Balbir Singh
2008-06-30 3:42 ` Balbir Singh
2008-06-28 4:22 ` KAMEZAWA Hiroyuki
2008-06-30 7:33 ` KOSAKI Motohiro
2008-06-30 7:48 ` Balbir Singh
2008-06-30 7:56 ` KOSAKI Motohiro
2008-06-30 8:11 ` Balbir Singh
2008-06-30 8:17 ` KOSAKI Motohiro
2008-06-28 4:36 ` [RFC 0/5] Memory controller soft limit introduction (v3) KAMEZAWA Hiroyuki
2008-06-29 5:02 ` Balbir Singh
2008-06-30 1:20 ` KAMEZAWA Hiroyuki
2008-06-30 1:50 ` KAMEZAWA Hiroyuki
2008-06-30 2:02 ` KAMEZAWA Hiroyuki
2008-06-30 3:41 ` Balbir Singh
2008-06-30 3:57 ` KAMEZAWA Hiroyuki
2008-06-30 4:00 ` Balbir Singh
2008-06-30 4:19 ` KAMEZAWA Hiroyuki
2008-06-30 4:40 ` Balbir Singh
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=20080627151856.31664.88305.sendpatchset@balbir-laptop \
--to=balbir@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=menage@google.com \
--cc=yamamoto@valinux.co.jp \
/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