Можете ли вы переопределить использование ядра ЦП в уже запущенном процессе?

Есть ли способ запустить процесс на (например) 10 ядрах процессора, а затем переопределить использование ядра ядра до 5?

  • Что такое программные и аппаратные прерывания и как они обрабатываются?
  • Как остановить вентилятор процессора в Linux?
  • Как определить, есть ли какой-то параметр энергосбережения, который отключил процессор в Linux
  • Определите семейство процессоров Intel для компилятора C?
  • Поиск MFLOPS с использованием Linux
  • Пакет Debian доступен для ia64, но не для x86_64?
  • обнаруживать процесс питания процессора без: top, htop, ps?
  • Что фактически делает компьютер с его запасными циклами процессора?
  • 2 Solutions collect form web for “Можете ли вы переопределить использование ядра ЦП в уже запущенном процессе?”

    На самом деле, нет.

    Это, конечно же, нельзя сделать переносным способом. Вы не указали, в какой системе вы пытаетесь это сделать. Я предполагаю, что это Linux, потому что это то, что я знаю лучше всего, но не стесняйтесь уточнять.

    Ядро Linux имеет два системных вызова, связанных с «близостью процессора», sched_setaffinity() и sched_getaffinity() . Они могут использоваться для указания ядра, на котором может выполняться процесс. Если количество процессоров ниже, чем количество потоков, используемых в данный момент, то по необходимости он начнет использовать меньшее количество ядер. Однако проблема с этим методом заключается в том, что он заставляет определенный набор ядер процессора для запуска процесса. Если это интенсивная работа с ЦП, то это означает, что эти ядра могут нагреваться; если в системе недостаточно охлаждения, чтобы охладить процессор достаточно, чтобы это было менее проблематично, тогда обычно решение заключается в том, что ядро ​​перераспределяет рассматриваемый процесс на другое ядро, позволяя только что охладить бит в среднем времени. Задействуя набор ядер для запуска, этот метод больше не работает, и затем ядро ​​должно вернуться к изменению частоты процессора. Если вы пытаетесь ограничить ядра, потому что есть другие запущенные процессы, которые вы хотите дать некоторое время процессора, однако, это, вероятно, не имеет значения.

    Системные вызовы sched_setaffinity() и sched_getaffinity() могут быть доступны из командной строки командой taskset :

     taskset -p 0x3 $PID 

    сообщит ядру, что процесс с pid $PID может с этого времени работать только на ядрах процессоров 0 и 1. (0x3 – это бит-маска, где бит 1 относится к ядру 0, а бит 2 относится к ядру 1) ,

    Я нашел путь!!

    cpulimit неплохо работает для этого:

    https://github.com/opsengine/cpulimit

    Linux и Unix - лучшая ОС в мире.