def ps_show_thread(self, pid, affect_children, ps, has_ctxt_switch_info, sock_inodes, sock_inode_re, cgroups): try: affinity = self.format_affinity(schedutils.get_affinity(pid)) except ( SystemError, OSError ) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: return raise e sched = schedutils.schedstr(schedutils.get_scheduler(pid))[6:] rtprio = int(ps[pid]["stat"]["rt_priority"]) cgout = ps[pid]["cgroups"] cmd = ps[pid]["stat"]["comm"] users = "" if tuna.is_irq_thread(cmd): try: if not self.irqs: self.irqs = procfs.interrupts() if cmd[:4] == "IRQ-": users = self.irqs[tuna.irq_thread_number(cmd)]["users"] for u in users: if u in self.get_nics(): users[users.index( u)] = "%s(%s)" % (u, ethtool.get_module(u)) users = ",".join(users) else: u = cmd[cmd.find('-') + 1:] if u in self.get_nics(): users = ethtool.get_module(u) except: users = "Not found in /proc/interrupts!" ctxt_switch_info = "" if has_ctxt_switch_info: voluntary_ctxt_switches = int( ps[pid]["status"]["voluntary_ctxt_switches"]) nonvoluntary_ctxt_switches = int( ps[pid]["status"]["nonvoluntary_ctxt_switches"]) ctxt_switch_info = " %9d %12s" % (voluntary_ctxt_switches, nonvoluntary_ctxt_switches) if affect_children: print " %-5d " % pid, else: print " %-5d" % pid, print "%6s %5d %8s%s %15s %s" % (sched, rtprio, affinity, ctxt_switch_info, cmd, users), if cgroups: print " %9s" % cgout, print "" if sock_inodes: self.ps_show_sockets(pid, ps, sock_inodes, sock_inode_re, affect_children and 3 or 4) if affect_children and ps[pid].has_key("threads"): for tid in ps[pid]["threads"].keys(): self.ps_show_thread(tid, False, ps[pid]["threads"], has_ctxt_switch_info, sock_inodes, sock_inode_re)
def show_settings(pid, when, cpu_list_mode): affinity = schedutils.get_affinity(pid) if cpu_list_mode: mask = ",".join([str(a) for a in affinity]) else: mask = ",".join(["%x" % a for a in hexbitmask(affinity)]) print "pid %d's %s affinity mask: %s" % (pid, when, mask)
def get_kthread_sched_tunings(proc = None): if not proc: proc = procfs.pidstats() kthreads = {} for pid in proc.keys(): name = proc[pid]["stat"]["comm"] # Trying to set the priority of the migration threads will # fail, at least on 3.6.0-rc1 and doesn't make sense anyway # and this function is only used to save those priorities # to reset them using tools like rtctl, skip those to # avoid sched_setscheduler/chrt to fail if iskthread(pid) and not name.startswith("migration/"): rtprio = int(proc[pid]["stat"]["rt_priority"]) try: policy = schedutils.get_scheduler(pid) affinity = schedutils.get_affinity(pid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e percpu = iskthread(pid) and \ proc.is_bound_to_cpu(pid) kthreads[name] = sched_tunings(name, pid, policy, rtprio, affinity, percpu) return kthreads
def show(irqs, ps): irq_list = [] for sirq in irqs.keys(): try: irq_list.append(int(sirq)) except: continue irq_list.sort() nics = ethtool.get_active_devices() for irq in irq_list: info = irqs[irq] pids = ps.find_by_name("IRQ-%d" % irq) if pids: pid = pids[0] thread_affinity_list = schedutils.get_affinity(pid) if len(thread_affinity_list) <= 4: thread_affinity = ",".join("%s" % a for a in thread_affinity_list) else: thread_affinity = ",".join("0x%x" % a for a in procfs.hexbitmask(schedutils.get_affinity(pid), irqs.nr_cpus)) rtprio = int(ps[pid]["stat"]["rt_priority"]) else: pid = -1 rtprio = -1 thread_affinity = "" try: irq_affinity_list = info["affinity"] if len(irq_affinity_list) <= 4: irq_affinity = ",".join("%s" % a for a in irq_affinity_list) else: irq_affinity = ",".join("0x%x" % a for a in procfs.hexbitmask(irq_affinity_list, irqs.nr_cpus)) except: irq_affinity = "" events = reduce(lambda a, b: a + b, info["cpu"]) users = info["users"] for u in users: if u in nics: users[users.index(u)] = "%s(%s)" % (u, ethtool.get_module(u)) print "%5d: %5d %5d %11d %8s %8s %s" % (irq, pid, rtprio, events, thread_affinity, irq_affinity, ",".join(users))
def show(ps, cpuinfo, irqs): ps_list = [] for pid in ps.keys(): if schedutils.get_scheduler(pid) == 0: continue ps_list.append(pid) ps_list.sort() nics = ethtool.get_active_devices() for pid in ps_list: thread_affinity_list = schedutils.get_affinity(pid) if len(thread_affinity_list) <= 4: thread_affinity = ",".join(str(a) for a in thread_affinity_list) else: thread_affinity = ",".join( str(hex(a)) for a in procfs.hexbitmask( schedutils.get_affinity(pid), cpuinfo.nr_cpus)) sched = schedutils.schedstr(schedutils.get_scheduler(pid))[6:] rtprio = int(ps[pid]["stat"]["rt_priority"]) cmd = ps[pid]["stat"]["comm"] users = "" if cmd[:4] == "IRQ-": try: users = irqs[cmd[4:]]["users"] for u in users: if u in nics: users[users.index( u)] = "%s(%s)" % (u, ethtool.get_module(u)) users = ",".join(users) except: users = "Not found in /proc/interrupts!" try: voluntary_ctxt_switches = int( ps[pid]["status"]["voluntary_ctxt_switches"]) nonvoluntary_ctxt_switches = int( ps[pid]["status"]["nonvoluntary_ctxt_switches"]) except: voluntary_ctxt_switches = -1 nonvoluntary_ctxt_switches = -1 print "%5d %6s %5d %8s %9d %12s %15s %s" % ( pid, sched, rtprio, thread_affinity, voluntary_ctxt_switches, nonvoluntary_ctxt_switches, cmd, users)
def ps_show_thread(pid, affect_children, ps, has_ctxt_switch_info, sock_inodes, sock_inode_re, cgroups): global irqs try: affinity = format_affinity(schedutils.get_affinity(pid)) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: return raise e sched = schedutils.schedstr(schedutils.get_scheduler(pid))[6:] rtprio = int(ps[pid]["stat"]["rt_priority"]) cgout = ps[pid]["cgroups"] cmd = ps[pid]["stat"]["comm"] users = "" if tuna.is_irq_thread(cmd): try: if not irqs: irqs = procfs.interrupts() if cmd[:4] == "IRQ-": users = irqs[tuna.irq_thread_number(cmd)]["users"] for u in users: if u in get_nics(): users[users.index(u)] = "%s(%s)" % (u, ethtool.get_module(u)) users = ",".join(users) else: u = cmd[cmd.find('-') + 1:] if u in get_nics(): users = ethtool.get_module(u) except: users = "Not found in /proc/interrupts!" ctxt_switch_info = "" if has_ctxt_switch_info: voluntary_ctxt_switches = int(ps[pid]["status"]["voluntary_ctxt_switches"]) nonvoluntary_ctxt_switches = int(ps[pid]["status"]["nonvoluntary_ctxt_switches"]) ctxt_switch_info = " %9d %12s" % (voluntary_ctxt_switches, nonvoluntary_ctxt_switches) if affect_children: print " %-5d " % pid, else: print " %-5d" % pid, print "%6s %5d %8s%s %15s %s" % (sched, rtprio, affinity, ctxt_switch_info, cmd, users), if cgroups: print " %9s" % cgout, print "" if sock_inodes: ps_show_sockets(pid, ps, sock_inodes, sock_inode_re, affect_children and 3 or 4) if affect_children and ps[pid].has_key("threads"): for tid in ps[pid]["threads"].keys(): ps_show_thread(tid, False, ps[pid]["threads"], has_ctxt_switch_info, sock_inodes, sock_inode_re, cgroups)
def softirq_info(rxtx): print "\nSoft IRQ net %s info" % rxtx pids = ps.find_by_regex(re.compile("sirq-net-%s/.*" % rxtx)) if not pids: pids = ps.find_by_regex(re.compile("softirq-net-%s/.*" % rxtx)) print "%5s %5s %7s" % ("pid", "rtpri", "affinity") for pid in pids: affinity = ",".join("%s" % a for a in schedutils.get_affinity(pid)) rtprio = int(ps[pid]["stat"]["rt_priority"]) print "%5d %5d %8s" % (pid, rtprio, affinity)
def _get_affinity2(self, pid): try: return schedutils.get_affinity(pid) # Workaround for old python-schedutils which incorrectly raised error except (SystemError, OSError) as e: if e[0] == 3: log.debug("Unable to read affinity for PID %s, the task vanished." % pid) return None log.error("unable to get affinity for PID '%s': %s" % (str(pid), e)) return None
def get_affinity(ps_objs, threads=False, parent=''): if parent: parent += ' ' for obj in ps_objs: pid = obj.pid comm = parent + obj["stat"]["comm"] aff = convert_to_range(schedutils.get_affinity(pid)) print("pid %s's (%s) affinity is %s" % (pid, comm, aff)) if not threads and 'threads' in obj: get_affinity(obj['threads'].values(), threads=True, parent=comm)
def ps_show( ps, affect_children, thread_list, cpu_list, irq_list_numbers, show_uthreads, show_kthreads, has_ctxt_switch_info, sock_inodes, sock_inode_re, cgroups, ): ps_list = [] for pid in ps.keys(): iskth = tuna.iskthread(pid) if not show_uthreads and not iskth: continue if not show_kthreads and iskth: continue in_irq_list = False if irq_list_numbers: if tuna.is_hardirq_handler(ps, pid): try: irq = int(ps[pid]["stat"]["comm"][4:]) if irq not in irq_list_numbers: if not thread_list: continue else: in_irq_list = True except: pass elif not thread_list: continue if not in_irq_list and thread_list and pid not in thread_list: continue try: affinity = schedutils.get_affinity(pid) except ( SystemError, OSError, ) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if cpu_list and not set(cpu_list).intersection(set(affinity)): continue ps_list.append(pid) ps_list.sort() for pid in ps_list: ps_show_thread(pid, affect_children, ps, has_ctxt_switch_info, sock_inodes, sock_inode_re, cgroups)
def show(ps, cpuinfo, irqs): ps_list = [] for pid in ps.keys(): if schedutils.get_scheduler(pid) == 0: continue ps_list.append(pid) ps_list.sort() nics = ethtool.get_active_devices() for pid in ps_list: thread_affinity_list = schedutils.get_affinity(pid) if len(thread_affinity_list) <= 4: thread_affinity = ",".join(str(a) for a in thread_affinity_list) else: thread_affinity = ",".join(str(hex(a)) for a in procfs.hexbitmask(schedutils.get_affinity(pid), cpuinfo.nr_cpus)) sched = schedutils.schedstr(schedutils.get_scheduler(pid))[6:] rtprio = int(ps[pid]["stat"]["rt_priority"]) cmd = ps[pid]["stat"]["comm"] users = "" if cmd[:4] == "IRQ-": try: users = irqs[cmd[4:]]["users"] for u in users: if u in nics: users[users.index(u)] = "%s(%s)" % (u, ethtool.get_module(u)) users = ",".join(users) except: users = "Not found in /proc/interrupts!" try: voluntary_ctxt_switches = int(ps[pid]["status"]["voluntary_ctxt_switches"]) nonvoluntary_ctxt_switches = int(ps[pid]["status"]["nonvoluntary_ctxt_switches"]) except: voluntary_ctxt_switches = -1 nonvoluntary_ctxt_switches = -1 print "%5d %6s %5d %8s %9d %12s %15s %s" % (pid, sched, rtprio, thread_affinity, voluntary_ctxt_switches, nonvoluntary_ctxt_switches, cmd, users)
def ps_show(self, ps, affect_children, thread_list, cpu_list, irq_list_numbers, show_uthreads, show_kthreads, has_ctxt_switch_info, sock_inodes, sock_inode_re, cgroups): ps_list = [] for pid in ps.keys(): iskth = tuna.iskthread(pid) if not show_uthreads and not iskth: continue if not show_kthreads and iskth: continue in_irq_list = False if irq_list_numbers: if tuna.is_hardirq_handler(ps, pid): try: irq = int(ps[pid]["stat"]["comm"][4:]) if irq not in irq_list_numbers: if not thread_list: continue else: in_irq_list = True except: pass elif not thread_list: continue if not in_irq_list and thread_list and pid not in thread_list: continue try: affinity = schedutils.get_affinity(pid) except ( SystemError, OSError ) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if cpu_list and not set(cpu_list).intersection(set(affinity)): continue ps_list.append(pid) ps_list.sort() for pid in ps_list: self.ps_show_thread(pid, affect_children, ps, has_ctxt_switch_info, sock_inodes, sock_inode_re, cgroups)
def __init__(self, ps, pid, pid_info, nr_cpus, gladefile): self.ps = ps self.pid = pid self.pid_info = pid_info self.nr_cpus = nr_cpus self.window = gtk.glade.XML(gladefile, "set_process_attributes", "tuna") self.dialog = self.window.get_widget("set_process_attributes") pixbuf = self.dialog.render_icon(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_SMALL_TOOLBAR) self.dialog.set_icon(pixbuf) event_handlers = { "on_cmdline_regex_changed": self.on_cmdline_regex_changed, "on_affinity_text_changed": self.on_affinity_text_changed, "on_sched_policy_combo_changed": self.on_sched_policy_combo_changed, "on_command_regex_clicked": self.on_command_regex_clicked, "on_all_these_threads_clicked": self.on_all_these_threads_clicked, "on_just_this_thread_clicked": self.on_just_this_thread_clicked } self.window.signal_autoconnect(event_handlers) self.sched_pri = self.window.get_widget("sched_pri_spin") self.sched_policy = self.window.get_widget("sched_policy_combo") self.regex_edit = self.window.get_widget("cmdline_regex") self.affinity = self.window.get_widget("affinity_text") self.just_this_thread = self.window.get_widget("just_this_thread") self.all_these_threads = self.window.get_widget("all_these_threads") processes = self.window.get_widget("matching_process_list") self.sched_pri.set_value(int(pid_info["stat"]["rt_priority"])) cmdline_regex = procfs.process_cmdline(pid_info) self.affinity_text = tuna.list_to_cpustring( schedutils.get_affinity(pid)) self.affinity.set_text(self.affinity_text) self.create_matching_process_model(processes) self.create_policy_model(self.sched_policy) self.sched_policy.set_active(schedutils.get_scheduler(pid)) self.regex_edit.set_text(cmdline_regex) self.just_this_thread.set_active(True) self.regex_edit.set_sensitive(False) if not ps.has_key(pid) or not ps[pid].has_key("threads"): self.all_these_threads.hide() self.on_just_this_thread_clicked(None)
def thread_filtered(tid, cpus_filtered, show_kthreads, show_uthreads): if cpus_filtered: try: affinity = schedutils.get_affinity(tid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: return False raise e if set(cpus_filtered + affinity) == set(cpus_filtered): return True if not (show_kthreads and show_uthreads): kthread = iskthread(tid) if ((not show_kthreads) and kthread) or \ ((not show_uthreads) and not kthread): return True return False
def set_thread_columns(self, iter, tid, thread_info): new_value = [ None ] * self.nr_columns new_value[self.COL_PRI] = int(thread_info["stat"]["rt_priority"]) new_value[self.COL_POL] = schedutils.schedstr(schedutils.get_scheduler(tid))[6:] thread_affinity_list = schedutils.get_affinity(tid) new_value[self.COL_PID] = tid new_value[self.COL_AFF] = tuna.list_to_cpustring(thread_affinity_list) try: new_value[self.COL_VOLCTXT] = int(thread_info["status"]["voluntary_ctxt_switches"]) new_value[self.COL_NONVOLCTXT] = int(thread_info["status"]["nonvoluntary_ctxt_switches"]) new_value[self.COL_CGROUP] = thread_info["cgroups"] except: pass new_value[self.COL_CMDLINE] = procfs.process_cmdline(thread_info) gui.set_store_columns(self.tree_store, iter, new_value)
def __init__(self, ps, pid, pid_info, nr_cpus, gladefile): self.ps = ps self.pid = pid self.pid_info = pid_info self.nr_cpus = nr_cpus self.window = gtk.glade.XML(gladefile, "set_process_attributes", "tuna") self.dialog = self.window.get_widget("set_process_attributes") pixbuf = self.dialog.render_icon(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_SMALL_TOOLBAR) self.dialog.set_icon(pixbuf) event_handlers = { "on_cmdline_regex_changed" : self.on_cmdline_regex_changed, "on_affinity_text_changed" : self.on_affinity_text_changed, "on_sched_policy_combo_changed" : self.on_sched_policy_combo_changed, "on_command_regex_clicked" : self.on_command_regex_clicked, "on_all_these_threads_clicked" : self.on_all_these_threads_clicked, "on_just_this_thread_clicked" : self.on_just_this_thread_clicked } self.window.signal_autoconnect(event_handlers) self.sched_pri = self.window.get_widget("sched_pri_spin") self.sched_policy = self.window.get_widget("sched_policy_combo") self.regex_edit = self.window.get_widget("cmdline_regex") self.affinity = self.window.get_widget("affinity_text") self.just_this_thread = self.window.get_widget("just_this_thread") self.all_these_threads = self.window.get_widget("all_these_threads") processes = self.window.get_widget("matching_process_list") self.sched_pri.set_value(int(pid_info["stat"]["rt_priority"])) cmdline_regex = procfs.process_cmdline(pid_info) self.affinity_text = tuna.list_to_cpustring(schedutils.get_affinity(pid)) self.affinity.set_text(self.affinity_text) self.create_matching_process_model(processes) self.create_policy_model(self.sched_policy) self.sched_policy.set_active(schedutils.get_scheduler(pid)) self.regex_edit.set_text(cmdline_regex) self.just_this_thread.set_active(True) self.regex_edit.set_sensitive(False) if not ps.has_key(pid) or not ps[pid].has_key("threads"): self.all_these_threads.hide() self.on_just_this_thread_clicked(None)
def set_thread_columns(self, iter, tid, thread_info): new_value = [None] * self.nr_columns new_value[self.COL_PRI] = int(thread_info["stat"]["rt_priority"]) new_value[self.COL_POL] = schedutils.schedstr( schedutils.get_scheduler(tid))[6:] thread_affinity_list = schedutils.get_affinity(tid) new_value[self.COL_PID] = tid new_value[self.COL_AFF] = tuna.list_to_cpustring(thread_affinity_list) try: new_value[self.COL_VOLCTXT] = int( thread_info["status"]["voluntary_ctxt_switches"]) new_value[self.COL_NONVOLCTXT] = int( thread_info["status"]["nonvoluntary_ctxt_switches"]) new_value[self.COL_CGROUP] = thread_info["cgroups"] except: pass new_value[self.COL_CMDLINE] = procfs.process_cmdline(thread_info) gui.set_store_columns(self.tree_store, iter, new_value)
def _get_affinity(self, pid): res = schedutils.get_affinity(pid) log.debug("Read affinity '%s' of PID %d" % (res, pid)) return res
def isolate_cpus(cpus, nr_cpus): ps = procfs.pidstats() ps.reload_threads() previous_pid_affinities = {} for pid in ps.keys(): if cannot_set_affinity(ps, pid): continue try: affinity = schedutils.get_affinity(pid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if set(affinity).intersection(set(cpus)): previous_pid_affinities[pid] = copy.copy(affinity) affinity = affinity_remove_cpus(affinity, cpus, nr_cpus) try: schedutils.set_affinity(pid, affinity) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if not ps[pid].has_key("threads"): continue threads = ps[pid]["threads"] for tid in threads.keys(): if cannot_set_thread_affinity(ps, pid, tid): continue try: affinity = schedutils.get_affinity(tid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if set(affinity).intersection(set(cpus)): previous_pid_affinities[tid] = copy.copy(affinity) affinity = affinity_remove_cpus(affinity, cpus, nr_cpus) try: schedutils.set_affinity(tid, affinity) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e del ps # Now isolate it from IRQs too irqs = procfs.interrupts() previous_irq_affinities = {} for irq in irqs.keys(): # LOC, NMI, TLB, etc if not irqs[irq].has_key("affinity"): continue affinity = irqs[irq]["affinity"] if set(affinity).intersection(set(cpus)): previous_irq_affinities[irq] = copy.copy(affinity) affinity = affinity_remove_cpus(affinity, cpus, nr_cpus) set_irq_affinity(int(irq), procfs.hexbitmask(affinity, nr_cpus)) affinity = parse_irq_affinity_filename("default_smp_affinity", nr_cpus) affinity = affinity_remove_cpus(affinity, cpus, nr_cpus) set_irq_affinity_filename("default_smp_affinity", procfs.hexbitmask(affinity, nr_cpus)) return (previous_pid_affinities, previous_irq_affinities)
def include_cpus(cpus, nr_cpus): ps = procfs.pidstats() ps.reload_threads() previous_pid_affinities = {} for pid in ps.keys(): if iskthread(pid): continue try: affinity = schedutils.get_affinity(pid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if set(affinity).intersection(set(cpus)) != set(cpus): previous_pid_affinities[pid] = copy.copy(affinity) affinity = list(set(affinity + cpus)) try: schedutils.set_affinity(pid, affinity) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if not ps[pid].has_key("threads"): continue threads = ps[pid]["threads"] for tid in threads.keys(): if iskthread(tid): continue try: affinity = schedutils.get_affinity(tid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if set(affinity).intersection(set(cpus)) != set(cpus): previous_pid_affinities[tid] = copy.copy(affinity) affinity = list(set(affinity + cpus)) try: schedutils.set_affinity(tid, affinity) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e del ps # Now include it in IRQs too irqs = procfs.interrupts() previous_irq_affinities = {} for irq in irqs.keys(): # LOC, NMI, TLB, etc if not irqs[irq].has_key("affinity"): continue affinity = irqs[irq]["affinity"] if set(affinity).intersection(set(cpus)) != set(cpus): previous_irq_affinities[irq] = copy.copy(affinity) affinity = list(set(affinity + cpus)) set_irq_affinity(int(irq), procfs.hexbitmask(affinity, nr_cpus)) return (previous_pid_affinities, previous_irq_affinities)
def move_threads_to_cpu(cpus, pid_list, set_affinity_warning = None, spread = False): changed = False ps = procfs.pidstats() cpu_idx = 0 nr_cpus = len(cpus) new_affinity = cpus last_cpu = max(cpus) + 1 for pid in pid_list: if spread: new_affinity = [cpus[cpu_idx]] cpu_idx += 1 if cpu_idx == nr_cpus: cpu_idx = 0 try: try: curr_affinity = schedutils.get_affinity(pid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: # 'No such process' continue curr_affinity = None raise e if set(curr_affinity) != set(new_affinity): try: schedutils.set_affinity(pid, new_affinity) curr_affinity = schedutils.get_affinity(pid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: # 'No such process' continue curr_affinity == None raise e if set(curr_affinity) == set(new_affinity): changed = True if is_hardirq_handler(ps, pid): try: irq = int(ps[pid]["stat"]["comm"][4:]) bitmasklist = procfs.hexbitmask(new_affinity, last_cpu) set_irq_affinity(irq, bitmasklist) except: pass elif set_affinity_warning: set_affinity_warning(pid, new_affinity) else: print "move_threads_to_cpu: %s " % \ (_("could not change %(pid)d affinity to %(new_affinity)s") % \ {'pid':pid, 'new_affinity':new_affinity}) # See if this is the thread group leader if not ps.has_key(pid): continue threads = procfs.pidstats("/proc/%d/task" % pid) for tid in threads.keys(): try: curr_affinity = schedutils.get_affinity(tid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if set(curr_affinity) != set(new_affinity): try: schedutils.set_affinity(tid, new_affinity) curr_affinity = schedutils.get_affinity(tid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: continue raise e if set(curr_affinity) == set(new_affinity): changed = True elif set_affinity_warning: set_affinity_warning(tid, new_affinity) else: print "move_threads_to_cpu: %s " % \ (_("could not change %(pid)d affinity to %(new_affinity)s") % \ {'pid':pid, 'new_affinity':new_affinity}) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: # process died continue raise e return changed
def thread_set_attributes(pid_info, new_policy, new_prio, new_affinity, nr_cpus): pid = pid_info.pid changed = False curr_policy = schedutils.get_scheduler(pid) curr_prio = int(pid_info["stat"]["rt_priority"]) if new_policy == schedutils.SCHED_OTHER: new_prio = 0 if curr_policy != new_policy or curr_prio != new_prio: try: schedutils.set_scheduler(pid, new_policy, new_prio) except: dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, _("Invalid parameters!")) dialog.run() dialog.destroy() return False curr_policy = schedutils.get_scheduler(pid) if curr_policy != new_policy: print _("couldn't change pid %(pid)d from %(cpol)s(%(cpri)d) to %(npol)s(%(npri)d)!") % \ { 'pid': pid, 'cpol': schedutils.schedstr(curr_policy), 'cpri': curr_prio, 'npol': schedutils.schedstr(new_policy), 'npri': new_prio} else: changed = True try: curr_affinity = schedutils.get_affinity(pid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: return False raise e try: new_affinity = [ int(a) for a in new_affinity.split(",") ] except: try: new_affinity = tuna.cpustring_to_list(new_affinity) except: new_affinity = procfs.bitmasklist(new_affinity, nr_cpus) new_affinity.sort() if curr_affinity != new_affinity: try: schedutils.set_affinity(pid, new_affinity) except: return invalid_affinity() try: curr_affinity = schedutils.get_affinity(pid) except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: return False raise e if curr_affinity != new_affinity: print _("couldn't change pid %(pid)d from %(caff)s to %(naff)s!") % \ { 'pid':pid, 'caff':curr_affinity, 'naff':new_affinity } else: changed = True return changed
def get_affinity(self, pid): return schedutils.get_affinity(pid)
def thread_set_attributes(pid_info, new_policy, new_prio, new_affinity, nr_cpus): pid = pid_info.pid changed = False curr_policy = schedutils.get_scheduler(pid) curr_prio = int(pid_info["stat"]["rt_priority"]) if new_policy == schedutils.SCHED_OTHER: new_prio = 0 if curr_policy != new_policy or curr_prio != new_prio: try: schedutils.set_scheduler(pid, new_policy, new_prio) except: dialog = gtk.MessageDialog( None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, _("Invalid parameters!")) dialog.run() dialog.destroy() return False curr_policy = schedutils.get_scheduler(pid) if curr_policy != new_policy: print _("couldn't change pid %(pid)d from %(cpol)s(%(cpri)d) to %(npol)s(%(npri)d)!") % \ { 'pid': pid, 'cpol': schedutils.schedstr(curr_policy), 'cpri': curr_prio, 'npol': schedutils.schedstr(new_policy), 'npri': new_prio} else: changed = True try: curr_affinity = schedutils.get_affinity(pid) except ( SystemError, OSError ) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: return False raise e try: new_affinity = [int(a) for a in new_affinity.split(",")] except: try: new_affinity = tuna.cpustring_to_list(new_affinity) except: new_affinity = procfs.bitmasklist(new_affinity, nr_cpus) new_affinity.sort() if curr_affinity != new_affinity: try: schedutils.set_affinity(pid, new_affinity) except: return invalid_affinity() try: curr_affinity = schedutils.get_affinity(pid) except ( SystemError, OSError ) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError if e[0] == 3: return False raise e if curr_affinity != new_affinity: print _("couldn't change pid %(pid)d from %(caff)s to %(naff)s!") % \ { 'pid':pid, 'caff':curr_affinity, 'naff':new_affinity } else: changed = True return changed