Hi Sateesh,

yes I guess now it's the time to create cgroup library and put all related functions in one place. Would you like to do it, Satheesh, or should I?

Anyway your code has one small issue, please find it bellow...

On 10/12/2012 07:34 AM, Satheesh Rajendran wrote:
On Thu, 2012-10-11 at 09:55 -0300, Lucas Meneghel Rodrigues wrote:
Sateesh,

I wonder if you ever saw the Cgroup class that was developed by
ldoktor. Currently it is on a test module

Yes, I had gone through them, this particular functionality is not
available AFIK.

https://github.com/autotest/autotest-client-tests/blob/master/cgroup/cgroup_common.py
https://github.com/autotest/autotest-client-tests/blob/master/cgroup/cgroup_client.py

But we could move them into the client (or shared) library. Lukas'
implementation takes care of of a good deal of what you want to do
with cgroups.
Agree, As you said these files have many other useful functions which
will aid for any cgroup related tests, please consider moving them in to
the shared library.

Please let me know what you think,

This particular patch mainly intended to resolve the controller path of
a given task id, where in there is already a created controller group,
which is the case for VM's created by libvirt, and this patch will aid
the future virsh patchs like memtune, blkiotune etc...

Let me know your view, if fine, please consider pushing it after
review.

Regards,
-Satheesh.
Lucas

On Thu, Oct 11, 2012 at 6:47 AM,  <[email protected]> wrote:
From: Satheesh Rajendran <[email protected]>

This function would provide a support for resolving a cgroup path for a 
specific controller and a given task id.



Signed-off-by: Satheesh Rajendran <[email protected]>
---
  client/base_utils.py |   36 ++++++++++++++++++++++++++++++++++++
  1 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/client/base_utils.py b/client/base_utils.py
index 5e45efd..8485142 100644
--- a/client/base_utils.py
+++ b/client/base_utils.py
@@ -825,3 +825,39 @@ def suspend_to_disk():
      Suspend the system to disk (S4)
      """
      set_power_state('disk')
+
+
+def resolve_task_cgroup_path(pid, controller):
+    """
+    Resolving cgroup mount path of a particular task
+
+    @params: pid : process id of a task for which the cgroup path required
+    @params: controller: takes one of the controller names in controller list
+
+    @return: resolved path for cgroup controllers of a given pid
+    """
+
+    # Initialise cgroup controller list
+    controller_list = [ 'cpuacct', 'cpu', 'memory', 'cpuset',
+                        'devices', 'freezer', 'blkio', 'netcls' ]
+
+    if controller not in controller_list:
+        raise error.TestError("Doesn't support controller <%s>" % controller)
+
+    root_path = get_cgroup_mountpoint(controller)
+
+    proc_cgroup = "/proc/%d/cgroup" % pid
+    if not os.path.isfile(proc_cgroup):
+        raise NameError('File %s does not exist\n Check whether cgroup \
+                                    installed in the system' % proc_cgroup)
+
+    f = open(proc_cgroup, 'r')
+    proc_cgroup_txt = f.read()
+    f.close
+
+    mount_path = re.findall(r":%s:(\S*)\n" % controller, proc_cgroup_txt)
This regext won't work for multiple cgroups (fedora uses this by default for cpuacct,cpu) and users are allowed to do so. One solution comes to my mind: re.findall(r":([^:]*,)*%s(,[^:]*)*:(\S*)\n" % controller, proc_cgroup_txt)[0][2]

Than you have to pass only the third argument. I don't know how to specify groups without putting them into the output.

Tested on proc_cgroup_txt = """9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/system/dbus.service
2:cpuset:/
1:name=systemd:/system/dbus.service
"""

Kind regards,
Lukáš
+    logging.info(mount_path[0])
+
+    path = root_path + mount_path[0]
+    logging.info(path)
+    return path
--
1.7.1

_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel



_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

Reply via email to