virt-test icon indicating copy to clipboard operation
virt-test copied to clipboard

cpu_stats.positive_test.paused_option cgroups breakage

Open cevich opened this issue 11 years ago • 4 comments

This test is failing on F19 system (four host CPUs) with:

12:33:58 DEBUG| stderr: 
12:33:58 DEBUG| cgtime get is ['cat:', '/cgroup/cpuacct/libvirt/qemu/virt-tests-vm1/cpuacct.usage_percpu:', 'No', 'such', 'file', 'or', 'directory']
12:33:58 DEBUG| Check total cpu_time 310998583 >= user + system cpu_time 250000000
12:33:58 DEBUG| start_num 0, end_num 4
12:33:58 DEBUG| Check CPU0 exist
12:33:59 DEBUG| Checking image file /usr/local/autotest/client/tests/virt/shared/data/images/jeos-19-64.qcow2
12:33:59 DEBUG| Running '/bin/qemu-img info /usr/local/autotest/client/tests/virt/shared/data/images/jeos-19-64.qcow2'
12:33:59 DEBUG| Running '/bin/qemu-img check /usr/local/autotest/client/tests/virt/shared/data/images/jeos-19-64.qcow2'
12:33:59 ERROR| 
12:33:59 ERROR| Traceback (most recent call last):
12:33:59 ERROR|   File "/usr/local/autotest/client/tests/virt/virttest/standalone_test.py", line 192, in run_once
12:33:59 ERROR|     run_func(self, params, env)
12:33:59 ERROR|   File "/usr/local/autotest/client/tests/virt/libvirt/tests/src/virsh_cmd/domain/virsh_cpu_stats.py", line 130, in run_virsh_cpu_stats
12:33:59 ERROR|     sum_cgtime += int(cgtime[i])
12:33:59 ERROR| ValueError: invalid literal for int() with base 10: 'cat:'
12:33:59 ERROR| 
12:33:59 ERROR| FAIL type_specific.virsh.cpu_stats.positive_test.paused_option -> ValueError: invalid literal for int() with base 10: 'cat:'

cevich avatar Nov 18 '13 20:11 cevich

@kylazhang would you mind taking a look at this? IIRC There were some changes in the autotest cgroups stuff recently and this test never got updated. I'd fix it if I knew more about cgroups :S

cevich avatar Nov 18 '13 20:11 cevich

I think perhaps @Antique had made a change to this at one time for "local" libvirt team consumption that didn't get propagated... In any case, here's a diff that is close to what I grabbed... The only difference between this and what I got originally is the usage of get_cgroup_mountpoint() instead of a constant path.

John

diff --git a/libvirt/tests/src/virsh_cmd/domain/virsh_cpu_stats.py b/libvirt/tes
index 240545a..fa3b600 100644
--- a/libvirt/tests/src/virsh_cmd/domain/virsh_cpu_stats.py
+++ b/libvirt/tests/src/virsh_cmd/domain/virsh_cpu_stats.py
@@ -1,9 +1,15 @@
 import re
 import commands
 import logging
+import os
 from autotest.client.shared import error
 from virttest import virsh

+try:
+    from autotest.client.shared import utils_cgroup
+except ImportError:
+    from virttest.staging import utils_cgroup
+

 def run_virsh_cpu_stats(test, params, env):
     """
@@ -72,9 +78,21 @@ def run_virsh_cpu_stats(test, params, env):
         else:
             # Get cgroup cpu_time
             if not get_totalonly:
-                cgcpu = "cat /cgroup/cpuacct/libvirt/qemu/" + vm_name + \
-                        "/cpuacct.usage_percpu"
-                cgtime = commands.getoutput(cgcpu).strip().split()
+                try:
+                    ctl_mount = utils_cgroup.get_cgroup_mountpoint("cpuacct")
+                except IndexError:
+                    raise error.TestFail("Cannot find cpuacct cgroup")
+                
+                cgroup_path = os.path.join(ctl_mount, "libvirt/qemu",
+                                           vm_name, "cpuacct.usage_percpu")
+                if not os.path.exists(cgroup_path):
+                    cgroup_path = os.path.join(ctl_mount, "machine", vm_name
+                                               + ".libvirt-qemu",
+                                               "cpuacct.usage_percpu")
+                if not os.path.exists(cgroup_path):
+                    raise error.TestNAError("Unknown path to cgroups")
+                get_value_cmd = "cat %s" % cgroup_path
+                cgtime = commands.getoutput(get_value_cmd).strip().split()
                 logging.debug("cgtime get is %s", cgtime)

             # Cut CPUs from output and format to list

jferlan avatar Nov 21 '13 21:11 jferlan

Hi, this should be done different way. This was my first attempt to fix this bug, but right now I've got a better way to do it. I'll maybe today create a pull-request with proper fix.

phrdina avatar Nov 22 '13 08:11 phrdina

Whatever is done to change here would also need to be done to replicated for the emulatorpin issue: #1021

jferlan avatar Nov 25 '13 11:11 jferlan