mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 15:11:16 +00:00
Task Control Groups: shared cgroup subsystem group arrays
Replace the struct css_set embedded in task_struct with a pointer; all tasks that have the same set of memberships across all hierarchies will share a css_set object, and will be linked via their css_sets field to the "tasks" list_head in the css_set. Assuming that many tasks share the same cgroup assignments, this reduces overall space usage and keeps the size of the task_struct down (three pointers added to task_struct compared to a non-cgroups kernel, no matter how many subsystems are registered). [akpm@linux-foundation.org: fix a printk] [akpm@linux-foundation.org: build fix] Signed-off-by: Paul Menage <menage@google.com> Cc: Serge E. Hallyn <serue@us.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Dave Hansen <haveblue@us.ibm.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Paul Jackson <pj@sgi.com> Cc: Kirill Korotaev <dev@openvz.org> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Srivatsa Vaddagiri <vatsa@in.ibm.com> Cc: Cedric Le Goater <clg@fr.ibm.com> Cc: Serge E. Hallyn <serue@us.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Dave Hansen <haveblue@us.ibm.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Paul Jackson <pj@sgi.com> Cc: Kirill Korotaev <dev@openvz.org> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Srivatsa Vaddagiri <vatsa@in.ibm.com> Cc: Cedric Le Goater <clg@fr.ibm.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
a424316ca1
commit
817929ec27
5 changed files with 633 additions and 155 deletions
|
@ -894,34 +894,6 @@ struct sched_entity {
|
|||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CGROUPS
|
||||
|
||||
#define SUBSYS(_x) _x ## _subsys_id,
|
||||
enum cgroup_subsys_id {
|
||||
#include <linux/cgroup_subsys.h>
|
||||
CGROUP_SUBSYS_COUNT
|
||||
};
|
||||
#undef SUBSYS
|
||||
|
||||
/* A css_set is a structure holding pointers to a set of
|
||||
* cgroup_subsys_state objects.
|
||||
*/
|
||||
|
||||
struct css_set {
|
||||
|
||||
/* Set of subsystem states, one for each subsystem. NULL for
|
||||
* subsystems that aren't part of this hierarchy. These
|
||||
* pointers reduce the number of dereferences required to get
|
||||
* from a task to its state for a given cgroup, but result
|
||||
* in increased space usage if tasks are in wildly different
|
||||
* groupings across different hierarchies. This array is
|
||||
* immutable after creation */
|
||||
struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT];
|
||||
|
||||
};
|
||||
|
||||
#endif /* CONFIG_CGROUPS */
|
||||
|
||||
struct task_struct {
|
||||
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
|
||||
void *stack;
|
||||
|
@ -1159,7 +1131,10 @@ struct task_struct {
|
|||
int cpuset_mem_spread_rotor;
|
||||
#endif
|
||||
#ifdef CONFIG_CGROUPS
|
||||
struct css_set cgroups;
|
||||
/* Control Group info protected by css_set_lock */
|
||||
struct css_set *cgroups;
|
||||
/* cg_list protected by css_set_lock and tsk->alloc_lock */
|
||||
struct list_head cg_list;
|
||||
#endif
|
||||
#ifdef CONFIG_FUTEX
|
||||
struct robust_list_head __user *robust_list;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue