This patchset adds an options column to cgrules config file
parsing.  Within this column, a user can specify an "ignore"
option that will instruct cgrules to ignore processes that
exactly match this rule and perform no processing on these
processes.  It is anticipated that a separate process - outside
of cgrulesengd - will be used to manage processes that match
ignore rules.

A couple examples:

<user>      <controller>        <destination>        <options>
tom:http*   memory              TomsCgroup           ignore
*           memory              DefaultCgroup

For the above example:
    * A new process named httpd spawned in TomsCgroup within the
      memory controller will be ignored by cgrulesengd.  Again,
      it's expected that another process will manage the processes
      within TomsCgroup
    * Similarly processes named http, httpX, http70, etc. within
      TomsCgroup will also be ignored
    * cgrulesengd will attempt to move any processes that do not
      match the ignore rule into the DefaultCgroup

<user>      <controller>        <destination>        <options>
*           cpu                 IgnoreCG/*           ignore
*           cpu                 DefaultCgroup

For the above example:
    * Any new processes spawned within the IgnoreCG or a child
      cgroup within IgnoreCG will be ignored by cgrulesengd
    * cgrulesengd will attempt to move any processes that do not
      match the ignore rule into the DefaultCgroup

All functional tests and unit tests are passing:
    https://travis-ci.com/drakenclimber/libcgroup/builds/135355854

Code coverage increased from 16% to 18%.  The logic added for
this commit was fully covered with the exception of a few error
handling cases:
    https://coveralls.io/builds/26816041

Tom Hromatka (9):
  tests: Add STATIC and UNIT_TEST definitions to automake files
  api.c: Add options field for rules defined in cgrules conf file
  tests: Add unit tests for cgroup_parse_rules_options()
  api.c: Add function to read /proc/{pid}/cgroup
  tests: Add unit tests for cg_get_cgroups_from_proc_cgroups()
  api.c: Add logic to process ignore rules
  tests: Add unit tests for cgroup_compare_ignore_rule()
  cgrulesengd: Add wildcard matching for process names
  tests: Add unit tests for cgroup_compare_wildcard_procname()

 src/Makefile.am                                    |   4 +-
 src/api.c                                          | 387 ++++++++++++++++++++-
 src/libcgroup-internal.h                           |  30 +-
 tests/gunit/002-cgroup_parse_rules_options.cpp     | 105 ++++++
 .../gunit/003-cg_get_cgroups_from_proc_cgroups.cpp | 175 ++++++++++
 tests/gunit/004-cgroup_compare_ignore_rule.cpp     | 285 +++++++++++++++
 .../gunit/005-cgroup_compare_wildcard_procname.cpp |  97 ++++++
 tests/gunit/Makefile.am                            |  10 +-
 8 files changed, 1084 insertions(+), 9 deletions(-)
 create mode 100644 tests/gunit/002-cgroup_parse_rules_options.cpp
 create mode 100644 tests/gunit/003-cg_get_cgroups_from_proc_cgroups.cpp
 create mode 100644 tests/gunit/004-cgroup_compare_ignore_rule.cpp
 create mode 100644 tests/gunit/005-cgroup_compare_wildcard_procname.cpp

-- 
1.8.3.1



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

Reply via email to