понедельник, 19 сентября 2016 г.

Как ограничить приложение одним ядром ЦП

Зачем это надо

Если у пользователей слабые машины с 1-2 ядрами процессора, десктопное приложение может тормозить. Поэтому в регресии стоит на мощной машинке выдать ему одно ядро и посмотреть, что он не тормозит как сволочь

Как сделать

В винде ограничение по ядрам можно делать прямо в Диспетчере Задач:
  • Диспетчер задач → Подробности.
  • Найти нужный процесс.
  • Правой кнопкой → Задать сходство (в Windows 7 пункт называется "Задать соответствие").

  • Снять галки, поставить только один ЦП.

В случае использования HyperThreading, виртуальные процессоры одного ядра обычно идут подряд.  Если у нас:
  • 4 железных процессора;
  • 8 виртуальных (по 2 на каждом).
То ЦП0 и ЦП1 - на одном ядре, ЦП2 и ЦП3 - на другом и т.д.

Из этого следует, что если мы эмулируем одноядерную машину с 2 виртуальными ядрами, то нужно включать ЦП0 и ЦП1.

Если включить, например, ЦП0 и  ЦП2, то будут использованы два разных "железных" ядра и производительность будет сильно выше.

5 комментариев:

  1. нет нужного мне exe файла в "подробностях"

    ОтветитьУдалить
  2. но я не знаю как запустить, мне нужно ограничить до запуска

    ОтветитьУдалить
    Ответы
    1. Можно запустить приложение на нескольких логических процессорах с помощью параметра affinity. Указываем маску в шестнадцатеричном формате, например требуется использовать процессоры 1, 3, 5, 7, соответственно, это будет 10101010 или 0xAA, передаем в виде /affinity 0xAA.
      т.е.
      c:\windows\system32\cmd.exe /C start /affinity 0xAA software.exe
      где software.exe - ваше приложение
      если вместо 0xAA - передавать цифру - приложение будет запущено на соответствующем цифре логическом ядре.

      Удалить
  3. c:\windows\system32\cmd.exe /C start /affinity 1 software.exe

    ОтветитьУдалить