четверг, 28 февраля 2013 г.

Отключение ядер процессора в Linux

Отключить ядро или несколько ядер процессора можно так:

$ echo 0 | sudo tee  /sys/devices/system/cpu/cpu1/online
$ dmesg
....
[ 2026.821631] CPU0 attaching NULL sched-domain.
[ 2026.821641] CPU1 attaching NULL sched-domain.
[ 2026.869148] CPU0 attaching NULL sched-domain. [ 2026.875937] CPU 1 is now offline
[ 2026.875945] SMP alternatives: switching to UP code

Чтобы включить ядро обратно, нужно:

$ echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online
$ dmesg
....
[ 2097.441078] SMP alternatives: switching to SMP code
[ 2097.642192] Booting processor 1 APIC 0x1 ip 0x6000
[ 2027.140078] Initializing CPU#1
[ 2027.140078] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
[ 2027.140078] CPU: L2 Cache: 512K (64 bytes/line)
[ 2027.140078] CPU 1/0x1 -> Node 0
[ 2097.656021] CPU1: [ 2027.140078] kvm-clock: cpu 1, msr 0:1915701, secondary cpu clock [ 2097.656021] AMD QEMU Virtual CPU version 1.1.2 stepping 03 [ 2097.656021] CPU0 attaching NULL sched-domain. [ 2197.128013] CPU0 attaching sched-domain: [ 2197.128013] domain 0: span 0-1 level CPU [ 2197.128013] groups: group ffff88000180fd00 cpus 0 group ffff88000190fd00 cpus 1 [ 2197.128013] CPU1 attaching sched-domain: [ 2197.128013] domain 0: span 0-1 level CPU [ 2197.128013] groups: group ffff88000190fd00 cpus 1 group ffff88000180fd00 cpus 0

Эти изменения будут действовать, пока систему не перезагрузят. Чтобы уменьшить количество ядер перманентно нужно передать ядру параметр maxcpus=N, где N - количество ядер, которые нужно подключить в системе при загрузке.

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

  1. Подскажите, а зачем может понадобится отключение ядра?

    ОтветитьУдалить
    Ответы
    1. Тестирую производительность приложения на различных комбинациях количества ядер процессора и объема оперативной памяти. Чтобы каждый раз не перезагружать сервер, проще отключать ядра таким способом.

      Удалить
  2. Подскажите, пожалуйста. Есть 4-х ядерный процессор с "убитым" ядром номер два. Как можно отключить второе ядро так, чтобы оно не задействовалось системой вообще?

    ОтветитьУдалить
    Ответы
    1. Можно попробовать загрузить ядро с параметром max_cpus=1, а затем включить нужные ядра

      echo 1 > /sys/devices/system/cpu/cpu2/online
      echo 1 > /sys/devices/system/cpu/cpu3/online

      В результате должны активироваться ядра 0,2,3.

      Удалить
    2. Извините за, возможно, глупый вопрос, но как загрузить ядро с параметром max_cpus=1 ? Я, так сказать, начинающий пользователь линукса..

      Удалить
    3. Андрей, большое спасибо Вам за помощь! Загружаю ОС с параметром "maxcpus=1", затем подключаю два рабочих ядра:
      echo 1 | sudo tee /sys/devices/system/cpu/cpu2/online
      echo 1 | sudo tee /sys/devices/system/cpu/cpu3/online
      Все работает. Осталось с виртуальными машинами и Wine'ом разобраться)

      Удалить
  3. Интересная штука, у меня неттоп с пассивным охлаждением, у которого ограничения по TPD, когда все ядра нагружаются, то частота в 2.7ггц сбрасывается до 1.6, но при этом одно ядро с хорошей частотой позволит достаточно быстро работать запущенному софту, вот думаю вместо 4х ядер сделать только 3 и им будет хватать чтобы на бустовых частотах работать и укладываться в TPD

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