aboutsummaryrefslogtreecommitdiffstats
path: root/meta/classes/buildstats.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/buildstats.bbclass')
-rw-r--r--meta/classes/buildstats.bbclass37
1 files changed, 26 insertions, 11 deletions
diff --git a/meta/classes/buildstats.bbclass b/meta/classes/buildstats.bbclass
index 55cbb3cee3c..96c98d409f0 100644
--- a/meta/classes/buildstats.bbclass
+++ b/meta/classes/buildstats.bbclass
@@ -48,13 +48,24 @@ def set_device(e):
# something like stick DL_DIR on a different partition and this would
# throw stats gathering off. The same goes with SSTATE_DIR. However, let's
# get the basics in here and work on the cornercases later.
+ # A note. /proc/diskstats does not contain info on encryptfs, tmpfs, etc.
+ # If we end up hitting one of these fs, we'll just skip diskstats collection.
############################################################################
device=os.stat(tmpdir)
majordev=os.major(device.st_dev)
minordev=os.minor(device.st_dev)
+ ############################################################################
+ # Bug 1700:
+ # Because tmpfs/encryptfs/ramfs etc inserts no entry in /proc/diskstats
+ # we set rdev to NoLogicalDevice and search for it later. If we find NLD
+ # we do not collect diskstats as the method to collect meaningful statistics
+ # for these fs types requires a bit more research.
+ ############################################################################
for line in open("/proc/diskstats", "r"):
if majordev == int(line.split()[0]) and minordev == int(line.split()[1]):
rdev=line.split()[2]
+ else:
+ rdev="NoLogicalDevice"
file = open(bb.data.getVar('DEVFILE', e.data, True), "w")
file.write(rdev)
file.close()
@@ -133,10 +144,11 @@ def write_task_data(status, logfile, dev, e):
# For the best information, running things with BB_TOTAL_THREADS = "1"
# would return accurate per task results.
############################################################################
- diskdata = get_diskdata("__diskdata_task", dev, e.data)
- if diskdata:
- for key in sorted(diskdata.iterkeys()):
- file.write(key + ": " + diskdata[key] + "\n")
+ if dev != "NoLogicalDevice":
+ diskdata = get_diskdata("__diskdata_task", dev, e.data)
+ if diskdata:
+ for key in sorted(diskdata.iterkeys()):
+ file.write(key + ": " + diskdata[key] + "\n")
if status is "passed":
file.write("Status: PASSED \n")
else:
@@ -169,7 +181,8 @@ python run_buildstats () {
bb.mkdirhier(bsdir)
except:
pass
- set_diskdata("__diskdata_build", device, e.data)
+ if device != "NoLogicalDevice":
+ set_diskdata("__diskdata_build", device, e.data)
set_timedata("__timedata_build", e.data)
build_time = os.path.join(bsdir, "build_stats")
# write start of build into build_time
@@ -185,7 +198,7 @@ python run_buildstats () {
elif isinstance(e, bb.event.BuildCompleted):
bn = get_bn(e)
- dev = get_device(e)
+ device = get_device(e)
bsdir = os.path.join(bb.data.getVar('BUILDSTATS_BASE', e.data, True), bn)
taskdir = os.path.join(bsdir, bb.data.expand("${PF}", e.data))
build_time = os.path.join(bsdir, "build_stats")
@@ -201,10 +214,11 @@ python run_buildstats () {
file.write("Elapsed time: %0.2f seconds \n" % (time))
if cpu:
file.write("CPU usage: %0.1f%% \n" % cpu)
- diskio = get_diskdata("__diskdata_build", dev, e.data)
- if diskio:
- for key in sorted(diskio.iterkeys()):
- file.write(key + ": " + diskio[key] + "\n")
+ if device != "NoLogicalDevice":
+ diskio = get_diskdata("__diskdata_build", device, e.data)
+ if diskio:
+ for key in sorted(diskio.iterkeys()):
+ file.write(key + ": " + diskio[key] + "\n")
file.close()
if isinstance(e, bb.build.TaskStarted):
@@ -212,7 +226,8 @@ python run_buildstats () {
device = get_device(e)
bsdir = os.path.join(bb.data.getVar('BUILDSTATS_BASE', e.data, True), bn)
taskdir = os.path.join(bsdir, bb.data.expand("${PF}", e.data))
- set_diskdata("__diskdata_task", device, e.data)
+ if device != "NoLogicalDevice":
+ set_diskdata("__diskdata_task", device, e.data)
set_timedata("__timedata_task", e.data)
try:
bb.mkdirhier(taskdir)