summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 55cbb3cee3..96c98d409f 100644
--- a/meta/classes/buildstats.bbclass
+++ b/meta/classes/buildstats.bbclass
@@ -48,13 +48,24 @@ def set_device(e):
48 # something like stick DL_DIR on a different partition and this would 48 # something like stick DL_DIR on a different partition and this would
49 # throw stats gathering off. The same goes with SSTATE_DIR. However, let's 49 # throw stats gathering off. The same goes with SSTATE_DIR. However, let's
50 # get the basics in here and work on the cornercases later. 50 # get the basics in here and work on the cornercases later.
51 # A note. /proc/diskstats does not contain info on encryptfs, tmpfs, etc.
52 # If we end up hitting one of these fs, we'll just skip diskstats collection.
51 ############################################################################ 53 ############################################################################
52 device=os.stat(tmpdir) 54 device=os.stat(tmpdir)
53 majordev=os.major(device.st_dev) 55 majordev=os.major(device.st_dev)
54 minordev=os.minor(device.st_dev) 56 minordev=os.minor(device.st_dev)
57 ############################################################################
58 # Bug 1700:
59 # Because tmpfs/encryptfs/ramfs etc inserts no entry in /proc/diskstats
60 # we set rdev to NoLogicalDevice and search for it later. If we find NLD
61 # we do not collect diskstats as the method to collect meaningful statistics
62 # for these fs types requires a bit more research.
63 ############################################################################
55 for line in open("/proc/diskstats", "r"): 64 for line in open("/proc/diskstats", "r"):
56 if majordev == int(line.split()[0]) and minordev == int(line.split()[1]): 65 if majordev == int(line.split()[0]) and minordev == int(line.split()[1]):
57 rdev=line.split()[2] 66 rdev=line.split()[2]
67 else:
68 rdev="NoLogicalDevice"
58 file = open(bb.data.getVar('DEVFILE', e.data, True), "w") 69 file = open(bb.data.getVar('DEVFILE', e.data, True), "w")
59 file.write(rdev) 70 file.write(rdev)
60 file.close() 71 file.close()
@@ -133,10 +144,11 @@ def write_task_data(status, logfile, dev, e):
133 # For the best information, running things with BB_TOTAL_THREADS = "1" 144 # For the best information, running things with BB_TOTAL_THREADS = "1"
134 # would return accurate per task results. 145 # would return accurate per task results.
135 ############################################################################ 146 ############################################################################
136 diskdata = get_diskdata("__diskdata_task", dev, e.data) 147 if dev != "NoLogicalDevice":
137 if diskdata: 148 diskdata = get_diskdata("__diskdata_task", dev, e.data)
138 for key in sorted(diskdata.iterkeys()): 149 if diskdata:
139 file.write(key + ": " + diskdata[key] + "\n") 150 for key in sorted(diskdata.iterkeys()):
151 file.write(key + ": " + diskdata[key] + "\n")
140 if status is "passed": 152 if status is "passed":
141 file.write("Status: PASSED \n") 153 file.write("Status: PASSED \n")
142 else: 154 else:
@@ -169,7 +181,8 @@ python run_buildstats () {
169 bb.mkdirhier(bsdir) 181 bb.mkdirhier(bsdir)
170 except: 182 except:
171 pass 183 pass
172 set_diskdata("__diskdata_build", device, e.data) 184 if device != "NoLogicalDevice":
185 set_diskdata("__diskdata_build", device, e.data)
173 set_timedata("__timedata_build", e.data) 186 set_timedata("__timedata_build", e.data)
174 build_time = os.path.join(bsdir, "build_stats") 187 build_time = os.path.join(bsdir, "build_stats")
175 # write start of build into build_time 188 # write start of build into build_time
@@ -185,7 +198,7 @@ python run_buildstats () {
185 198
186 elif isinstance(e, bb.event.BuildCompleted): 199 elif isinstance(e, bb.event.BuildCompleted):
187 bn = get_bn(e) 200 bn = get_bn(e)
188 dev = get_device(e) 201 device = get_device(e)
189 bsdir = os.path.join(bb.data.getVar('BUILDSTATS_BASE', e.data, True), bn) 202 bsdir = os.path.join(bb.data.getVar('BUILDSTATS_BASE', e.data, True), bn)
190 taskdir = os.path.join(bsdir, bb.data.expand("${PF}", e.data)) 203 taskdir = os.path.join(bsdir, bb.data.expand("${PF}", e.data))
191 build_time = os.path.join(bsdir, "build_stats") 204 build_time = os.path.join(bsdir, "build_stats")
@@ -201,10 +214,11 @@ python run_buildstats () {
201 file.write("Elapsed time: %0.2f seconds \n" % (time)) 214 file.write("Elapsed time: %0.2f seconds \n" % (time))
202 if cpu: 215 if cpu:
203 file.write("CPU usage: %0.1f%% \n" % cpu) 216 file.write("CPU usage: %0.1f%% \n" % cpu)
204 diskio = get_diskdata("__diskdata_build", dev, e.data) 217 if device != "NoLogicalDevice":
205 if diskio: 218 diskio = get_diskdata("__diskdata_build", device, e.data)
206 for key in sorted(diskio.iterkeys()): 219 if diskio:
207 file.write(key + ": " + diskio[key] + "\n") 220 for key in sorted(diskio.iterkeys()):
221 file.write(key + ": " + diskio[key] + "\n")
208 file.close() 222 file.close()
209 223
210 if isinstance(e, bb.build.TaskStarted): 224 if isinstance(e, bb.build.TaskStarted):
@@ -212,7 +226,8 @@ python run_buildstats () {
212 device = get_device(e) 226 device = get_device(e)
213 bsdir = os.path.join(bb.data.getVar('BUILDSTATS_BASE', e.data, True), bn) 227 bsdir = os.path.join(bb.data.getVar('BUILDSTATS_BASE', e.data, True), bn)
214 taskdir = os.path.join(bsdir, bb.data.expand("${PF}", e.data)) 228 taskdir = os.path.join(bsdir, bb.data.expand("${PF}", e.data))
215 set_diskdata("__diskdata_task", device, e.data) 229 if device != "NoLogicalDevice":
230 set_diskdata("__diskdata_task", device, e.data)
216 set_timedata("__timedata_task", e.data) 231 set_timedata("__timedata_task", e.data)
217 try: 232 try:
218 bb.mkdirhier(taskdir) 233 bb.mkdirhier(taskdir)