From: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
To: "Kirill A. Shutemov" <kirill@shutemov.name>
Cc: containers@lists.linux-foundation.org, linux-mm@kvack.org,
Paul Menage <menage@google.com>, Li Zefan <lizf@cn.fujitsu.com>,
Andrew Morton <akpm@linux-foundation.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Balbir Singh <balbir@linux.vnet.ibm.com>,
Pavel Emelyanov <xemul@openvz.org>,
Dan Malek <dan@embeddedalley.com>,
Vladislav Buzov <vbuzov@embeddedalley.com>,
Alexander Shishkin <virtuoso@slind.org>,
linux-kernel@vger.kernel.org,
Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Subject: Re: [PATCH v4 4/4] memcg: implement memory thresholds
Date: Mon, 28 Dec 2009 13:42:45 +0900 [thread overview]
Message-ID: <20091228134245.8db992d1.nishimura@mxp.nes.nec.co.jp> (raw)
In-Reply-To: <7a4e1d758b98ca633a0be06e883644ad8813c077.1261858972.git.kirill@shutemov.name>
On Sun, 27 Dec 2009 04:09:02 +0200, "Kirill A. Shutemov" <kirill@shutemov.name> wrote:
> It allows to register multiple memory and memsw thresholds and gets
> notifications when it crosses.
>
> To register a threshold application need:
> - create an eventfd;
> - open memory.usage_in_bytes or memory.memsw.usage_in_bytes;
> - write string like "<event_fd> <memory.usage_in_bytes> <threshold>" to
> cgroup.event_control.
>
> Application will be notified through eventfd when memory usage crosses
> threshold in any direction.
>
> It's applicable for root and non-root cgroup.
>
> It uses stats to track memory usage, simmilar to soft limits. It checks
> if we need to send event to userspace on every 100 page in/out. I guess
> it's good compromise between performance and accuracy of thresholds.
>
> Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
> ---
> Documentation/cgroups/memory.txt | 19 +++-
> mm/memcontrol.c | 275 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 293 insertions(+), 1 deletions(-)
>
> diff --git a/Documentation/cgroups/memory.txt b/Documentation/cgroups/memory.txt
> index b871f25..195af07 100644
> --- a/Documentation/cgroups/memory.txt
> +++ b/Documentation/cgroups/memory.txt
> @@ -414,7 +414,24 @@ NOTE1: Soft limits take effect over a long period of time, since they involve
> NOTE2: It is recommended to set the soft limit always below the hard limit,
> otherwise the hard limit will take precedence.
>
> -8. TODO
> +8. Memory thresholds
> +
> +Memory controler implements memory thresholds using cgroups notification
> +API (see cgroups.txt). It allows to register multiple memory and memsw
> +thresholds and gets notifications when it crosses.
> +
> +To register a threshold application need:
> + - create an eventfd using eventfd(2);
> + - open memory.usage_in_bytes or memory.memsw.usage_in_bytes;
> + - write string like "<event_fd> <memory.usage_in_bytes> <threshold>" to
> + cgroup.event_control.
> +
> +Application will be notified through eventfd when memory usage crosses
> +threshold in any direction.
> +
> +It's applicable for root and non-root cgroup.
> +
> +9. TODO
>
> 1. Add support for accounting huge pages (as a separate controller)
> 2. Make per-cgroup scanner reclaim not-shared pages first
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 36eb7af..3a0a6a1 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
It would be a nitpick, but my patch(http://marc.info/?l=linux-mm-commits&m=126152804420992&w=2)
has already modified here.
I think it might be better for you to apply my patches by hand or wait for next mmotm
to be released to avoid bothering Andrew.
(There is enough time left till the next merge window :))
(snip)
> +static void __mem_cgroup_threshold(struct mem_cgroup *memcg, bool swap)
> +{
> + struct mem_cgroup_threshold_ary *thresholds;
> + u64 usage = mem_cgroup_usage(memcg, swap);
> + int i, cur;
> +
I think calling mem_cgroup_usage() after checking "if(!thresholds)"
decreases the overhead a little when we don't set any thresholds.
I've confirmed that the change makes the assembler output different.
> + rcu_read_lock();
> + if (!swap) {
> + thresholds = rcu_dereference(memcg->thresholds);
> + } else {
> + thresholds = rcu_dereference(memcg->memsw_thresholds);
> + }
> +
> + if (!thresholds)
> + goto unlock;
> +
> + cur = atomic_read(&thresholds->cur);
> +
> + /* Check if a threshold crossed in any direction */
> +
> + for(i = cur; i >= 0 &&
> + unlikely(thresholds->entries[i].threshold > usage); i--) {
> + atomic_dec(&thresholds->cur);
> + eventfd_signal(thresholds->entries[i].eventfd, 1);
> + }
> +
> + for(i = cur + 1; i < thresholds->size &&
> + unlikely(thresholds->entries[i].threshold <= usage); i++) {
> + atomic_inc(&thresholds->cur);
> + eventfd_signal(thresholds->entries[i].eventfd, 1);
> + }
> +unlock:
> + rcu_read_unlock();
> +}
> +
Thanks,
Daisuke Nishimura.
--
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:[~2009-12-28 4:48 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-27 2:08 [PATCH v4 0/4] cgroup notifications API and " Kirill A. Shutemov
2009-12-27 2:08 ` [PATCH v4 1/4] cgroup: implement eventfd-based generic API for notifications Kirill A. Shutemov
2009-12-27 2:09 ` [PATCH v4 2/4] memcg: extract mem_group_usage() from mem_cgroup_read() Kirill A. Shutemov
2009-12-27 2:09 ` [PATCH v4 3/4] memcg: rework usage of stats by soft limit Kirill A. Shutemov
2009-12-27 2:09 ` [PATCH v4 4/4] memcg: implement memory thresholds Kirill A. Shutemov
2009-12-28 2:43 ` KAMEZAWA Hiroyuki
2009-12-28 3:23 ` Kirill A. Shutemov
2009-12-28 4:14 ` KAMEZAWA Hiroyuki
2009-12-28 4:42 ` Daisuke Nishimura [this message]
2009-12-30 13:03 ` Kirill A. Shutemov
2009-12-28 2:28 ` [PATCH v4 3/4] memcg: rework usage of stats by soft limit KAMEZAWA Hiroyuki
2009-12-28 2:37 ` Daisuke Nishimura
2009-12-28 2:30 ` [PATCH v4 2/4] memcg: extract mem_group_usage() from mem_cgroup_read() KAMEZAWA Hiroyuki
2009-12-28 2:31 ` [PATCH v4 1/4] cgroup: implement eventfd-based generic API for notifications KAMEZAWA Hiroyuki
2009-12-27 12:47 ` [PATCH v4 0/4] cgroup notifications API and memory thresholds Balbir Singh
2009-12-27 18:37 ` Kirill A. Shutemov
2010-01-04 0:15 ` Balbir Singh
2009-12-28 2:27 ` KAMEZAWA Hiroyuki
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=20091228134245.8db992d1.nishimura@mxp.nes.nec.co.jp \
--to=nishimura@mxp.nes.nec.co.jp \
--cc=akpm@linux-foundation.org \
--cc=balbir@linux.vnet.ibm.com \
--cc=containers@lists.linux-foundation.org \
--cc=dan@embeddedalley.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lizf@cn.fujitsu.com \
--cc=menage@google.com \
--cc=vbuzov@embeddedalley.com \
--cc=virtuoso@slind.org \
--cc=xemul@openvz.org \
/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