def get_sched_param_from_pid(pid): scheduler = os.sched_getscheduler(pid) if scheduler == os.SCHED_RR: priority = os.sched_getparam(pid).sched_priority else: assert scheduler == os.SCHED_OTHER priority = -1 cpus = list(os.sched_getaffinity(pid)) cpus_all = list(range(os.cpu_count())) if cpus == cpus_all: cpus = [] return SchedParam(priority, cpus)
def get_priority(self, pid): return os.sched_getparam(pid).sched_priority
# gc.collect(1) # gc.collect(2) # gc.disable() if os.name != "nt": print("Making highest priority, os.SCHED_RR") try: pid = os.getpid() niceValue = os.nice(-20) sys.setswitchinterval(0.5) print("sys.getswitchinterval", sys.getswitchinterval()) os.sched_setaffinity(pid, [(os.cpu_count() or 1) - 1]) os.sched_setscheduler(pid, os.SCHED_RR, os.sched_param(1)) print("sched_getscheduler", os.sched_getscheduler(pid)) print("sched_getparam", os.sched_getparam(pid)) print("sched_getaffinity", os.sched_getaffinity(pid)) print("sched_getprioritymax", os.sched_get_priority_max(0)) print("sched_getprioritymin", os.sched_get_priority_min(0)) print("sched_rr_getinterval", os.sched_rr_get_interval(pid)) print("nice", os.nice(0)) except PermissionError: print("run as root to make top OS priority for more accurate results.") else: print("lol windows good luck") for i in range(5): print("pass", i + 1) for j in range(1_000_000): if sum(j for j in range(10)) < 0:
# -*- coding: utf-8 -*- import os import signal import time pid = 0 param = os.sched_getparam(pid) print("Parametros do processo " + str(param)) #muda os parametros do escalonador para um determinado pid #os valores de prioridade suportados dependem da política #de escalonamento corrente #os.sched_setparam(pid, param) #incrementa o "nice" do processo, dando uma forma #de boost/downgrade na prioridade do mesmo, valores suportados no ubuntu #variam de -20 à 19, em alguns sistemas, esses limites são diferentes #os.nice(10) #muda a política de escalonamento para um determinado PID #caso você não seja super usuário, a única política suportada #são os.SCHED_OTHER(default), os.SCHED_IDLE e os.SCHED_BATCH #as demais políticas suportadas: SCHED_FIFO (FCFS), SCHED_RR (Round Robin) #e SCHED_SPORADIC tem que ser pré configuradas antes de executar #os.sched_setscheduler(pid, policy, param) #muda a afinidade da cpu para um determinado processo #para saber quais identificadores das CPUs você pode #visualizar o /proc/cpuinfo. Dessa forma você consegue #restringir um processo a executar apenas em uma cpu ou em
def check_sched(pid): # try to retrieve scheduling infos os.sched_getparam(pid)
'-s', default='--\nHELLO\nWORLD\n', help='string to overwrite with') parser.add_argument('--binary', '-b', default='/usr/bin/sum', help='binary to use sudo with') args = parser.parse_args() init() try: inotify_thread = Thread(target=f_inotify) inotify_thread.setDaemon(True) inotify_thread.start() os.sched_setscheduler(0, os.SCHED_IDLE, os.sched_getparam(0)) print(os.sched_getaffinity(0)) os.sched_setaffinity(0, os.sched_getaffinity(0)) os.nice(19) time.sleep(2) print("starting") asd = subprocess.Popen( "/dev/shm/_tmp/\\ \\ \\ \\ \\ 34873\\ -r unconfined_r {} '{}'".format( args.binary, args.string), shell=True) asd_PID = asd.pid stdout, stderr = asd.communicate() #print(stdout)