From: Balbir Singh <balbir@linux.vnet.ibm.com>
To: Andrea Righi <righi.andrea@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
randy.dunlap@oracle.com, Paul Menage <menage@google.com>,
Carl Henrik Lunde <chlunde@ping.uio.no>,
eric.rannaud@gmail.com, paolo.valente@unimore.it,
fernando@oss.ntt.co.jp, dradford@bluehost.com,
fchecconi@gmail.com, agk@sourceware.org,
subrata@linux.vnet.ibm.com, axboe@kernel.dk,
akpm@linux-foundation.org, containers@lists.linux-foundation.org,
linux-kernel@vger.kernel.org, dave@linux.vnet.ibm.com,
matt@bluehost.com, roberto@unbit.it, ngupta@google.com
Subject: Re: [PATCH 2/7] res_counter: introduce ratelimiting attributes
Date: Tue, 21 Apr 2009 15:46:59 +0530 [thread overview]
Message-ID: <20090421101659.GF19637@balbir.in.ibm.com> (raw)
In-Reply-To: <20090421095525.GA13699@linux>
* Andrea Righi <righi.andrea@gmail.com> [2009-04-21 11:55:26]:
> On Tue, Apr 21, 2009 at 09:15:34AM +0900, KAMEZAWA Hiroyuki wrote:
> > On Sat, 18 Apr 2009 23:38:27 +0200
> > Andrea Righi <righi.andrea@gmail.com> wrote:
> >
> > > Introduce attributes and functions in res_counter to implement throttling-based
> > > cgroup subsystems.
> > >
> > > The following attributes have been added to struct res_counter:
> > > * @policy: the limiting policy / algorithm
> > > * @capacity: the maximum capacity of the resource
> > > * @timestamp: timestamp of the last accounted resource request
> > >
> > > Currently the available policies are: token-bucket and leaky-bucket and the
> > > attribute @capacity is only used by token-bucket policy (to represent the
> > > bucket size).
> > >
> > > The following function has been implemented to return the amount of time a
> > > cgroup should sleep to remain within the defined resource limits.
> > >
> > > unsigned long long
> > > res_counter_ratelimit_sleep(struct res_counter *res, ssize_t val);
> > >
> > > [ Note: only the interfaces needed by the cgroup IO controller are implemented
> > > right now ]
> > >
> > > Signed-off-by: Andrea Righi <righi.andrea@gmail.com>
> > > ---
> > > include/linux/res_counter.h | 69 +++++++++++++++++++++++++++++++----------
> > > kernel/res_counter.c | 72 +++++++++++++++++++++++++++++++++++++++++++
> > > 2 files changed, 124 insertions(+), 17 deletions(-)
> > >
> > > diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h
> > > index 4c5bcf6..9bed6af 100644
> > > --- a/include/linux/res_counter.h
> > > +++ b/include/linux/res_counter.h
> > > @@ -14,30 +14,36 @@
> > > */
> > >
> > > #include <linux/cgroup.h>
> > > +#include <linux/jiffies.h>
> > >
> > > -/*
> > > - * The core object. the cgroup that wishes to account for some
> > > - * resource may include this counter into its structures and use
> > > - * the helpers described beyond
> > > - */
> > > +/* The various policies that can be used for ratelimiting resources */
> > > +#define RATELIMIT_LEAKY_BUCKET 0
> > > +#define RATELIMIT_TOKEN_BUCKET 1
> > >
> > > +/**
> > > + * struct res_counter - the core object to account cgroup resources
> > > + *
> > > + * @usage: the current resource consumption level
> > > + * @max_usage: the maximal value of the usage from the counter creation
> > > + * @limit: the limit that usage cannot be exceeded
> > > + * @failcnt: the number of unsuccessful attempts to consume the resource
> > > + * @policy: the limiting policy / algorithm
> > > + * @capacity: the maximum capacity of the resource
> > > + * @timestamp: timestamp of the last accounted resource request
> > > + * @lock: the lock to protect all of the above.
> > > + * The routines below consider this to be IRQ-safe
> > > + *
> > > + * The cgroup that wishes to account for some resource may include this counter
> > > + * into its structures and use the helpers described beyond.
> > > + */
> > > struct res_counter {
> > > - /*
> > > - * the current resource consumption level
> > > - */
> > > unsigned long long usage;
> > > - /*
> > > - * the maximal value of the usage from the counter creation
> > > - */
> > > unsigned long long max_usage;
> > > - /*
> > > - * the limit that usage cannot exceed
> > > - */
> > > unsigned long long limit;
> > > - /*
> > > - * the number of unsuccessful attempts to consume the resource
> > > - */
> > > unsigned long long failcnt;
> > > + unsigned long long policy;
> > > + unsigned long long capacity;
> > > + unsigned long long timestamp;
> > >
> > Andrea, sizeof(struct res_counter) is getting close to 128bytes. (maybe someone adds more)
> > Then, could you check "unsigned long or unsigned int" is allowed or not, again ?
> >
> > It's very bad if cacheline of spinlock is different from data field, in future.
>
> Regarding the new attributes, policy can be surely an unsigned int or
> even less (now only 1 bit is used!), maybe we can just add an unsigned
> int flags, and encode also potential future informations there.
>
> Moreover, are we sure we really need an unsigned long long for failcnt?
>
No we don't. But having it helps the members align well on a 8 byte
boundary. For all you know the compiler might do that anyway, unless
we pack the structure.
Why does policy need to be unsigned long long? Can't it be a boolean
for now? Token or leaky? We can consider unioning of some fields like
soft_limit when added along with the proposed fields.
--
Balbir
next prev parent reply other threads:[~2009-04-21 10:18 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-18 21:38 [PATCH 0/7] cgroup: io-throttle controller (v14) Andrea Righi
2009-04-18 21:38 ` [PATCH 1/7] io-throttle documentation Andrea Righi
2009-04-18 21:38 ` [PATCH 2/7] res_counter: introduce ratelimiting attributes Andrea Righi
2009-04-21 0:15 ` KAMEZAWA Hiroyuki
2009-04-21 9:55 ` Andrea Righi
2009-04-21 10:16 ` Balbir Singh [this message]
2009-04-21 14:17 ` Andrea Righi
2009-04-21 10:19 ` KAMEZAWA Hiroyuki
2009-04-21 10:13 ` Balbir Singh
2009-04-21 11:16 ` Andrea Righi
2009-04-18 21:38 ` [PATCH 3/7] page_cgroup: provide a generic page tracking infrastructure Andrea Righi
2009-04-24 2:11 ` Gui Jianfeng
2009-04-24 8:31 ` Andrea Righi
2009-04-24 9:14 ` Gui Jianfeng
2009-04-26 17:19 ` Andrea Righi
2009-04-18 21:38 ` [PATCH 4/7] io-throttle controller infrastructure Andrea Righi
2009-04-20 17:59 ` Paul E. McKenney
2009-04-20 21:22 ` Andrea Righi
2009-04-21 4:15 ` Paul E. McKenney
2009-04-21 12:58 ` Andrea Righi
2009-04-21 14:03 ` Paul E. McKenney
2009-04-18 21:38 ` [PATCH 5/7] kiothrottled: throttle buffered (writeback) IO Andrea Righi
2009-04-23 7:53 ` Gui Jianfeng
2009-04-23 10:25 ` Andrea Righi
2009-04-24 6:36 ` Gui Jianfeng
2009-04-18 21:38 ` [PATCH 6/7] io-throttle instrumentation Andrea Righi
2009-04-18 21:38 ` [PATCH 7/7] export per-task io-throttle statistics to userspace Andrea Righi
-- strict thread matches above, loose matches on Subject: below --
2009-05-03 11:36 [PATCH 0/7] cgroup: io-throttle controller (v16) Andrea Righi
2009-05-03 11:36 ` [PATCH 2/7] res_counter: introduce ratelimiting attributes Andrea Righi
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=20090421101659.GF19637@balbir.in.ibm.com \
--to=balbir@linux.vnet.ibm.com \
--cc=agk@sourceware.org \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=chlunde@ping.uio.no \
--cc=containers@lists.linux-foundation.org \
--cc=dave@linux.vnet.ibm.com \
--cc=dradford@bluehost.com \
--cc=eric.rannaud@gmail.com \
--cc=fchecconi@gmail.com \
--cc=fernando@oss.ntt.co.jp \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matt@bluehost.com \
--cc=menage@google.com \
--cc=ngupta@google.com \
--cc=paolo.valente@unimore.it \
--cc=randy.dunlap@oracle.com \
--cc=righi.andrea@gmail.com \
--cc=roberto@unbit.it \
--cc=subrata@linux.vnet.ibm.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;
as well as URLs for NNTP newsgroup(s).