diff options
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/classes/buildstats.bbclass | 37 |
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) |
