Home » Mailing lists » Devel » [RFC][PATCH 0/7] Resource controllers based on process containers
Re: [RFC][PATCH 1/7] Resource counters [message #17647 is a reply to message #10913] |
Fri, 09 March 2007 16:37 |
Herbert Poetzl
Messages: 239 Registered: February 2006
|
Senior Member |
|
|
On Wed, Mar 07, 2007 at 10:19:05AM +0300, Pavel Emelianov wrote:
> Balbir Singh wrote:
> > Pavel Emelianov wrote:
> >> Introduce generic structures and routines for
> >> resource accounting.
> >>
> >> Each resource accounting container is supposed to
> >> aggregate it, container_subsystem_state and its
> >> resource-specific members within.
> >>
> >>
> >> ------------------------------------------------------------------------
> >>
> >> diff -upr linux-2.6.20.orig/include/linux/res_counter.h
> >> linux-2.6.20-0/include/linux/res_counter.h
> >> --- linux-2.6.20.orig/include/linux/res_counter.h 2007-03-06
> >> 13:39:17.000000000 +0300
> >> +++ linux-2.6.20-0/include/linux/res_counter.h 2007-03-06
> >> 13:33:28.000000000 +0300
> >> @@ -0,0 +1,83 @@
> >> +#ifndef __RES_COUNTER_H__
> >> +#define __RES_COUNTER_H__
> >> +/*
> >> + * resource counters
> >> + *
> >> + * Copyright 2007 OpenVZ SWsoft Inc
> >> + *
> >> + * Author: Pavel Emelianov <xemul@openvz.org>
> >> + *
> >> + */
> >> +
> >> +#include <linux/container.h>
> >> +
> >> +struct res_counter {
> >> + unsigned long usage;
> >> + unsigned long limit;
> >> + unsigned long failcnt;
> >> + spinlock_t lock;
> >> +};
> >> +
> >> +enum {
> >> + RES_USAGE,
> >> + RES_LIMIT,
> >> + RES_FAILCNT,
> >> +};
> >> +
> >> +ssize_t res_counter_read(struct res_counter *cnt, int member,
> >> + const char __user *buf, size_t nbytes, loff_t *pos);
> >> +ssize_t res_counter_write(struct res_counter *cnt, int member,
> >> + const char __user *buf, size_t nbytes, loff_t *pos);
> >> +
> >> +static inline void res_counter_init(struct res_counter *cnt)
> >> +{
> >> + spin_lock_init(&cnt->lock);
> >> + cnt->limit = (unsigned long)LONG_MAX;
> >> +}
> >> +
> >
> > Is there any way to indicate that there are no limits on this container.
>
> Yes - LONG_MAX is essentially a "no limit" value as no
> container will ever have such many files :)
-1 or ~0 is a viable choice for userspace to
communicate 'infinite' or 'unlimited'
> > LONG_MAX is quite huge, but still when the administrator wants to
> > configure a container to *un-limited usage*, it becomes hard for
> > the administrator.
> >
> >> +static inline int res_counter_charge_locked(struct res_counter *cnt,
> >> + unsigned long val)
> >> +{
> >> + if (cnt->usage <= cnt->limit - val) {
> >> + cnt->usage += val;
> >> + return 0;
> >> + }
> >> +
> >> + cnt->failcnt++;
> >> + return -ENOMEM;
> >> +}
> >> +
> >> +static inline int res_counter_charge(struct res_counter *cnt,
> >> + unsigned long val)
> >> +{
> >> + int ret;
> >> + unsigned long flags;
> >> +
> >> + spin_lock_irqsave(&cnt->lock, flags);
> >> + ret = res_counter_charge_locked(cnt, val);
> >> + spin_unlock_irqrestore(&cnt->lock, flags);
> >> + return ret;
> >> +}
> >> +
> >
> > Will atomic counters help here.
>
> I'm afraid no. We have to atomically check for limit and alter
> one of usage or failcnt depending on the checking result. Making
> this with atomic_xxx ops will require at least two ops.
Linux-VServer does the accounting with atomic counters,
so that works quite fine, just do the checks at the
beginning of whatever resource allocation and the
accounting once the resource is acquired ...
> If we'll remove failcnt this would look like
> while (atomic_cmpxchg(...))
> which is also not that good.
>
> Moreover - in RSS accounting patches I perform page list
> manipulations under this lock, so this also saves one atomic op.
it still hasn't been shown that this kind of RSS limit
doesn't add big time overhead to normal operations
(inside and outside of such a resource container)
note that the 'usual' memory accounting is much more
lightweight and serves similar purposes ...
best,
Herbert
> >> +static inline void res_counter_uncharge_locked(struct res_counter *cnt,
> >> + unsigned long val)
> >> +{
> >> + if (unlikely(cnt->usage < val)) {
> >> + WARN_ON(1);
> >> + val = cnt->usage;
> >> + }
> >> +
> >> + cnt->usage -= val;
> >> +}
> >> +
> >> +static inline void res_counter_uncharge(struct res_counter *cnt,
> >> + unsigned long val)
> >> +{
> >> + unsigned long flags;
> >> +
> >> + spin_lock_irqsave(&cnt->lock, flags);
> >> + res_counter_uncharge_locked(cnt, val);
> >> + spin_unlock_irqrestore(&cnt->lock, flags);
> >> +}
> >> +
> >> +#endif
> >> diff -upr linux-2.6.20.orig/init/Kconfig linux-2.6.20-0/init/Kconfig
> >> --- linux-2.6.20.orig/init/Kconfig 2007-03-06 13:33:28.000000000 +0300
> >> +++ linux-2.6.20-0/init/Kconfig 2007-03-06 13:33:28.000000000 +0300
> >> @@ -265,6 +265,10 @@ config CPUSETS
> >>
> >> Say N if unsure.
> >>
> >> +config RESOURCE_COUNTERS
> >> + bool
> >> + select CONTAINERS
> >> +
> >> config SYSFS_DEPRECATED
> >> bool "Create deprecated sysfs files"
> >> default y
> >> diff -upr linux-2.6.20.orig/kernel/Makefile
> >> linux-2.6.20-0/kernel/Makefile
> >> --- linux-2.6.20.orig/kernel/Makefile 2007-03-06 13:33:28.000000000
> >> +0300
> >> +++ linux-2.6.20-0/kernel/Makefile 2007-03-06 13:33:28.000000000 +0300
> >> @@ -51,6 +51,7 @@ obj-$(CONFIG_RELAY) += relay.o
> >> obj-$(CONFIG_UTS_NS) += utsname.o
> >> obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
> >> obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
> >> +obj-$(CONFIG_RESOURCE_COUNTERS) += res_counter.o
> >>
> >> ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
> >> # According to Alan Modra <alan@linuxcare.com.au>, the
> >> -fno-omit-frame-pointer is
> >> diff -upr linux-2.6.20.orig/kernel/res_counter.c
> >> linux-2.6.20-0/kernel/res_counter.c
> >> --- linux-2.6.20.orig/kernel/res_counter.c 2007-03-06
> >> 13:39:17.000000000 +0300
> >> +++ linux-2.6.20-0/kernel/res_counter.c 2007-03-06
> >> 13:33:28.000000000 +0300
> >> @@ -0,0 +1,72 @@
> >> +/*
> >> + * resource containers
> >> + *
> >> + * Copyright 2007 OpenVZ SWsoft Inc
> >> + *
> >> + * Author: Pavel Emelianov <xemul@openvz.org>
> >> + *
> >> + */
> >> +
> >> +#include <linux/parser.h>
> >> +#include <linux/fs.h>
> >> +#include <linux/res_counter.h>
> >> +#include <asm/uaccess.h>
> >> +
> >> +static inline unsigned long *res_counter_member(struct res_counter
> >> *cnt, int member)
> >> +{
> >> + switch (member) {
> >> + case RES_USAGE:
> >> + return &cnt->usage;
> >> + case RES_LIMIT:
> >> + return &cnt->limit;
> >> + case RES_FAILCNT:
> >> + return &cnt->failcnt;
> >> + };
> >> +
> >> + BUG();
> >> + return NULL;
> >> +}
> >> +
> >> +ssize_t res_counter_read(struct res_counter *cnt, int member,
> >> + const char __user *userbuf, size_t nbytes, loff_t *pos)
> >> +{
> >> + unsigned long *val;
> >> + char buf[64], *s;
> >> +
> >> + s = buf;
> >> + val = res_counter_member(cnt, member);
> >> + s += sprintf(s, "%lu\n", *val);
> >> + return simple_read_from_buffer((void __user *)userbuf, nbytes,
> >> + pos, buf, s - buf);
> >> +}
> >> +
> >> +ssize_t res_counter_write(struct res_counter *cnt, int member,
> >> + const char __user *userbuf, size_t nbytes, loff_t *pos)
> >> +{
> >> + int ret;
> >> + char *buf, *end;
> >> + unsigned long tmp, *val;
> >> +
> >> + buf = kmalloc(nbytes + 1, GFP_KERNEL);
> >> + ret = -ENOMEM;
> >> + if (buf == NULL)
> >> + goto out;
> >> +
> >> + buf[nbytes] = 0;
> >> + ret = -EFAULT;
> >> + if (copy_from_user(buf, userbuf, nbytes))
> >> + goto out_free;
> >> +
> >> + ret = -EINVAL;
> >> + tmp = simple_strtoul(buf, &end, 10);
> >> + if (*end != '\0')
> >> + goto out_free;
> >> +
> >> + val = res_counter_member(cnt, member);
> >> + *val = tmp;
> >> + ret = nbytes;
> >> +out_free:
> >> + kfree(buf);
> >> +out:
> >> + return ret;
> >> +}
> >>
> >
> &g
...
|
|
|
|
|
[RFC][PATCH 0/7] Resource controllers based on process containers
By: xemul on Tue, 06 March 2007 14:42
|
|
|
[RFC][PATCH 1/7] Resource counters
By: xemul on Tue, 06 March 2007 14:47
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: xemul on Wed, 07 March 2007 07:17
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: xemul on Sun, 11 March 2007 09:01
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: ebiederm on Sun, 11 March 2007 19:00
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: ebiederm on Tue, 13 March 2007 09:09
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: xemul on Tue, 13 March 2007 09:27
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: xemul on Tue, 13 March 2007 15:41
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: xemul on Wed, 14 March 2007 07:12
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
By: ebiederm on Thu, 15 March 2007 16:51
|
|
|
Re: Re: [RFC][PATCH 1/7] Resource counters
By: dev on Tue, 13 March 2007 09:36
|
|
|
Re: [RFC][PATCH 1/7] Resource counters
|
|
|
[RFC][PATCH 2/7] RSS controller core
By: xemul on Tue, 06 March 2007 14:53
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: dev on Sun, 11 March 2007 12:13
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: ebiederm on Sun, 11 March 2007 19:34
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: xemul on Mon, 12 March 2007 09:02
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: xemul on Tue, 13 March 2007 07:17
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: xemul on Tue, 13 March 2007 15:32
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: dev on Tue, 13 March 2007 15:10
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
By: ebiederm on Tue, 13 March 2007 09:26
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
By: dev on Tue, 13 March 2007 15:30
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
By: dev on Tue, 13 March 2007 10:06
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: mel on Wed, 14 March 2007 15:38
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: Re: [RFC][PATCH 2/7] RSS controller core
By: ebiederm on Mon, 19 March 2007 17:41
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: xemul on Sun, 11 March 2007 09:08
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: xemul on Sun, 11 March 2007 15:04
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: xemul on Mon, 12 March 2007 08:31
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: xemul on Wed, 07 March 2007 07:25
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: ebiederm on Sun, 18 March 2007 16:58
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: akpm on Tue, 13 March 2007 06:04
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: Alan Cox on Tue, 13 March 2007 19:09
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: ebiederm on Fri, 16 March 2007 00:55
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: ebiederm on Fri, 16 March 2007 18:54
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: mel on Wed, 14 March 2007 16:47
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: dev on Tue, 13 March 2007 15:54
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: mel on Tue, 20 March 2007 18:57
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
By: ebiederm on Sun, 18 March 2007 17:42
|
|
|
Re: [RFC][PATCH 2/7] RSS controller core
|
|
|
controlling mmap()'d vs read/write() pages
|
|
|
Re: controlling mmap()'d vs read/write() pages
By: ebiederm on Tue, 20 March 2007 21:19
|
|
|
Re: controlling mmap()'d vs read/write() pages
|
|
|
Re: controlling mmap()'d vs read/write() pages
|
|
|
Re: controlling mmap()'d vs read/write() pages
By: ebiederm on Fri, 23 March 2007 10:12
|
|
|
Re: controlling mmap()'d vs read/write() pages
|
|
|
Re: controlling mmap()'d vs read/write() pages
|
|
|
Re: controlling mmap()'d vs read/write() pages
|
|
|
Re: controlling mmap()'d vs read/write() pages
|
|
|
Re: controlling mmap()'d vs read/write() pages
By: ebiederm on Fri, 23 March 2007 12:21
|
|
|
Re: controlling mmap()'d vs read/write() pages
|
|
|
[RFC][PATCH 3/7] Data structures changes for RSS accounting
By: xemul on Tue, 06 March 2007 14:55
|
|
|
Re: [RFC][PATCH 3/7] Data structures changes for RSS accounting
By: ebiederm on Sun, 11 March 2007 19:13
|
|
|
Re: [RFC][PATCH 3/7] Data structures changes for RSS accounting
By: dev on Mon, 12 March 2007 16:16
|
|
|
Re: [RFC][PATCH 3/7] Data structures changes for RSS accounting
|
|
|
Re: [RFC][PATCH 3/7] Data structures changes for RSS accounting
By: xemul on Mon, 12 March 2007 17:19
|
|
|
Re: [RFC][PATCH 3/7] Data structures changes for RSS accounting
|
|
|
Re: [RFC][PATCH 3/7] Data structures changes for RSS accounting
|
|
|
Re: [RFC][PATCH 3/7] Data structures changes for RSS accounting
By: xemul on Tue, 13 March 2007 07:10
|
|
|
[RFC][PATCH 4/7] RSS accounting hooks over the code
By: xemul on Tue, 06 March 2007 14:57
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: xemul on Wed, 14 March 2007 15:43
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: ebiederm on Sun, 11 March 2007 19:14
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: dev on Mon, 12 March 2007 16:23
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: dev on Mon, 12 March 2007 17:07
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: ebiederm on Tue, 13 March 2007 09:58
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: ebiederm on Tue, 13 March 2007 09:43
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: ebiederm on Tue, 13 March 2007 16:01
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
By: dev on Wed, 14 March 2007 16:16
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
Re: [RFC][PATCH 4/7] RSS accounting hooks over the code
|
|
|
[RFC][PATCH 5/7] Per-container OOM killer and page reclamation
By: xemul on Tue, 06 March 2007 15:01
|
|
|
Re: [RFC][PATCH 5/7] Per-container OOM killer and page reclamation
|
|
|
Re: [RFC][PATCH 5/7] Per-container OOM killer and page reclamation
By: xemul on Sun, 11 March 2007 08:39
|
|
|
[RFC][PATCH 6/7] Account for the number of tasks within container
By: xemul on Tue, 06 March 2007 15:02
|
|
|
Re: [RFC][PATCH 6/7] Account for the number of tasks within container
|
|
|
Re: [RFC][PATCH 6/7] Account for the number of tasks within container
By: xemul on Wed, 07 March 2007 07:10
|
|
|
Re: [RFC][PATCH 6/7] Account for the number of tasks within container
|
|
|
Re: [RFC][PATCH 6/7] Account for the number of tasks within container
By: xemul on Sun, 11 March 2007 08:34
|
|
|
[RFC][PATCH 7/7] Account for the number of files opened within container
By: xemul on Tue, 06 March 2007 15:05
|
|
|
Re: [RFC][PATCH 0/7] Resource controllers based on process containers
|
|
|
Re: [RFC][PATCH 0/7] Resource controllers based on process containers
By: xemul on Wed, 07 March 2007 07:27
|
|
|
Re: [RFC][PATCH 0/7] Resource controllers based on process containers
|
|
|
Re: [RFC][PATCH 0/7] Resource controllers based on process containers
By: xemul on Wed, 07 March 2007 07:30
|
|
|
Re: [RFC][PATCH 0/7] Resource controllers based on process containers
By: dev on Wed, 07 March 2007 09:30
|
Goto Forum:
Current Time: Tue Nov 19 05:50:56 GMT 2024
Total time taken to generate the page: 0.03181 seconds
|