Linux cpupower как установить частоту

Обновлено: 07.07.2024

В статье описываются используемые в Linux методы получения информации об используемом процессоре и его состоянии (температура, частота, задушенность), управление частотой процессора, загрузка микрокода, модули msr и cpuid, привязка процесса и обработчика прерывания к конкретному процессору (ядру), особенности работы NUMA.

Начальную информацию о процессоре можно получить с помощью команды dmesg:

Далее необходимо заглянуть в /proc/cpuinfo:

Более подробную (400 строк) информацию можно получить с помощью команды x86info (ключи: -a -v).

  • type (всегда 0?)
  • family (15 - NetBirst, 6 - Core)
  • model
  • stepping

А также через DMI интерфейс: "dmidecode -t 4" (собственно процессор) и "dmidecode -t 7" (кеш).

  • type - Data, Instruction, Unified
  • level - L1, L2, L3
  • size
  • ways_of_associativity
  • shared_cpu_map - битовая карта ЦП, которые разделяют данный кеш
  • coherency_line_size - ?
  • number_of_sets - ?
  • physical_line_partition - ?
  • physical_package_id - номер чипа
  • core_id - номер ядра в чипе
  • core_siblings - битовая карта соседних по чипу ЦП
  • thread_siblings - битовая карта соседних по SMT (HT) ЦП

Модуль acpi-cpufreq конфликтует со встроенной в ядро обработкой Intel P-state и не загружается, так что /proc/acpi в CentOS 7 пуст.

Информация о возможностях по управлению питанием и throttling от ACPI:

И "lshal -t -l" (устарело).

Предельно допустимая температура процессора (материнской платы, системы):

Утилита lscpu выдаёт информацию об архитектуре, битности, порядке байт, количестве ядер, количестве потоков на ядро, сокетов, узлов NUMA, модель и ревизия (официальная частота), текущая частота, виртуализация, размеры кешей, распределение ЦП по узлам NUMA; ключ "-e" вызывает выдачу в виде таблицы

Модуль acpi-cpufreq конфликтует со встроенной в ядро обработкой Intel P-state и не загружается,

Получение информации о текущей температуре процессора (материнской платы):

Получение информации о питании процессора (текущее состояние, список возможных состояний, граф переходов и число переходов по каждой ветви; C1 - состояние после команды HLT; C1E - улучшенный вариант, сбрасывает множитель частоты процессора до минимально возможного значения (2.8GHz для P4 660)):

