diff options
Diffstat (limited to 'Documentation/cgroups/cgroups.txt')
| -rw-r--r-- | Documentation/cgroups/cgroups.txt | 42 | 
1 files changed, 39 insertions, 3 deletions
diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt index 0b33bfe7dde..a1ca5924faf 100644 --- a/Documentation/cgroups/cgroups.txt +++ b/Documentation/cgroups/cgroups.txt @@ -22,6 +22,8 @@ CONTENTS:  2. Usage Examples and Syntax    2.1 Basic Usage    2.2 Attaching processes +  2.3 Mounting hierarchies by name +  2.4 Notification API  3. Kernel API    3.1 Overview    3.2 Synchronization @@ -233,8 +235,7 @@ containing the following files describing that cgroup:   - cgroup.procs: list of tgids in the cgroup.  This list is not     guaranteed to be sorted or free of duplicate tgids, and userspace     should sort/uniquify the list if this property is required. -   Writing a tgid into this file moves all threads with that tgid into -   this cgroup. +   This is a read-only file, for now.   - notify_on_release flag: run the release agent on exit?   - release_agent: the path to use for release notifications (this file     exists in the top cgroup only) @@ -434,6 +435,25 @@ you give a subsystem a name.  The name of the subsystem appears as part of the hierarchy description  in /proc/mounts and /proc/<pid>/cgroups. +2.4 Notification API +-------------------- + +There is mechanism which allows to get notifications about changing +status of a cgroup. + +To register new notification handler you need: + - create a file descriptor for event notification using eventfd(2); + - open a control file to be monitored (e.g. memory.usage_in_bytes); + - write "<event_fd> <control_fd> <args>" to cgroup.event_control. +   Interpretation of args is defined by control file implementation; + +eventfd will be woken up by control file implementation or when the +cgroup is removed. + +To unregister notification handler just close eventfd. + +NOTE: Support of notifications should be implemented for the control +file. See documentation for the subsystem.  3. Kernel API  ============= @@ -488,6 +508,11 @@ Each subsystem should:  - add an entry in linux/cgroup_subsys.h  - define a cgroup_subsys object called <name>_subsys +If a subsystem can be compiled as a module, it should also have in its +module initcall a call to cgroup_load_subsys(), and in its exitcall a +call to cgroup_unload_subsys(). It should also set its_subsys.module = +THIS_MODULE in its .c file. +  Each subsystem may export the following methods. The only mandatory  methods are create/destroy. Any others that are null are presumed to  be successful no-ops. @@ -536,10 +561,21 @@ returns an error, this will abort the attach operation.  If a NULL  task is passed, then a successful result indicates that *any*  unspecified task can be moved into the cgroup. Note that this isn't  called on a fork. If this method returns 0 (success) then this should -remain valid while the caller holds cgroup_mutex. If threadgroup is +remain valid while the caller holds cgroup_mutex and it is ensured that either +attach() or cancel_attach() will be called in future. If threadgroup is  true, then a successful result indicates that all threads in the given  thread's threadgroup can be moved together. +void cancel_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, +	       struct task_struct *task, bool threadgroup) +(cgroup_mutex held by caller) + +Called when a task attach operation has failed after can_attach() has succeeded. +A subsystem whose can_attach() has some side-effects should provide this +function, so that the subsytem can implement a rollback. If not, not necessary. +This will be called only about subsystems whose can_attach() operation have +succeeded. +  void attach(struct cgroup_subsys *ss, struct cgroup *cgrp,  	    struct cgroup *old_cgrp, struct task_struct *task,  	    bool threadgroup)  |