Exemplo n.º 1
0
    def perf_process_events(self, source, condition):
        had_events = True
        while had_events:
            had_events = False
            for cpu in self.cpu_map:
                event = self.evlist.read_on_cpu(cpu)
                if event:
                    had_events = True
                    if event.type == perf.RECORD_FORK:
                        if event.pid == event.tid:
                            try:
                                self.ps.processes[event.pid] = procfs.process(
                                    event.pid)
                            except:  # short lived thread
                                pass
                        else:
                            try:
                                self.ps.processes[event.pid].threads.processes[
                                    event.tid] = procfs.process(event.tid)
                            except AttributeError:
                                self.ps.processes[
                                    event.pid].threads = procfs.pidstats(
                                        "/proc/%d/task/" % event.pid)
                    elif event.type == perf.RECORD_EXIT:
                        del self.ps[int(event.tid)]
                    elif event.type == perf.RECORD_SAMPLE:
                        tid = event.sample_tid
                        if self.perf_counter.has_key(tid):
                            self.perf_counter[tid] += event.sample_period
                        else:
                            self.perf_counter[tid] = event.sample_period

        self.show()
        return True
Exemplo n.º 2
0
	def perf_process_events(self, source, condition):
		had_events = True
		while had_events:
			had_events = False
			for cpu in self.cpu_map:
				event = self.evlist.read_on_cpu(cpu)
				if event:
					had_events = True
					if event.type == perf.RECORD_FORK:
						if event.pid == event.tid:
							try:
								self.ps.processes[event.pid] = procfs.process(event.pid)
							except: # short lived thread
								pass
						else:
							try:
								self.ps.processes[event.pid].threads.processes[event.tid] = procfs.process(event.tid)
							except AttributeError:
								self.ps.processes[event.pid].threads = procfs.pidstats("/proc/%d/task/" % event.pid)
					elif event.type == perf.RECORD_EXIT:
						del self.ps[int(event.tid)]
					elif event.type == perf.RECORD_SAMPLE:
						tid = event.sample_tid
						if self.perf_counter.has_key(tid):
							self.perf_counter[tid] += event.sample_period
						else:
							self.perf_counter[tid] = event.sample_period
			
		self.show()
		return True
Exemplo n.º 3
0
 def _affinity_changeable(self, pid):
     try:
         process = procfs.process(pid)
         if process["stat"].is_bound_to_cpu():
             if process["stat"]["state"] == "Z":
                 log.debug(
                     "Affinity of zombie task with PID %d cannot be changed, the task's affinity mask is fixed."
                     % pid)
             elif self._is_kthread(process):
                 log.debug(
                     "Affinity of kernel thread with PID %d cannot be changed, the task's affinity mask is fixed."
                     % pid)
             else:
                 log.warn(
                     "Affinity of task with PID %d cannot be changed, the task's affinity mask is fixed."
                     % pid)
             return 0
         else:
             return 1
     except (OSError, IOError) as e:
         if e.errno == errno.ENOENT or e.errno == errno.ESRCH:
             log.debug(
                 "Failed to get task info for PID %d, the task vanished." %
                 pid)
             return -1
         else:
             log.error("Failed to get task info for PID %d: %s" % (pid, e))
             return -2
     except (AttributeError, KeyError) as e:
         log.error("Failed to get task info for PID %d: %s" % (pid, e))
         return -2
Exemplo n.º 4
0
 def _affinity_changeable(self, pid, process=None):
     try:
         if process is None:
             process = procfs.process(pid)
         if process["stat"].is_bound_to_cpu():
             if process["stat"]["state"] == "Z":
                 log.debug(
                     "Affinity of zombie task with PID %s cannot be changed, the task's affinity mask is fixed."
                     % pid)
             elif len(process["cmdline"]) == 0:
                 log.debug(
                     "Affinity of kernel thread with PID %s cannot be changed, the task's affinity mask is fixed."
                     % pid)
             else:
                 log.warn(
                     "Affinity of task with PID %s cannot be changed, the task's affinity mask is fixed."
                     % pid)
             return 0
         else:
             return 1
     except IOError as e:
         if e[0] == errno.ENOENT or e[0] == errno.ESRCH:
             log.debug(
                 "Unable to set affinity for PID %s, the task vanished." %
                 pid)
             return -1
         else:
             log.error("Failed to get task info for PID %s: %s" %
                       (pid, str(e)))
             return -2
     except (OSError, AttributeError, KeyError) as e:
         log.error("Failed to get task info for PID %s: %s" % (pid, str(e)))
         return -2
Exemplo n.º 5
0
 def _get_cmdline(self, process):
     if not isinstance(process, procfs.process):
         pid = process
         process = procfs.process(pid)
     cmdline = procfs.process_cmdline(process)
     if self._is_kthread(process):
         cmdline = "[" + cmdline + "]"
     return cmdline