Переведите ядро ​​процессора в спящий режим и запустите его на 0% - PullRequest
0 голосов
/ 20 июня 2020

У меня есть код, в котором я пытаюсь нагружать ядра процессора. Я хочу запустить частичное количество ядер на 100%, а остальные должны работать на 0%. Лог c, который я использовал для ядер, работающих на 100%, выглядит следующим образом:

#Pass the CPU core number as affinity
def loop(conn, affinity):
    proc = psutil.Process()
    proc_info = proc.pid
    msg = "Process ID: "+str(proc_info)+" CPU: "+str(affinity[0])
    conn.send(msg)
    conn.close()
    proc.cpu_affinity(affinity)    #Allocate a certain CPU core for this process
    while True:
        1*1

Ядра, выполняющие этот код, работают на 100%. Я написал еще один l oop и присоединяю оставшиеся ядра к обработке, выполняя это l oop:

def rest_cores(affinity, exec_time):
    proc = psutil.Process()
    proc.cpu_affinity(affinity)
    time.sleep(exec_time)

Согласно этому logi c, ядра должны приостановить выполнение для exec_time и быть на 0%. Но ядра работают на большем проценте. Как мне убедиться, что все оставшиеся ядра работают на 0%?

Вот полный лог c:

from multiprocessing import Process, Pipe
import os
import signal
import sys
import time
import psutil

def loop(conn, affinity):
    proc = psutil.Process()
    proc_info = proc.pid
    msg = "Process ID: "+str(proc_info)+" CPU: "+str(affinity[0])
    conn.send(msg)
    conn.close()
    proc.cpu_affinity(affinity)
    while True:
        1*1

def rest_cores(affinity, exec_time):
    proc = psutil.Process()
    proc.cpu_affinity(affinity)
    time.sleep(exec_time)


def cpu_stress():
    procs = []
    conns = []
    n_cpu = psutil.cpu_count(logical=True)
    proc_num = n_cpu//2                     #Half the cores will run at 100%
    
    for i in range(proc_num):               #Initial Half of the total cores
        parent_conn, child_conn = Pipe()
        p = Process(target=loop, args=(child_conn,[i]))
        p.start()
        procs.append(p)
        conns.append(parent_conn)

    for i in range(proc_num+1, n_cpu):      #Final half of total cores
        parent_conn, child_conn = Pipe()
        p = Process(target=rest_cores, args=([i], exec_time))
        p.start()
        procs.append(p)

    for conn in conns:
        try:
            print(conn.recv())
        except EOFError:
            continue

    time.sleep(exec_time)

    for p in procs:
        p.terminate()

cpu_stress()
...