diff options
| -rw-r--r-- | meta/classes/buildstats.bbclass | 4 | ||||
| -rw-r--r-- | meta/lib/buildstats.py | 22 | 
2 files changed, 19 insertions, 7 deletions
| diff --git a/meta/classes/buildstats.bbclass b/meta/classes/buildstats.bbclass index 9c0c37dcdd..c6b77e6a2a 100644 --- a/meta/classes/buildstats.bbclass +++ b/meta/classes/buildstats.bbclass @@ -204,11 +204,11 @@ python runqueue_stats () {      if system_stats:          # Ensure that we sample at important events.          done = isinstance(e, bb.event.BuildCompleted) -        system_stats.sample(force=done) +        system_stats.sample(e, force=done)          if done:              system_stats.close()              d.delVar('_buildstats_system_stats')  }  addhandler runqueue_stats -runqueue_stats[eventmask] = "bb.runqueue.sceneQueueTaskStarted bb.runqueue.runQueueTaskStarted bb.event.HeartbeatEvent bb.event.BuildCompleted" +runqueue_stats[eventmask] = "bb.runqueue.sceneQueueTaskStarted bb.runqueue.runQueueTaskStarted bb.event.HeartbeatEvent bb.event.BuildCompleted bb.event.MonitorDiskEvent" diff --git a/meta/lib/buildstats.py b/meta/lib/buildstats.py index 8ce4112c2d..7c8b3521a7 100644 --- a/meta/lib/buildstats.py +++ b/meta/lib/buildstats.py @@ -3,6 +3,7 @@  # like open log files and the time of the last sampling.  import time +import bb.event  class SystemStats:      def __init__(self, d): @@ -19,8 +20,10 @@ class SystemStats:              # concurrently.              self.proc_files.append((filename,                                      open(os.path.join(bsdir, 'proc_%s.log' % filename), 'ab'))) -        # Last time that we sampled data. -        self.last = 0 +        self.monitor_disk = open(os.path.join(bsdir, 'monitor_disk.log'), 'ab') +        # Last time that we sampled /proc data resp. recorded disk monitoring data. +        self.last_proc = 0 +        self.last_disk_monitor = 0          # Minimum number of seconds between recording a sample. This          # becames relevant when we get called very often while many          # short tasks get started. Sampling during quiet periods @@ -32,9 +35,9 @@ class SystemStats:          for _, output, _ in self.proc_files:              output.close() -    def sample(self, force): +    def sample(self, event, force):          now = time.time() -        if (now - self.last > self.min_seconds) or force: +        if (now - self.last_proc > self.min_seconds) or force:              for filename, output in self.proc_files:                  with open(os.path.join('/proc', filename), 'rb') as input:                      data = input.read() @@ -44,4 +47,13 @@ class SystemStats:                               ('%.0f\n' % now).encode('ascii') +                               data +                               b'\n') -            self.last = now +            self.last_proc = now + +        if isinstance(event, bb.event.MonitorDiskEvent) and \ +           ((now - self.last_disk_monitor > self.min_seconds) or force): +            os.write(self.monitor_disk.fileno(), +                     ('%.0f\n' % now).encode('ascii') + +                     ''.join(['%s: %d\n' % (dev, sample.total_bytes - sample.free_bytes) +                              for dev, sample in event.disk_usage.items()]).encode('ascii') + +                     b'\n') +            self.last_disk_monitor = now | 
