def _set_rt(self, pid, sched, prio):
		sched_str = schedutils.schedstr(sched)
		log.debug("Setting scheduler policy to '%s' and priority to '%d' of PID '%d'."
				% (sched_str, prio, pid))
		try:
			prio_min = schedutils.get_priority_min(sched)
			prio_max = schedutils.get_priority_max(sched)
			if prio < prio_min or prio > prio_max:
				log.error("Priority for %s must be in range %d - %d. '%d' was given."
						% (sched_str, prio_min,
						prio_max, prio))
		# Workaround for old (pre-0.4) python-schedutils which raised
		# SystemError instead of OSError
		except (SystemError, OSError) as e:
			log.error("Failed to get allowed priority range: %s"
					% e)
		try:
			schedutils.set_scheduler(pid, sched, prio)
		except (SystemError, OSError) as e:
			if hasattr(e, "errno") and e.errno == errno.ESRCH:
				log.debug("Failed to set scheduling parameters of PID %d, the task vanished."
						% pid)
			else:
				log.error("Failed to set scheduling parameters of PID %d: %s"
						% (pid, e))
Esempio n. 2
0
def main():

    args = sys.argv[1:]
    if not args:
        usage()
        return

    policy = schedutils.SCHED_RR
    policy_flag = 0
    while True:
        o = args.pop(0)
        try:
            priority = int(o)
            break
        except:
            pass

        if o in ("-h", "--help"):
            usage()
            return
        elif o in ("-b", "--batch"):
            policy = schedutils.SCHED_BATCH
        elif o in ("-f", "--fifo"):
            policy = schedutils.SCHED_FIFO
        elif o in ("-i", "--idle"):
            policy = schedutils.SCHED_IDLE
        elif o in ("-m", "--max"):
            show_all_priority_limits()
            return
        elif o in ("-o", "--other"):
            policy = schedutils.SCHED_OTHER
        elif o in ("-r", "--rr"):
            policy = schedutils.SCHED_RR
        elif o in ("-R", "--reset-on-fork"):
            policy_flag |= schedutils.SCHED_RESET_ON_FORK
        elif o in ("-p", "--pid"):
            if len(args) > 1:
                priority = int(args.pop(0))
                pid = int(args.pop(0))
                if not valid_policy_flag(policy, policy_flag):
                    return
                change_settings(pid, policy, policy_flag, priority)
            else:
                pid = int(args.pop(0))
                show_settings(pid)
            return
        else:
            usage()
            return

    if not valid_policy_flag(policy, policy_flag):
        return

    schedutils.set_scheduler(0, policy | policy_flag, priority)
    os.execvp(args[0], args)
Esempio n. 3
0
def main():

	args = sys.argv[1:]
	if not args:
		usage()
		return

	policy = schedutils.SCHED_RR
	policy_flag = 0
	while True:
		o = args.pop(0)
		try:
			priority = int(o)
			break
		except:
			pass

		if o in ("-h", "--help"):
			usage()
			return
		elif o in ("-b", "--batch"):
			policy = schedutils.SCHED_BATCH
		elif o in ("-f", "--fifo"):
			policy = schedutils.SCHED_FIFO
		elif o in ("-i", "--idle"):
			policy = schedutils.SCHED_IDLE
		elif o in ("-m", "--max"):
			show_all_priority_limits()
			return
		elif o in ("-o", "--other"):
			policy = schedutils.SCHED_OTHER
		elif o in ("-r", "--rr"):
			policy = schedutils.SCHED_RR
		elif o in ("-R", "--reset-on-fork"):
			policy_flag |= schedutils.SCHED_RESET_ON_FORK
		elif o in ("-p", "--pid"):
			if len(args) > 1:
				priority = int(args.pop(0))
				pid = int(args.pop(0))
				if not valid_policy_flag(policy, policy_flag):
					return
				change_settings(pid, policy, policy_flag, priority)
			else:
				pid = int(args.pop(0))
				show_settings(pid)
			return
		else:
			usage()
			return

	if not valid_policy_flag(policy, policy_flag):
		return

	schedutils.set_scheduler(0, policy | policy_flag, priority)
	os.execvp(args[0], args)
Esempio n. 4
0
 def set_scheduler(self, pid, sched, prio):
     schedutils.set_scheduler(pid, sched, prio)
Esempio n. 5
0
def change_settings(pid, policy, policy_flag, rtprio):
	try:
		schedutils.set_scheduler(pid, policy | policy_flag, rtprio)
	except SystemError, err:
		print "sched_setscheduler: %s" % err[1]
		print "failed to set pid %d's policy" % pid
Esempio n. 6
0
def thread_set_priority(tid, policy, rtprio):
	if not policy and policy != 0:
		policy = schedutils.get_scheduler(tid)
	schedutils.set_scheduler(tid, policy, rtprio)
Esempio n. 7
0
File: util.py Progetto: noushi/tuna
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
Esempio n. 8
0
File: util.py Progetto: bristot/tuna
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
Esempio n. 9
0
def change_settings(pid, policy, policy_flag, rtprio):
    try:
        schedutils.set_scheduler(pid, policy | policy_flag, rtprio)
    except SystemError, err:
        print "sched_setscheduler: %s" % err[1]
        print "failed to set pid %d's policy" % pid