]> code.ossystems Code Review - openembedded-core.git/commitdiff
buildstats.bbclass: Don't assume /proc/<pid>/io present
authorJuro Bystricky <juro.bystricky@intel.com>
Mon, 22 Feb 2016 19:35:25 +0000 (11:35 -0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sun, 28 Feb 2016 11:32:34 +0000 (11:32 +0000)
It is not guaranteed Linux kernel was configured with process I/O
statistics enabled. If process I/O statistcs are not present, issue
a one time warning and do not attempt to read the non-existing stats
counters.

[YOCTO#9025]

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
meta/classes/buildstats.bbclass

index e58d37be5e2ff75fc3352341fe7fc4e5563d671e..2d63589e4b94bbf2bea543618c45325df1322ec1 100644 (file)
@@ -25,13 +25,14 @@ def get_process_cputime(pid):
         'cstime' : fields[16],  
     }
     iostats = {}
-    with open("/proc/%d/io" % pid, "r") as f:
-        while True:
-            i = f.readline().strip()
-            if not i:
-                break
-            i = i.split(": ")
-            iostats[i[0]] = i[1]
+    if os.path.isfile("/proc/%d/io" % pid):
+        with open("/proc/%d/io" % pid, "r") as f:
+            while True:
+                i = f.readline().strip()
+                if not i:
+                    break
+                i = i.split(": ")
+                iostats[i[0]] = i[1]
     resources = resource.getrusage(resource.RUSAGE_SELF)
     childres = resource.getrusage(resource.RUSAGE_CHILDREN)
     return stats, iostats, resources, childres
@@ -111,7 +112,14 @@ python run_buildstats () {
 
     if isinstance(e, bb.event.BuildStarted):
         ########################################################################
-        # at first pass make the buildstats heriarchy and then
+        # If the kernel was not configured to provide I/O statistics, issue
+        # a one time warning.
+        ########################################################################
+        if not os.path.isfile("/proc/%d/io" % os.getpid()):
+            bb.warn("The Linux kernel on your build host was not configured to provide process I/O statistics. (CONFIG_TASK_IO_ACCOUNTING is not set)")
+
+        ########################################################################
+        # at first pass make the buildstats hierarchy and then
         # set the buildname
         ########################################################################
         bb.utils.mkdirhier(bsdir)