Управление частотой процессора позволяет регулировать энергопотребление компьютера. Подсистема управления частотой процессора в ядре Linux позволяет подключать управляющие модули для различных архитектур и извещать подсистемы ядра, которые зависят от частоты процессора, при изменении частоты или политики управления частотой. Некоторые системы могут изменять частоту самостоятельно без вмешательства программы. Для таких систем устанавливается политика изменения частоты, а также верхний и нижний пределы частоты. Для других систем требуется вмешательство программы при каждом изменении частоты. Для них устанавливается специальный управляющий модуль - регулятор (гувернёр, governor) и параметры для него.

  • affected_cpus
  • cpuinfo_cur_freq (текущая частота процессора, в КГц)
  • cpuinfo_max_freq (максимально возможная частота процессора, в КГц)
  • cpuinfo_min_freq (минимально возможная частота процессора, в КГц)
  • scaling_available_frequencies (перечень допустимых частот процессора, в КГц)
  • scaling_available_governors (перечень допустимых регуляторов)
  • scaling_cur_freq ()
  • scaling_driver (используемый архитектурнозависимый модуль управления частотой)
  • scaling_governor (используемый регулятор; для смены регулятора записать сюда его имя)
  • scaling_max_freq (максимальная частота процессора, которую будет устанавливать регулятор или обработчик политики)
  • scaling_min_freq (минимальная частота процессора, которую будет устанавливать регулятор или обработчик политики)
  • scaling_setspeed (для установки частоты записать сюда значение, в КГц)
  • userspace (модуль cpufreq_userspace, частота устанавливается прикладной программой или просто командой echo)
  • powersave (модуль cpufreq_powersave, устанавливает наименьшую разрешённую частоту)
  • performance (модуль cpufreq_performance, устанавливает наибольшую разрешённую частоту)
  • ondemand (модуль cpufreq_ondemand, частота процессора устанавливается в зависимости от нагрузки), управляющие параметры в подкаталоге ondemand:
    • ignore_nice_load (0; игнорировать нагрузку, создаваемую низкоприоритетными процессами)
    • sampling_rate (1000000 микросекунд; позволяет установить частоту опроса нагрузки)
    • sampling_rate_max (500000000; максимально возможное значение sampling_rate)
    • sampling_rate_min (500000; минимально возможное значение sampling_rate)
    • up_threshold (80%; при какой нагрузке в интервале между опросами увеличивать частоту процессора)
    • sampling_down_factor (1; сколько интервалов пониженной нагрузки выжидать перед понижением частоты процессора)
    • freq_step (5% от максимально возможной частоты процессора; шаг изменения частоты процессора; значение 100 даёт поведение эквивалентное поведению регулятора ondemand)
    • down_threshold (20%; при какой нагрузке в интервале между опросами уменьшать частоту процессора)
    • time_in_state (для каждой возможной частоты процессора выводится общее время, когда процессор работал на этой частоте, единица - 10 мс)
    • total_trans (количество изменений частоты процессора)
    • trans_table (матрица числа переходов от одной частоты процессора к другой; требуется CONFIG_CPU_FREQ_STAT_DETAILS при генерации ядра)

    Устанавливать регуляторы и частоты можно записывая желаемые значения в /sys/devices/system/cpu/cpu0/cpufreq/ (требуются прва суперпользователя) или используя аплет cpufreq-selector из пакета gnome-applets (позволяет устанавливать тип регулятора и частоту для регулятора userspace; права доступа устанавливаются обычным механизмом consolehelper и PAM).

    • --cpu номер-процессора
    • --min минимальная-частота-для-регулятора
    • --max максимальная-частота-для-регулятора
    • --governor регулятор
    • --freq частота (только для регулятора userspace)
    • USR1 - установить максимальную скорость
    • USR2 - установить минимальную скорость

    gkrellm имеет встраиваемый модуль gkrellm-freq, позволяющий узнать текущее значение текущее значение частоты процессора.

    • /sys/devices/system/cpu/intel_pstate/max_perf_pct
    • /sys/devices/system/cpu/intel_pstate/min_perf_pct
    • /sys/devices/system/cpu/intel_pstate/no_turbo
    • /sys/devices/system/cpu/cpuX/cpufreq/scaling_governor (из /sys/devices/system/cpu/cpuX/cpufreq/scaling_available_governors - performance и powersave)

    Утилита "cpupower frequency-info" выдаёт информацию о ЦП, драйвере управления частотой, частоты, гувернёрам, турбо-режимам. "cpupower monitor -m Mperf" - текущая частота каждого ядра.

    Утилита x86_energy_perf_policy позволяет задать предпочтительный режим работы ЦП (performance, normal, powersave, смещение от 0 (performance) до 15 (powersave)).

    Запрет понижать частоту процессора достигается использованием параметров ядра processor.max_cstate=1, intel_idle.max_cstate=0 [и idle=poll] (увеличивается потребление электричества).

    TM1 (Thermal Monitoring 1) - понижение нагрева процессора вставлением пустых циклов. Вызывает проблемы у других частей компьютера.

    TM2 - понижение напряжения и частоты.

    Получение информации о текущем состоянии

    • ЦП с поддержкой Turbo Boost
    • включение Turbo Boost в BIOS
    • включение EIST (Enable Enhanced Intel SpeedStep Technology) в BIOS
    • адекватное охлаждение
    • достаточно новое ядро (RHEL 4.7, RHEL 5.3)
    • modprobe acpi-cpufreq
    • echo performance > /sys/devices/system/cpu/cpuX/cpufreq/scaling_governor
    • потребляемый ток и мощность при текущей загрузке не превышают определённых изготовителем

    acpi-cpufreq для обозначения турборежима использует фиктивную частоту (3501000 вместо 3500000)

    Универсальная ручка управления включением режимов Turbo Boost и Turbo-Core - /sys/devices/system/cpu/cpufreq/boost (/sys/devices/system/cpu/intel_pstate/no_turbo?). Не поддерживается модулем intel_pstate.

    Утилита turbostat позволяет собрать статистику при выполнении указанной программы (возможности процессора по частоте при различном количестве активных ядер, частота, температура, мощность ЦП и ОП, режим).

    Утилита microcode_ctl загружает микрокод (исправленная прошивка) для процессоров Intel (требуется поддержка модуля ядра microcode, при загрузке создаётся символьное устройство /dev/cpu/microcode, 10:184). Собственно микрокод лежит в файле /etc/firmware/microcode.dat. Имеет ли смысл его обновлять при каждой загрузке?

    При загрузке модуля msr создаётся символьное устройство (/dev/cpu/0/msr, 202:0). Используется centrino-decode (декодирует информацию о напряжении питания процессора и соотношении частот процессора и системной шины).

    При загрузке модуля cpuid создаётся символьное устройство (/dev/cpu/0/cpuid, 203:0). Используется в правилах udev. Зачем это?

    • --pid [маска-процессоров] номер-процесса
    • --cpu-list список-процессоров (через запятую, интервалы через '-')
    • маска-процессоров -- запускаемая-команда аргументы

    Привязка обработки прерывания к процессору: узнать номер прерывания (lspci -v), записать битовую маску допустимых процессоров в /proc/irq/номер-прерывания/smp_affinity.

    CC-NUMA (Cache Coherent Non Uniform Memory Access) - система с неоднородным (в т.ч. по длительности; в 1.5 раза для Nehalem и Barcelona) доступом процессоров к узлам общей памяти с обеспечением когерентности кешей процессоров.

    Ядро Linux 2.6 имеет поддержку CC-NUMA в виде политики выделения памяти относительно узлов памяти (mempolicy.h: set_mempolicy(2), get_mempolicy(2), mbind(2)). По умолчанию, используется системная политика выделения памяти В качестве системной политики при загрузке используется политика поочерёдного выделения из узлов памяти с достаточным количеством свободной памяти, а при работе - политика локального выделения. Процесс может запросить использование другой политики для всех последующих своих запросов (и запросов своих наследников) или отдельную политику для запросов в отдельной области виртуальной памяти (только анонимные области, не наследуется). Отдельные политики могут быть установлены для разделяемых объектов. Политика состоит из режима работы (MPOL_DEFAULT - использовать политику исходя из области; MPOL_BIND - выделять память из ближайшего узла только из указанного списка узлов; MPOL_PREFERRED - выделять память из указанного узла, при недостатке памяти из ближайшего узла, при пустом списке узлов выбирается локальный узел (на котором запустилась первая нить); MPOL_INTERLEAVED - поочерёдное выделение из списка узлов). При свопировании страницы информация об узле страницы теряется. Для области памяти (определяется начальным адресом и длиной) можно задать политику выделения (VMA policy); задаются модификаторы режима (MPOL_MF_STRICT - все страницы д.б. на заданном узле; MPOL_MF_MOVE - попытаться переместить неправильно распределённые эксклюзивные страницы; MPOL_MF_MOVEALL - попытаться переместить все неправильно распределённые страницы; MPOL_F_STATIC_NODES - не перемещать страницы после смены списка узлов; MPOL_F_RELATIVE_NODES) и список допустимых узлов.

    • numa=off (считать всю память одним узлом)
    • numa=noacpi (не учитывать таблицу SRAT)
    • numa=fake=параметры (имитировать требуемую конфигурацию NUMA, см. fake-numa-for-cpusets)
    • numa=hotadd=процент (что такое hotadd память?)
    • cpumap - битовая карта ЦП узла
    • distance - список (по числу узлов) относительной "стоимости" обращения ЦП данного узла к памяти каждого узла
    • meminfo - разнообразная статистика наличия и использования памяти
    • numastat - количество попаданий и промахов запросов к памяти в свой узел
    • cpuX/ - ссылка на описание каждого процессора узла
    • cpus - список номеров ЦП и интервалов
    • mems - список узлов памяти и интервалов
    • memory_migrate - перемещать страницы памяти в разрешённые узлы при изменении настроек и перемещении процессов
    • cpu_exclusive - список ЦП является исключительным
    • mem_exclusive - список узлов памяти является исключительным
    • mem_hardwall - ядро не будет размещать здесь общие данные (с 2.6.26, ранее функциональность включалась при mem_exclusive=1)
    • memory_pressure - уровень обмена страниц внутри набора (paging pressure rate), может учитываться пакетным планировщиком, выражается в запросах в секунду за последние 10 секунд на 1000
    • memory_pressure_enabled - включает вычисление memory_pressure, представлен только для корневого набора
    • memory_spread_page - разрешить размещать буфера файловой системы (page cache) для процессов из набора по всем допустимым узлам вместо узла, на котором процесс выполняется
    • memory_spread_slab - разрешить размещать буфера slab (каталоги и inode) для процессов из набора по всем допустимым узлам вместо узла, на котором процесс выполняется
    • notify_on_release - запуск программы /sbin/cpuset_release_agent при завершении последнего процесса набора
    • sched_load_balance - планировщик будет использовать алгоритм балансировки нагрузки; включён по умолчанию, все ЦП должны быть в едином домене балансировки у планировщика заданий (с 2.6.24)
    • sched_relax_domain_level - интервал поиска перегруженного ЦП для миграции процесса на себя, если наша очередь задач пуста (-1: использовать системные установки, 0: не искать, 1: внутри HT, 2: ядра внутри пакета, 3: внутри узла, 4 - ?, 5 - по всей системе )(с 2.6.26, но в RHEL 5.3 есть)
    • tasks - список процессов, привязанных к набору (по одному на строке), сюда надо вписать номер процесса (по одному на строке), который нужно привязать к данному набору; для удаления процесса впишите его номер в верхний набор

    После переноса задачи tasks включающего набора вся информация меняется (/dev/cpuset/. /tasks, /proc/. /cpuset), но планировщик продолжает придерживать процесс на старом наборе ЦП (RHEL 5.4) .

    /proc/номер-процесса/status содержит новые строки о допустимых ЦП и узлах памяти.

    /proc/номер-процесса/cpuset содержит имя набора cpuset.

    /proc/номер-процесса/numa_maps рассказывает о каждом сегменте памяти: начальный адрес (конечный в maps), политику выделения памяти, тип (anon, heap, stack, file=имя), сколько страниц выделено из каждого узла NUMA-памяти.

    Пакеты numactl и numactrl-devel содержат утилиты и библиотеки более высокого уровня, чем системные вызовы. Утилита numastat выдаёт для каждого узла памяти статистику о использовании её для "своих" и "чужих" ЦП. Утилита memhog предназначена для тестирования производительности различных режимов использования памяти. Утилита migratepages плозволяет переместить содержимое страниц памяти с одного узла на другой. Утилита numademo позволяет протестировать производительность сочетаний свой/чужой для различных узлов памяти; демонстрирует расхождение в пропускной способности памяти в 1.5 раза для систем с использованием QPI/HT при правильном и неправильном распределении процессов по ЦП и узлам памяти (перепутаны Min и Max?):

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

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

    Разгон процессора в Linux

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

    Есть предел напряжения, которое может выдержать ваш процессор, перед тем, как появится угроза его разрушения. При слишком большом напряжении компьютер может вовсе не загрузиться. Это напряжение и есть пределом разгона. Здесь подходит видоизмененная пословица: "Все чипы выпускаются равными, но некоторые большее равны чем другие". Каждый процессор уникален, вам может повести и именно ваш компонент будет поддерживать большую частоту работы. Потенциал процессора может варьироваться от 0,2 ГГц до 1 ГГц.

    Допустим, что у вас есть хороший куллер для охлаждения вашего процессора, процессор поддерживает разгон, а к таким относятся серия K и X от Intel и все процессоры от AMD, а также вы знаете как попасть в меню настройки BIOS.

    Этап первый - проверка системы

    Перед тем как переходить к настройке BIOS и реальному разгону процессора нужно убедиться, что ваша система имеет хорошее охлаждение и работает достаточно стабильно. Для этого нам нужно протестировать температуру процессора при максимальной нагрузке. В Linux используется набор программ lm_sensors для просмотра текущей температуры.

    Сначала нужно установить этот пакет утилит, если он еще не установлен в вашей системе. В Ubuntu для этого используйте команду:

    sudo apt install lm_sensors

    Затем используйте утилиту sensors для просмотра текущей температуры оборудования. Обычно, кроме процессора, отображается температура видеокарты, оперативной памяти и так далее. Но в нашем случае отображается только температура для обоих ядер:

    Как видите, тут кроме текущей температуры, показана максимальная температура и критическая. Но сейчас мы смотрим температуру в обычном режиме, теперь нужно проверить ее при максимальной нагрузке. Для этого будем использовать утилиту stress. Ее можно установить в Ubuntu с помощью команды:

    sudo apt install stress

    Затем создаем нагрузку на процессор, например, в 16 потоков:


    И снова смотрим температуру:


    Только теперь вы можете оценить насколько хорошо справляется ваше охлаждение и действительно ли есть возможность разгонять процессор. Если система уже достигла максимальной температуры и приближается к критической, то понятно, что перед разгоном нужно позаботиться про охлаждение. В противном случае вы можете переходить к дальнейшем действиям.

    Этап второй - настройка BIOS

    Этот шаг отвечает непосредственно за разгон процессора. Перезагрузите ваш компьютер и войдите в BIOS. Настройка разгона отличается от версии BIOS, процессора и производителя. Мы рассмотрим разгон процессора AMD Athlon в BIOS от ASUS.

    Во множестве материнских плат, в том числе и в этой есть возможность автоматического разгона процессора на определенный, безопасный процент. Так вы можете дать материнской плате сделать большинство работы за себя. Мой процессор работает по умолчанию с частотой 3.0 ГГц, На вкладке "Andvanced" есть раздел "Config JumperFree" здесь вы можете настроить вручную частоту и напряжение, а также задать профиль разгона.

    Например, для пункта "AI Overclock Tuner" задайте значение "Overclock profile", если хотите использовать один из настроенных по умолчанию профилей. Затем для параметра Overclock Options нужно выбрать профиль разгона. Для у этой материнской платы доступен максимальный разгона на 10%:


    Таким образом, для процессора на 3.0 ГГц мы получим частоту 3.3 ГГц.


    Если же вы хотите настраивать напряжение вручную, вам придется обратиться к документации процессора. Установите значение Overclock profile в manual, изменять множители частоты. Для применения изменений нужно перезагрузить компьютер. В материнских платах в UEFI все может немного отличаться, но суть будет одна и та же, там будет пункт, позволяющий разогнать процессор.

    Этап третий - повышение множителя частоты

    Допустим, вы уже включили нужный профиль разгона или настроили вручную множитель для напряжения или частоты. Но нельзя сразу выставлять слишком высокий параметр, нужно сначала посмотреть как будет работать система с тем, что имеется. Перезагрузите компьютер и загрузитесь в операционную систему.

    В Linux есть такая неприятная для разгона особенность, как cpufreq, эта технология меняет частоту в зависимости от нагрузки на систему поэтому вы не сможете получить максимальную частоту пока установлен профиль энергосбережения. Прежде всего, нам нужно установить профиль максимальной производительности - perfomance. Сначала устанавливает утилиту cpufrequtils если она еще не установлена:

    sudo apt install cpufrequtils

    Затем, с помощью конфигурационного файла, меняем профиль регулировки частоты по умолчанию на максимальную производительность. Это можно сделать с помощью команды:

    sudo cpupower frequency-set -g performance


    sudo vi /usr/lib/systemd/system/cpupower.service

    ExecStart=/usr/bin/cpupower -c all frequency-set -g performance

    Дальше вы можете проверить результат своих действий с помощью команды:

    Вы должны увидеть, что активный профиль - perfomance. Посмотреть текущую частоту вы можете с помощью утилиты hwinfo:

    hwinfo --cpu | grep Clock


    Дальше нам нужно повторить тест температуры процессора при максимальной нагрузке. Как это делается смотрите выше. Если все хорошо и система стабильно работает на протяжении 5 минут, вы можете попытаться еще увеличить множитель.

    Возможно, вы захотите контролировать изменение частоты во время теста stress, тогда можно использовать утилиту watch с интервалом в полсекунды:

    watch -n 0,5 "hwinfo --cpu | grep Clock"

    Чтобы обнаружить придел, увеличивайте множитель на единицу и повторяйте тестирование. Повторяйте такой процесс пока ваш компьютер либо совсем не загрузится, либо температура будет превышать максимальную. Но разгон процессора Linux еще незавершен.

    Этап четвертый - повышение напряжения

    Если ваш компьютер перестал включаться после повышения частоты до определенного предела или вы получаете Kernel Panic, то пришло время повысить напряжение. Увеличивайте напряжение на 0,1 или на 0,05 пока компьютер не будет нормально загружаться и стабильно работать. Вам нужно быть очень аккуратными с напряжением Vcore. Если вы примените слишком высокое напряжение, то можете сжечь свой процессор. Но делать это обязательно, если вы хотите разогнать компьютер, иначе вы никак не сможете понять как процессор реагирует на то или иное напряжение.

    Дальше вы снова можете продолжать повышение множителя частоты. Но рано или поздно вы достигните момента, когда не сможете получить желаемую частоту даже после увеличения напряжения. Тогда верните множитель на предыдущее значение и уменьшите напряжение до предыдущего пункта. Это и будет ваш разгон процессора Linux.

    Этап пятый - финальное тестирование

    Теперь, когда разгон процессора amd или intel завершен, вам нужно его протестировать. Во первых, проведите еще раз тестирование, которое мы делали перед тем, как перейти к разгону. Вам нужно увидеть как хорошо процессор справляется со своей задачей при максимальной нагрузке и не нужно ли улучшить охлаждение. Посмотреть текущую частоту, до которой вам удалось разогнать процессор можно с помощью утилиты hwinfo:

    hwinfo --cpu | grep Clock

    Для процессоров Intel вы можете применять программу от производителя - i7z, которая позволяет просмотреть текущую частоту и температуру.

    Этот пакет есть в официальных репозиториях. Также понаблюдайте за работой компьютера в течение одного двух-дней. Присмотрите как меняется температура и не наблюдается ли лагов в работе компьютера. Только после всего этого вы можете наслаждаться максимально раскрытым потенциалом вашей машины.

    Выводы

    В этой статье мы рассмотрели как выполнить разгон процессора bios в linux, до максимальной производительности. Но вы должны знать, что разработчики намеренно уменьшают частоту не из жадности. Это делается потому что при увеличении частоты компьютер может начать работать нестабильно, а во-вторых процессор будет намного быстрее изнашиваться. Все очень сильно зависит даже не от конкретной модели, а именно от определенного изделия. Все процессоры разные, и имеют разный потенциал. Возможности своего устройства вы сможете узнать только экспериментально.

    Intel рекомендует следующие установки для включения согласованности измерений производительности в дистрибутивах Linux*, поддерживаемых программным обеспечением хоста инфраструктуры Intel® Omni-Path.

    irqbalance

    Основной целью irqbalance является распределение аппаратных прерываний по процессорам в системе со множеством процессоров для увеличения производительности. Вы устанавливаете --hintpolicy в exact для работы с алгоритмами Receive и SDMA в своём драйвере HFI1.

    Для реализации необходимых установок irqbalance осуществите следующие шаги:

    Установите пакет irqbalance , если он ещё не установлен.

    В файл /etc/sysconfig/irqbalance добавьте следующую строку:

    После загрузки драйвера HFI1 перезапустите свою службу irqbalance :

    Драйверы масштабирования частоты ЦПУ

    Методы сбережения энергопотребления в ЦПУ могут оказывать обратное воздействие на производительность. ЦПУ снижает энергопотребление путём уменьшения своей тактовой частоты на основании устойчивого запроса и тепловых условий. Это может приводить к значительной экономии электроэнергии и требований по охлаждению, однако это может снизить значение производительности или сделать её измерения более изменчивыми. Термические условия процессора плохо предсказуемы, что влечёт за собой изменения в производительности ЦПУ при различных запусках.

    Устанавливаемым по умолчанию драйвером в RHEL* 7.x является драйвер Intel P-State ( intel_pstate ). Также доступен альтернативный драйвер с названием Advanced Configuration and Power Interface (ACPI) CPUfreq ( acpi_cpufreq ). Каждый из них имеет свои преимущества и недостатки, но в любой момент времени может быть доступен только один из них. В данном разделе мы как применять каждый из них для согласованных измерений наилучших показателей производительности. Установка вашего драйвера масштабирования частоты предлагается выполнять в процессе подъёма кластера/ инфраструктуры для того чтобы определить что все компоненты вашего кластера работают в свою полную мощность.

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

    Применение драйвера Intel P-State

    Драйвер Intel P-State является определяемым по умолчанию для RHEL* 7.x, поэтому не требуются никакие дополнительные установки. Этот драйвер рекомендуется применять при использовании процессоров Intel® Xeon Phi™, а такж им можно пользоваться и с процессорами Intel® Xeon®.

    Если вы ранее запретили свой драйвер P-state, вам следует его повторно включить.

    Для повторного разрешения вашего драйвера P-state:

    В /etc/default/grub удалите intel_pstate=disable из командной строки GRUB_CMDLINE_LINUX .

    Примените это изменение воспользовавшись:

    Чтобы ваш ЦПУ работал на своей максимальной частоте без турбирования (P1) и без масштабирования на более низкие частоты, пользуясь полномочиями root установите значение минимума частоты в 100% как это показано ниже:

    Для работы вашего ЦПУ на его максимальной турбированной частоте настройте в своём BIOS следующие значения:

    Установите Intel® Turbo Boost Technology > Enabled .

    Если это имеется в вашем BIOS, установите Advanced > Advanced Power Management Configuration > CPU P State Control > Turbo Mode .

    Настройте echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo .

    Установите политику cpufreq в значение "Производительный": cpupower frequency-set -g performance .

    Для получение информации о драйвере частоы ЦПУ и прочей информации о частоте воспользуйтесь следующей командой:

    Применение драйвера ACPI CPUfreq и управляющего устройства cpupower

    Если вы удовлетворены с поведением вашей системы при использовании драйвера Intel® P-State вам нет нужды устанавливать драйвер acpi_cpufreq.

    Этот драйвер ACPI CPUfreq (acpi_cpufreq) совместно с cpupower может применяться для установки устойчивой тактовой частоты ЦПУ на всех ядрах ЦПУ.

    Чтобы включить такой драйвер ACPI CPUfreq:

    Запретите intel_pstate в командной строке своего ядра: измените /etc/default/grub добавив intel_pstate=disable в GRUB_CMDLINE_LINUX . Например:

    Примените это изменение для использования:

    После того как система вернётся в рабочее состояние с отключённым intel_pstate , загрузится драйвер acpi_cpufreq.

    Для снижения изменений производительности при различных запусках Intel рекомендует вам установить определённое значение тактовой частоты своего ЦПУ и применять его для настройки значения Performance вашего устройства управления (governor) энергопотреблением ЦПУ.

    Для настройки тактовой частоты ЦПУ и устройства управления энергопотреблением:

    Установите значения тактовой частоты и устройства управления, воспользовавшись приведённой ниже командной строкой:

    Где <value> является допустимым числом единиц (ГГц) для установок минимального и максимального значений. Отметим, что это значение может быть одним и тем же.

    Например, следующая команда установит значение частот всех ядер в величину 2.3 ГГц и для установки Performance устройства управления в случае применения драйвера acpi-cpufreq.

    При использовании указанной выше схемы электропитания экономия энергии снизится, а выделение тепла увеличится.

    Для получения максимальных преимуществ от режима Turbo:

    Убедитесь, что режим Turbo включён в вашем BIOS (как это рекомендуется в Установках BIOS).

    Установите значение частоты с завершающим "01" в конце величины для тактовой частоты. Это включит все имеющиеся преимущества Turbo.

    К примеру, если вы применяете процессор Intel® Xeon® E5-2699 v3 (с номиналом тактовой частоты 2.3ГГц), то соответствующие параметры в вашей команде должны быть следующими:

    Переключение на драйвер Intel P-State для исполнения определённых инструментов FastFabric

    Некоторые предоставляемые Intel инструменты требуют применения соответствующего драйвера Intel P-State вместо драйвера acpi_cpufreq. Например, инструментарий hostverify.sh отказывает при работе RHEL* 6.7 если драйвер Intel P-State не установлен в качестве применяемого по умолчанию драйвера cpufreq.

    Если вы применяете драйвер acpi_cpufreq, воспользуйтесь одним из следующих методов для переключения на драйвер Intel P-State чтобы возпользоваться необходимым целевым инструментом.

    Временное переключение на драйвер Intel P-State

    Для временного переключения на драйвер Intel P-state осуществите следующие шаги:

    Проверьте что установлен пакет cpupowerutils .

    Убедитесь присутствует активным ли какой из драйверов cpufreq .

    Выгрузите иной драйвер ядра cpufreq (если это требуется):

    Загрузите драйвер intel_pstate .

    Установите cpufreq устройства управления (governor) в значение "Ghjbpdjlbntkmysq".

    После применения hostverify.sh или прочих инструментов, для которых необходима установка Intel P-state вы можете выполнить перезагрузку чтобы вернуть свой драйвер acpi_cpufreq.

    Загрузка драйвера Intel P-State в момент загрузки системы

    Для загрузки драйвера Intel P-State в момент начальной загрузки системы выполните следующие действия:

    Создайте файл сценария /etc/sysconfig/modules/intel_pstate.modules и добавьтне в него приводимый ниже текст:

    Для приведённого выше файла добавьте полномочия на его исполнение.

    Перегрузите свою систему чтобы выполненные изменения вступили в действие.

    Убедитесь что драйвер Intel P-state загружен.

    Установите пакет cpupowerutils если он ещё не установлен.

    Установите значение cpufreq устройства управления (governor) в значение "Производительный".

    Для повторного включения драйвера acpi_cpufreq осуществите следующее:

    Запретите intel_pstate в командной строке вашего ядра:

    Измените /etc/default/grub , добавив intel_pstate=disable в GRUB_CMDLINE_LINUX . Например:

    Примените произведённые изменения для их использования:

    Когда ваша система вернётся в рабочее состояние с отключённым intel_pstate , загрузится драйвер acpi_cpufreq.

    Не включайте intel_iommu

    Настройка intel_iommu=on в командной строке вашего ядра может вредить производительности глаголов и MPI. Порой intel_iommu необходим если вы исполняете приложения из какой- то виртуальной машины (ВМ). При обычных приложениях Высокопроизводительных вычислений вы не применяете ВС, таким образом, intel_iommu не установлен.

    Для удаления intel_iommu из вашего файла grub:

    Переместитесь в файл /etc/default/grub .

    Удалите intel_iommu=on из командной строки вашего ядра.

    Прозрачность Huge Pages

    Если такое значение по умолчанию установлено, следующий файл должен отобразить такой вывод:

    Tckb значение "всегда" (always) не установлено во всех узлах, вы можете настроить его воспользовавшись следующей командой:

    Обработка фрагментации памяти

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

    Администраторы кластера/ системы могут предпринять шаги в отношении проблемы фрагментации памяти, как это описано ниже. Отметим, что пользователи не будут способны применить свои установки пока их системный администраторы не предпримут своих шагов первыми.

    Настройки системного администратора

    Включите THP в значение "Всегда" (always) как и для Прозрачность Huge Pages.

    В качестве альтернативы THP зарезервируйте huge pages с помощью записей sysfs nr_hugepages или nr_overcommit_hugepages .

    Для пущей гарантии того, что ваша система будет выделять для своих заданий страницы по 2M, настройте значение систему подачи заданий на сброс своих кэшей и уплотнение памяти перед каждым заданием пользователя при помощи следующих команд:

    Установка меньшего числа Контекстов пользователя с помощью параметра num_user_contexts может выделить большее число дескрипторов TID для каждого контекста, что может лучше работать с фрагментированной памятью. Обратитесь к Тюнинг производительности MPI в узлах с продуктами семейства Intel® Xeon Phi™ x200 второго шага по руководству относительно данного параметра драйвера hfi1.

    Настройки пользователя

    Ниже приводятся установки, осуществляемые пользователями

    Допустим, что ваш системный администратор включил THP (как это описано в п.1 предыдущего раздела), тогда сам пользователь может выравнивать буферы MPI большего размера на границы в 2M и наполнять общий размер кратным 2M.

    Вы можете воспользоваться posix_memalign или _mm_malloc Intel чтобы вызвать попытку выделения со стороны ОС страниц по 2 МБ.

    В предположении что ваш системный администратор разрешил альтернативу THP (описанную в п.2 предыдущего раздела), сам пользователь может в явном виде выделять huge pages при помощи mmap , malloc Intel® Threading Building Blocks (TBB) с TBB_MALLOC_USE_HUGE_PAGES=1 , или через libhugetlbfs .

    Я пытаюсь установить регулятор производительности процессора в 18.04, проблема в том, что он никогда не переживает перезагрузки.

    Я попытался выполнить следующие действия в ответе на этот вопрос. Как установить "Производительность" вместо "Powersave" по умолчанию? но когда я перезагружаю компьютер, процессор переходит в режим энергосбережения.

    Я также попытался создать файл с именем /etc/rc.local с линией:

    Это также не переживает перезагрузки.

    Как я могу это сделать?

    В /etc/rc.local вставьте эти команды:

    Через 1 минуту после загрузки автоматический переход на Powersave

    По каким-либо причинам мой процессор Intel Skylake всегда запускается в режиме Performance, а затем автоматически переключается в режим Powersave с отметкой в ​​1 минуту.

    Если вы установите режим Performance при запуске, он будет переопределен около 1 минуты метки Up Time в режим Powersave.

    В GIF ниже частота процессора 3000+ МГц при запуске отображается в верхней части. Время срабатывания появляется около дна. Когда время работы достигнет 1 минуты, вы увидите, что частота процессора падает.:

    Программа для отслеживания точной второй активации Powersave

    Создать этот скрипт в /usr/local/bin/watch-gov.sh :

    Вызовите сценарий в /etc/rc.local перед exit 0 команда (подробно объясняется ниже).

    Через минуту после входа в систему посмотрите на вывод:

    Подтверждение из этого ответа гласит, что эта минутная сила powersave губернатор контролируется /etc/init.d/ondemand ,

    Выдержите 120 секунд перед установкой режима производительности

    Самый простой способ остаться в режиме Performance - это отредактировать /etc/rc.local и вставьте эти строки перед последней строкой, содержащей exit 0 :

    Сохраните файл и перезагрузитесь.

    Если вы вставите новые строки после exit 0 это никогда не будет выполнено.

    Предостережения

    Ваша машина, вероятно, будет работать на 10-15 градусов выше.

    Возможно, вам придется удалить другие программы, которые изменяют частоту процессора, если они переопределяют ваши настройки производительности в /etc/rc.local

    Я использовал файл /etc/rc.local.

    Чтобы помочь вам найти ваши пути, используйте:

    Это работает для моей настройки, но вам просто нужно отредактировать его для вашей настройки

    Я добавил в /etc/rc.local используя nano:

    прямо под линией Шебанга. Закройте nano с помощью Ctrl-X и Y, чтобы сохранить

    Затем для 18.04 (может не работать 16.04) в командной строке запустите:

    Затем в командной строке прочитайте /etc/rc.local и перезагрузите компьютер:

    если /etc/rc.local дроссели и ошибки, то убедитесь, что это chmod +x /etc/rc.local

    Я использую этот скрипт для установки performance губернатор:

    Make исполняемый chmod +x cpu.sh и запускайте в любое время, когда вам нужно (сразу после каждого запуска / перезагрузки компьютера).

    Простой скрипт для переключения между энергосберегающим режимом и режимом производительности. Вы можете попробовать с любым из wrmsr, комментируя один в сценарии ниже. Не знаю почему, но запись 0 для регистрации сработала для меня.

    Конфигурации ядра Ubuntu по умолчанию таковы, что при загрузке будет использоваться регулятор масштабирования частоты процессора. Соответствующий раздел файла конфигурации ядра ( /boot/config-4.15.0-36-generic в этом примере)

    Но также по умолчанию во время загрузки ondemand услуга выполнена. Он спит в течение 1 минуты, а затем меняет регулятор масштабирования на interactive , ondemand или же powersave в зависимости от наличия. В свою очередь доступность зависит от того, какой драйвер масштабирования частоты процессора вы используете. Код (в нескольких местах, поиск ondemand ):

    Почему он называется "ondemand", но он устанавливает другие регуляторы (например, с помощью драйвера intel_pstate он устанавливает регулятор powersave)? Поскольку этот инструмент предшествовал драйверу intel_pstate, еще до того времени, когда доминирующим драйвером масштабирования частоты был драйвер acpi-cpufreq, а "ondemand" был предпочтительным регулятором по умолчанию в Ubuntu.

    Таким образом, один из способов загрузки и использования регулятора масштабирования частоты процессора - отключение службы, которая отличается от нее (что также упоминалось в другом ответе):

    перезагрузите компьютер, затем проверьте снова (обязательно подождите минуту после перезагрузки):

    Примечание: примеры в этом ответе взяты с компьютера, который использует драйвер масштабирования частоты процессора acpi-cpufreq. Если вы используете драйвер intel_pstate без регулятора по умолчанию, по умолчанию будет использоваться регулятор powersave.

    Ожидаемый вопрос: почему частоты моего процессора масштабируются даже при использовании регулятора производительности?

    Ответ: Современные процессоры масштабируют частоту процессора даже в режиме производительности и в зависимости от глубины состояния простоя, в которое они переходят. Если вы действительно хотите заблокировать частоту ЦП, отключите все состояния простоя глубже, чем 0. Однако учтите, что это будет стоить огромного количества энергии.

    Лично, как уже упоминалось в другом ответе, я использую регулятор производительности или регулятор энергосбережения в зависимости от того, какую работу я выполняю. Мои сценарии немного отличаются:

    Читайте также: