On Wed, Oct 9, 2019, 2:50 PM Tom Hromatka <tom.hroma...@oracle.com> wrote:

> Rename README to README.md so that markdown is supported.  This
> will allow for code coverage and continuous integration
> information to be directly embedded into the readme.
>


I am going to nak this patch.

GitHub is for hosting. The readme has to be readable as a text file.
Markdown is not.

Dhaval


> Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com>
> ---
>  README    | 183
> --------------------------------------------------------------
>  README.md | 183
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 183 insertions(+), 183 deletions(-)
>  delete mode 100644 README
>  create mode 100644 README.md
>
> diff --git a/README b/README
> deleted file mode 100644
> index 54e0f7b..0000000
> --- a/README
> +++ /dev/null
> @@ -1,183 +0,0 @@
> -Design
> -========
> -
> -After cgroup system has taken shape, its time to have some basic tools
> -in user space which can enable a user to use the resource management
> -functionality effictively.
> -
> -One of the needed functionality is rule based placement of a task.  In
> general,
> -there can be either uid or gid or exec based rules. Admin/root will
> -control/enforce uid/gid based rules and exec based rules can be defined by
> -user in a config file residing in user's home dir and fully controlled by
> user.
> -
> -uid/gid based rules will be defined in /etc/cgrules.conf config file and
> -this file will be managed by root.
> -
> -Basic idea is that to begin with provide facility to implement rules
> -based on uid and gid. So a hierarchy might look like as follows.
> -
> -                        /mnt/cgroup
> -                        |       |
> -                      gid1      gid2
> -                     |   |
> -                   uid1 uid2
> -                  |   |
> -               proj1  proj2
> -
> -
> -Admin will write rules to control the resources among users. Then users
> -can manage their own cgroup at their own (proj1 and proj2) and control
> -the resources as they want.
> -
> -Following are the few methods using which tasks can be placed in right
> -cgroups.
> -
> -- Use pam_cgroup PAM plugin which will make sure users are placed in right
> -  cgroup at login time and any tasks launch after login, will continue to
> run
> -  in user's cgroup.
> -
> -- Use command line tool "cgexec" to launch the task in right cgroup.
> -
> -- Modify the program and use libcgroup provided APIs for placing a task
> -  in right cgroup before doing exec().
> -
> -- Use "cgclassify" tool to classify a already running task.
> -
> -- May be, a user space daemon can also be implemented which will listen to
> -  kernel events and place the task in right group based on the rules.
> -  This method involves few concerns.
> -
> -       - Reliability of netlink socket. Messages can be dropped.
> -               - Change the netlink with a cgroup controller which
> exports the
> -                 events.
> -
> -       - Delay incurred since the event took place and task was actually
> placed
> -         in right cgroup.
> -
> -       - daemon will interfere with container's tasks which is not
> desired.
> -
> -HOWTO
> -=====
> -
> -Section 1:
> -----------
> -To use "cgexec" to place the task in right cgroup.
> -
> -- make cgexec
> -- Run a task using cgexec. Following is the cgexec syntax.
> -
> - cgexec [-g <list of controllers>:<relative path to cgroup>] command
> [arguments]
> -
> - Note: Cgroup controllers and path are optional. If user does not know the
> -       right cgroup, cgexec will automatically place the task in right
> -       cgroup based on /etc/cgrules.conf
> -
> -Example:
> -       cgexec -g *:test1 ls
> -       cgexec -g cpu,memory:test1 ls -l
> -       cgexec -g cpu,memory:test1 -g swap:test2 ls -l
> -
> -Section 2
> ----------
> -To use "cgclassify" to place task in right cgroup.
> -
> -- make cgclassify
> -- Pick a task's pid to be classified, and run
> -       cgclassify <list of pids>
> -
> -Example:
> ---------
> -       cgclassify 2140 4325
> -
> -       Note: After classification check out whether tasks 2140 and 4325
> -       are in the right cgroup or not (Based on rules in
> /etc/cgrules.conf)
> -
> -Section 3:
> -----------
> -To use a pam plugin which will automatically place the task in right
> -cgroup upon login.
> -
> -- Build pam_cgroup.so
> -       make pam_cgroup.so
> -- Copy pam_cgroup.so to /lib/security/
> -- Edit /etc/pam.d/su to make use of pam_cgroup.so session module upon
> -  execution of su.
> -
> -example:
> -       Add following line at the end of /etc/pam.d/su file
> -
> -session                optional        pam_cgroup.so
> -
> -- Now launch a shell for a user "xyz" using su and the resulting shell
> -  should be running in the cgroup designated for the user as specified
> -  by cgrules.conf
> -
> -  ex. "su test1"
> -
> -Try similar things with other services like sshd.
> -
> -Note: pam_cgroup.so moves the service providing process in the right
> cgroup
> -      and not the process which will be launched later. Due to parent
> child
> -      relationship, yet to be forked/execed process will launch in right
> -      group.
> -
> -Ex. Lets say user root does "su test1". In this case process "su" is the
> -    one providing service (launching a shell) for user "test1".
> pam_cgroup.so
> -    will move process "su" to the user "test1"'s cgroup (Decided by the
> uid
> -    and gid of "test1"). Now once su forks/execs a shell for user test1,
> -    final shell is effectively running in the cgroup it should have been
> -    running based on /etc/cgrules.conf for user test1.
> -
> -
> -Section 4:
> -----------
> -To use cgrulesengd which will move a task to right cgroup based on
> -rules in /etc/cgrules.conf do following.
> -
> -- build and install latest libcgroup.so
> -- build cgrulesengd
> -       make cgrulesengd
> -- specify some uid/gid based rules in /etc/cgrules.conf
> -- Mount some controllers and create an hierarchy of cgroups (matching
> -  your rules).
> -- Run cgrulesengd.
> -       - ./cgrulesengd
> -- Launch some task or login as a user to the sytem. Daemon should
> automatically
> -  place the task in right cgroup.
> -
> -FAQ
> -===
> -Q. Why admin should not control "exec" based rules.
> -A. Unix file system provides access control only based on uid/gid. So
> -   even if admin starts putting tasks based on uid/gid, it can't enforce
> -   it. For example, consider following scenario.
> -
> -  Lets say an admin creates following cgroup hierarchy.
> -
> -                       /container
> -                       |       |
> -               database        browser
> -               |    |          |     |
> -             user1  user2     user1  user2
> -
> - Now admin wants to run all the database jobs under /container/database/
> - and all the firefox jobs under /container/browser/. Based on which user
> - launched it, jobs should go in either user1 or user2 dir.
> -
> - Now assume that database subdir has to more cpu resources as compared to
> - browser subdir. Then a user, say user2, can always move his browser job
> - also to /container/database/user2 dir to get more cpu resources and
> - admin will not be able to control that.
> -
> - [Note: user2 will control what tasks can be added in
> /container/database/user2
> -  and will contol what further subdirs can be created under user2 dir.
> Root
> -  should not restrict the control to root only for practical purposes. Its
> -  something like that till /container/databse, admin controls the
> resources
> -  and below that how resources are further subdivided among various
> projects
> -  should be controlled by respective user].
> -
> -In the light of above, it seems to make more sense that admin should
> enforce
> -rules only based on uid and gid. Probably later we can have a per user
> exec
> -based rules config file (~/.cgrules.conf), which can be parsed by cgrulesd
> -and then jobs launched by user will be placed in right cgroup based on
> -combination of rules in /etc/cgrules.conf and ~/cgrules.conf.
> diff --git a/README.md b/README.md
> new file mode 100644
> index 0000000..54e0f7b
> --- /dev/null
> +++ b/README.md
> @@ -0,0 +1,183 @@
> +Design
> +========
> +
> +After cgroup system has taken shape, its time to have some basic tools
> +in user space which can enable a user to use the resource management
> +functionality effictively.
> +
> +One of the needed functionality is rule based placement of a task.  In
> general,
> +there can be either uid or gid or exec based rules. Admin/root will
> +control/enforce uid/gid based rules and exec based rules can be defined by
> +user in a config file residing in user's home dir and fully controlled by
> user.
> +
> +uid/gid based rules will be defined in /etc/cgrules.conf config file and
> +this file will be managed by root.
> +
> +Basic idea is that to begin with provide facility to implement rules
> +based on uid and gid. So a hierarchy might look like as follows.
> +
> +                        /mnt/cgroup
> +                        |       |
> +                      gid1      gid2
> +                     |   |
> +                   uid1 uid2
> +                  |   |
> +               proj1  proj2
> +
> +
> +Admin will write rules to control the resources among users. Then users
> +can manage their own cgroup at their own (proj1 and proj2) and control
> +the resources as they want.
> +
> +Following are the few methods using which tasks can be placed in right
> +cgroups.
> +
> +- Use pam_cgroup PAM plugin which will make sure users are placed in right
> +  cgroup at login time and any tasks launch after login, will continue to
> run
> +  in user's cgroup.
> +
> +- Use command line tool "cgexec" to launch the task in right cgroup.
> +
> +- Modify the program and use libcgroup provided APIs for placing a task
> +  in right cgroup before doing exec().
> +
> +- Use "cgclassify" tool to classify a already running task.
> +
> +- May be, a user space daemon can also be implemented which will listen to
> +  kernel events and place the task in right group based on the rules.
> +  This method involves few concerns.
> +
> +       - Reliability of netlink socket. Messages can be dropped.
> +               - Change the netlink with a cgroup controller which
> exports the
> +                 events.
> +
> +       - Delay incurred since the event took place and task was actually
> placed
> +         in right cgroup.
> +
> +       - daemon will interfere with container's tasks which is not
> desired.
> +
> +HOWTO
> +=====
> +
> +Section 1:
> +----------
> +To use "cgexec" to place the task in right cgroup.
> +
> +- make cgexec
> +- Run a task using cgexec. Following is the cgexec syntax.
> +
> + cgexec [-g <list of controllers>:<relative path to cgroup>] command
> [arguments]
> +
> + Note: Cgroup controllers and path are optional. If user does not know the
> +       right cgroup, cgexec will automatically place the task in right
> +       cgroup based on /etc/cgrules.conf
> +
> +Example:
> +       cgexec -g *:test1 ls
> +       cgexec -g cpu,memory:test1 ls -l
> +       cgexec -g cpu,memory:test1 -g swap:test2 ls -l
> +
> +Section 2
> +---------
> +To use "cgclassify" to place task in right cgroup.
> +
> +- make cgclassify
> +- Pick a task's pid to be classified, and run
> +       cgclassify <list of pids>
> +
> +Example:
> +--------
> +       cgclassify 2140 4325
> +
> +       Note: After classification check out whether tasks 2140 and 4325
> +       are in the right cgroup or not (Based on rules in
> /etc/cgrules.conf)
> +
> +Section 3:
> +----------
> +To use a pam plugin which will automatically place the task in right
> +cgroup upon login.
> +
> +- Build pam_cgroup.so
> +       make pam_cgroup.so
> +- Copy pam_cgroup.so to /lib/security/
> +- Edit /etc/pam.d/su to make use of pam_cgroup.so session module upon
> +  execution of su.
> +
> +example:
> +       Add following line at the end of /etc/pam.d/su file
> +
> +session                optional        pam_cgroup.so
> +
> +- Now launch a shell for a user "xyz" using su and the resulting shell
> +  should be running in the cgroup designated for the user as specified
> +  by cgrules.conf
> +
> +  ex. "su test1"
> +
> +Try similar things with other services like sshd.
> +
> +Note: pam_cgroup.so moves the service providing process in the right
> cgroup
> +      and not the process which will be launched later. Due to parent
> child
> +      relationship, yet to be forked/execed process will launch in right
> +      group.
> +
> +Ex. Lets say user root does "su test1". In this case process "su" is the
> +    one providing service (launching a shell) for user "test1".
> pam_cgroup.so
> +    will move process "su" to the user "test1"'s cgroup (Decided by the
> uid
> +    and gid of "test1"). Now once su forks/execs a shell for user test1,
> +    final shell is effectively running in the cgroup it should have been
> +    running based on /etc/cgrules.conf for user test1.
> +
> +
> +Section 4:
> +----------
> +To use cgrulesengd which will move a task to right cgroup based on
> +rules in /etc/cgrules.conf do following.
> +
> +- build and install latest libcgroup.so
> +- build cgrulesengd
> +       make cgrulesengd
> +- specify some uid/gid based rules in /etc/cgrules.conf
> +- Mount some controllers and create an hierarchy of cgroups (matching
> +  your rules).
> +- Run cgrulesengd.
> +       - ./cgrulesengd
> +- Launch some task or login as a user to the sytem. Daemon should
> automatically
> +  place the task in right cgroup.
> +
> +FAQ
> +===
> +Q. Why admin should not control "exec" based rules.
> +A. Unix file system provides access control only based on uid/gid. So
> +   even if admin starts putting tasks based on uid/gid, it can't enforce
> +   it. For example, consider following scenario.
> +
> +  Lets say an admin creates following cgroup hierarchy.
> +
> +                       /container
> +                       |       |
> +               database        browser
> +               |    |          |     |
> +             user1  user2     user1  user2
> +
> + Now admin wants to run all the database jobs under /container/database/
> + and all the firefox jobs under /container/browser/. Based on which user
> + launched it, jobs should go in either user1 or user2 dir.
> +
> + Now assume that database subdir has to more cpu resources as compared to
> + browser subdir. Then a user, say user2, can always move his browser job
> + also to /container/database/user2 dir to get more cpu resources and
> + admin will not be able to control that.
> +
> + [Note: user2 will control what tasks can be added in
> /container/database/user2
> +  and will contol what further subdirs can be created under user2 dir.
> Root
> +  should not restrict the control to root only for practical purposes. Its
> +  something like that till /container/databse, admin controls the
> resources
> +  and below that how resources are further subdivided among various
> projects
> +  should be controlled by respective user].
> +
> +In the light of above, it seems to make more sense that admin should
> enforce
> +rules only based on uid and gid. Probably later we can have a per user
> exec
> +based rules config file (~/.cgrules.conf), which can be parsed by cgrulesd
> +and then jobs launched by user will be placed in right cgroup based on
> +combination of rules in /etc/cgrules.conf and ~/cgrules.conf.
> --
> 1.8.3.1
>
>
>
> _______________________________________________
> Libcg-devel mailing list
> Libcg-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/libcg-devel
>

_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to