- Управление частотой процессора ноутбука в Linux
- Как делаю это я?
- Комментарии
- Регулировка частоты процессора с помощью cpufreq-applet в Ubuntu
- Несколько рекомендаций по активированию регулировки частоты процессора в Ubuntu:
- Немного теории
- Изменить частоту процессора linux
- Bog BOS: Процессоры в Linux: информация и управление
Управление частотой процессора ноутбука в Linux
Уже давно стал замечать, что если смотреть видеоролики в интернете на нетбуке с процессором Intel Atom, они немного подтормаживают. Покопавшись в логах понял, что в это самое время загрузка процессора идет на 100%, а состояние процессора почему-то остается в режиме «энергосбережение». То ли всему виной операционная система Linux, то ли сам Atom так себя ведет, непонятно.
Единственным решением, которое я увидел, это самостоятельно управлять режимами работы процессора, благо cpufrequtils – это позволяет делать.
В большинстве случаев у Вас уже должна стоять утилита cpufrequtils, но на всякий случай исполняем команду установки этого дела:
В cpufrequtils есть несколько готовых шаблонов работы процессора:
- performance – максимальное быстродействие;
- powersave – режим энергосбережения;
- ondemand – автоматический режим, при котором происходит изменение частоты процессора в зависимости от нагрузки (этот режим стоит по умолчанию);
- conservative – тоже самое как и ondemand, но менее агрессивно.
Возможно, есть где-нибудь в закоулках сайта Intel специальный модуль для ядра Linux, чтобы мой процессор умно переключал эти режимы, но искать мне его лень. Если кто-нибудь это уже делал, то было бы неплохо об этом рассказать в комментариях. Лично я просто вручную переключаю эти режимы консольными командами.
Вот, к примеру, если нужно переключить процессор в максимальное быстродействие:
Если в режим энергосбережения, то эта команда:
Как делаю это я?
Так как у моего процессора 4 ядра, то делаю я это так:
быстродействие:
Из этих двух команд я создал 2 скрипта и «повешал» на сочетание клавиш Ctrl F9 . Теперь в зависимости от потребностей я могу легко менять частоту процессора.
P.S. Для того, чтобы при переключении не выскакивала консоль (терминал) необходимо вместо sudo использовать gksudo. Это графический интерфейс для ввода пароля.
Комментарии
И че, видать результат?! А как это понять?! Если включен режим энергосбережения тогда CPU почему до 100%? Мне кажется это все такое самовнушение. Прошу вас ответить увидели ли вы положительный результат от вкл выкл данного режима?!
Конечно есть. Производительность, как и шум вентилятора стали максимальны 😉
Посмотреть текущую работу процессора можно командой cpufreq-info
Балин, тоже счастливый обладатель подобного недоноута, в настоящее время использую его как роутер 🙂 Статья полезная попробуем применить на практике.
- Денис Юрьевич прокомментировал MultiKey не устанавливается, отозван сертификат
- Павел Urman прокомментировал Как закрыть крышку часов Tissot?
- AdminWay прокомментировал kernel_task грузит проц на 100% на MacOS BigSur
- Лев прокомментировал kernel_task грузит проц на 100% на MacOS BigSur
- AdminWay прокомментировал kernel_task грузит проц на 100% на MacOS BigSur
Почему FTP может портить файлы?
Зарядка для айтишника или профилактика шейного остеохондроза
Если Вы используете материал моего блога, то будьте добры поставьте ссылку.
Источник
Регулировка частоты процессора с помощью cpufreq-applet в Ubuntu
Для нетбуков и ноутбуков актуальной проблемой является автоматическая регулировка частоты центрального процессора, которая позволяет экономить заряд батареи и уменьшать шум от работы системы охлаждения. За это все в Linux отвечает пакет-демон cpufreq. Для управления этим демоном придуман графический апплет в Gnome: Монитор изменения частоты процессора, который позволяет с легкостью менять частоту процессора на предустановленные производителем режимы и менять профили управления питанием: быстродействие, сохранение энергии, автоматическая регулировка и т.д.
Несколько рекомендаций по активированию регулировки частоты процессора в Ubuntu:
- Ваш процессор должен поддерживать функцию CPU Frequency scaling. Чтобы проверить это, нужно установить пакет acpitool:
Немного теории
При соблюдении всех правил у Вас добавиться возможность, при необходимости, самостоятельно регулировать частоту процессора. Вручную задать частоту процессора не получиться. Производитель каждой железяки самостоятельно решает на каких частотах может работать его устройство. К примеру, в нетбуке Samsung N140 предусмотрены рабочие частоты: 1.67GHz, 1.33GHz и 1GHz. Так же можно выбирать профили работы процессора:
- Conservative — частота процессора регулируется автоматически в зависимости от нагрузки на процессор. Регулирование частоты происходит плавно, что сказывается благоприятнее на долговечность аккумуляторной батареи в плане срока службы, откладывая немного подальше покупку новой батареи.
- Ondemand — регулирование частоты происходит автоматически в зависимости от ресурсоемкости запущенных приложений. Этот профиль выбран по умолчанию при загрузке ОС.
- Performance — процессор работает постоянно на максимальной частоте.
- Powersave — режим максимального энергосбережения и за счет этого низкий уровень шума.
Знакомые недавно ездили заграницу отдыхать. Точнее, в Европу. Говорят, что отдых в Хорватии осенью — это просто нечто. Этот отдых богат на впечатления, но координально отличается от привычной пляжной Турции. Я нигде не был, но очень хочу побывать хоть где-нибудь, дальше чем Россия.
Источник
Изменить частоту процессора linux
Здравствуйте!
Меня зовут Михаил Усик!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.
Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!!
Управление частотой процессора бывает актуально довольно часто.
Для управления частотой процессора нужно установить пакет cpufrequtils.
При установке пакета cpufrequtils в /etc/init.d/ добавляются скрипты loadcpufreq и cpufrequtils.
Скрипт loadcpufreq определяет по типу процессора и загружает необходимые модули ядра для управления частотой процессора.
Скрипт cpufrequtils устанавливает политику управления частотой процессора (governors policy).
Доступны несколько политик управления частотой (governors policy):
performance — устанавливает постоянную максимально возможную частоту процессора
powersave — устанавливает постоянную минимально возможную частоту процессора
ondemand — устанавливает частоту процессора динамически в зависимости от текущей нагрузки (подходит для десктопов)
conservative — аналогично ondemand, динамически устанавливает частоту процессора в зависимости от нагрузки, но делает это менее агрессивно (подходит для ноутбуков)
Сразу после установки пакета чтобы активировать управление частотой процессора нужно выполнить в командной строке:
По умолчанию используется политика ondemand. Для изменения политики по умолчанию нужно отредактировать строку GOVERNOR=“ondemand” в скрипте /etc/init.d/cpufrequtils, вписав вместо ondemand желаемую политику.
На моей системе автоматически создался еще один скрипт — /etc/init.d/ondemand. В нем прописано включение режима ondemand. Так что править нужно и его. Или просто отключать.
Посмотреть текущую частоту процессора и используемую политику управления частотой можно выполнив в командной строке:
Вывод команды cpufreq-info также покажет доступные политики управления частотой (governors policy), используемый драйвер (модуль ядра), доступный шаг изменения частоты процессора, аппаратные ограничения на изменение частоты процессора.
Для того чтобы изменить политику, например на conservative, можно также воспользоваться утилитой cpufreq-set, выполнив:
Источник
Bog BOS: Процессоры в Linux: информация и управление
В статье описываются используемые в Linux методы получения информации об используемом процессоре и его состоянии (температура, частота, задушенность), управление частотой процессора, загрузка микрокода, модули msr и cpuid, привязка процесса и обработчика прерывания к конкретному процессору (ядру), особенности работы NUMA.
Начальную информацию о процессоре можно получить с помощью команды dmesg:
Далее необходимо заглянуть в /proc/cpuinfo:
Более подробную (400 строк) информацию можно получить с помощью команды x86info (ключи: -a -v).
Команда cpuid возвращает 4 полубайта (одному cpuid может соответствовать множество процессоров, имеющих различные sSpec# и Order Code):
- type (всегда 0?)
- family (15 — NetBirst, 6 — Core)
- model
- stepping
А также через DMI интерфейс: «dmidecode -t 4» (собственно процессор) и «dmidecode -t 7» (кеш).
Параметры кешей (cat /sys/devices/system/cpu/cpuX/cache/indexY/параметр):
- type — Data, Instruction, Unified
- level — L1, L2, L3
- size
- ways_of_associativity
- shared_cpu_map — битовая карта ЦП, которые разделяют данный кеш
- coherency_line_size — ?
- number_of_sets — ?
- physical_line_partition — ?
Топология (cat /sys/devices/system/cpu/cpuX/topology/параметр):
- 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) и параметры для него.
Все параметры системы управления частотой находятся в каталоге /sys/devices/system/cpu/cpu0/cpufreq:
- 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 (для установки частоты записать сюда значение, в КГц)
Модули управления частотой для различных архитектур (вставить загрузку нужного в /etc/rc.d/rc.local; неподходящий модуль откажется загружаться):
- acpi-cpufreq (изменение состояния процессора средствами ACPI (P-States Driver); его работа мне не понравилась и я вставил в rc.local его выгрузку, но может быть вам достались более правильные таблицы ACPI)
- p4-clockmod (у меня Celeron M, при загрузке модуля выдаётся сообщение об обнаружении Pentium M и совет использовать модуль speedstep-centrino, но это неправильный совет, т.к. во-первых, он встроен в ядро, во-вторых, не работает с моей моделью Celeron M); отсутствует для архитектуры x86-64
- speedstep-centrino (Pentium M, встроен в ядро)
- speedstep-ich (Pentium III-M, P4-M, ICH2/ICH3/ICH4)
- speedstep-smi (Pentium III-M, 440 BX/ZX/MX)
- powernow-k6
- powernow-k7
- powernow-k8
- cpufreq-nforce2 (позволяет менять FSB независимо от частоты PCI/AGP)
- intel_pstate (встроен в ядро CentOS 7) Intel P-State, не поддерживает cpufreq-stats и boost
- pcc-cpufreq (Processor Clocking Control, HP) — управление потребляемой мощностью (power capping)?
Регуляторы (вставить загрузку нужных в /etc/rc.d/rc.local, если не встроены в ядро):
- 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; сколько интервалов пониженной нагрузки выжидать перед понижением частоты процессора)
- conservative (модуль cpufreq_conservative, частота процессора устанавливается в зависимости от нагрузки, но более плавно, чем ondemand), управляющие параметры в подкаталоге conservative те же, что и для ondemand со следующими дополнениями:
- freq_step (5% от максимально возможной частоты процессора; шаг изменения частоты процессора; значение 100 даёт поведение эквивалентное поведению регулятора ondemand)
- down_threshold (20%; при какой нагрузке в интервале между опросами уменьшать частоту процессора)
Модуль cpufreq-stats (вставить загрузку в /etc/rc.d/rc.local) собирает и выдаёт статистику изменения частоты и напряжения процессора в подкаталоге stats:
- 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).
Пакет cpufreq-utils (потянул sysfsutils) содержит утилиты centrino-decode (декодирует информацию о напряжении питания процессора и соотношении частот процессора и системной шины, требуется модуль msr), dump_psb (информация о возможных частотах процессора из PSB (AMD?)), cpufreq-info (та же самая информация, которая доступна через /sys/devices/system/cpu/cpu0/cpufreq, но с ключом «-m» она выдаётся в человеколюбивом формате) и cpufreq-set (позволяет устанавливать регулятор и частоту не набирая длинных имён файлов в /sys). Ключи cpufreq-set (по умолчанию, частота в килогерцах, но можно указывать суффикс без пробела: kHz, Hz, MHz, GHz):
- —cpu номер-процессора
- —min минимальная-частота-для-регулятора
- —max максимальная-частота-для-регулятора
- —governor регулятор
- —freq частота (только для регулятора userspace)
cpuspeed — демон (скрипт запуска — /etc/rc.d/init.d/cpuspeed; файл настройки — /etc/cpuspeed.conf, /etc/sysconfig/cpuspeed), изменяющий частоту процессора в зависимости от нагрузки, температуры и источника питания. Под нагрузкой понимается доля времени, проводимое процессором в состоянии idle. Сигналы:
- USR1 — установить максимальную скорость
- USR2 — установить минимальную скорость
gkrellm имеет встраиваемый модуль gkrellm-freq, позволяющий узнать текущее значение текущее значение частоты процессора.
Модуль intel_pstate (Intel P-state для SandyBridge+ Intel, встроен в ядро в CentOS7) имеет ручки управления:
- /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 — понижение напряжения и частоты.
Получение информации о текущем состоянии
Особенностью процессоров Intel семейства Nehalem (например, Xeon 5560) является возможность автоматического увеличения реальной частоты работы ядра сверх номинального при соблюдения температурного режима работы (на 1 или 2 или 3 ступени частоты в зависимости от модели и текущей загрузки; по слухам для Xeon 5560 — 3-3-2-2; на тесте «openssl speed» у меня получилось одинаковое ускорение около 10% при любом количестве потоков). Наличие возможности определяется ключом ida в /proc/cpuinfo. Действие Turbo Boost не проявляется при визуализации текущей частоты (/sys/devices/system/cpu/cpuX/cpufreq). Необходимо соблюдение следующих условий:
- ЦП с поддержкой 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. Зачем это?
Для ограничения списка процессоров, которые могут использоваться для выполнения процесса (иногда полезно для увеличения производительности — не вымывает содержимое кеша) используется утилита taskset (маска — битовая маска допустимых процессоров: 1 — первый процессор, 2 — второй, 4 — третий и т.д.; 32-битные слова (big-endian) разделяются запятыми; без указания маски или списка процессоров утилита возвращает текущее значение маски):
- —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 память?)
Сообщения о распределении памяти по узлам при загрузке
Описание узлов в /sys/devices/system/node/nodeНОМЕР
- cpumap — битовая карта ЦП узла
- distance — список (по числу узлов) относительной «стоимости» обращения ЦП данного узла к памяти каждого узла
- meminfo — разнообразная статистика наличия и использования памяти
- numastat — количество попаданий и промахов запросов к памяти в свой узел
- cpuX/ — ссылка на описание каждого процессора узла
cpusets — механизм, позволяющий управлять распределением процессов по ЦП и узлам памяти (cpuset(7), Documentation/cpusets.txt). Корневой cpuset содержит все ЦП и узлы памяти (только чтение, изменяется автоматически при горячем подключении). Пользователь может объявлять свои именованные подмножества одного из имеющихся наборов и привязывать к ним задачи (и их потомков). Наборы могут пересекаться или быть исключительными (т.е. ЦП или узел памяти не может входить в 2 набора на одном уровне иерархии). Запросы приложений к sched_setaffinity(2), set_mempolicy(2) и mbind(2) фильтруются относительно списка процессоров и узлов памяти в указанном cpuset. Оформлен в виде иерархической файловой системы типа cpuset (проверить наличие в /proc/filesystems). Монтирование: «[mkdir /dev/cpuset;] mount -t cpuset none /dev/cpuset». Создание нового набора: «mkdir имя» и заполнение файлов. Процесс может переназначить себя на другой набор, если позволяют права доступа к файлу tasks в каталоге. Для переназначения другого процесса требуется также право на посылку сигнала этому процессу. Привязка к набору наследуется. Каждый набор представляется в виде каталога, содержащего следующие файлы:
- 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?):
Утилита numactl(8) позволяет запускать программы с указанной политикой и привязкой к указанным ЦП и узлам памяти (также позволяет установить политику для разделяемой памяти и файлов в tmpfs и hugetlbfs), ключи:
- —interleave=узлы-памяти (память будет выделяться по очереди из указанных узлов при наличии)
- —membind=узлы-памяти (выделять память только из указанных узлов)
- —cpunodebind=узлы (использовать ЦП только из указанных узлов)
- —physcpubind=список-ЦП (использовать только указанные ЦП)
- —localalloc (выделять память на локальном узле)
- —preferred=узел (предпочтительно выделять память из указанного узла)
- —hardware (информация о размерах узлов и матрица «расстояний»)
- —show (информация о политике, привязке к ЦП и узлам памяти)
Библиотека libnuma (-lnuma, numaif.h, numa.h, numa(3)).
Ключи ядра:
- isolcpus
- relax_domain_level — интервал поиска перегруженного ЦП для миграции процесса на себя, если наша очередь задач пуста
- /usr/share/doc/kernel-doc-версия-ядра/Documentation/cpu-freq/ (описание работы модулей управления частотой процессора)
- Observations on power management
- cpuset (привязка процесса к вычислительному домену)
- Oracle on Opteron with Linux-The NUMA Angle
- разнос прерываний по ядрам при обслуживании большого трафика
- i7z (утилита для получения реальной статистики по частотам ядер, 2013)
- Intel Management Engine (используется в Active Management Technology (AMT), TXT, TPM, управляет частотой ЦП; встроен в процессор; внеполосной доступ к разделяемому с ПК сетевому интерфейсу (отдельный MAC); внутренний веб-сервер с TLS-шифрованием (порты 16992, 16993), SOL (порт 16994), загрузка по сети, KVM (порт 5900 (VNC) и 16994/16995 (RDP)); доступ к периферийному оборудованию (C-Link, DMI), получение и хранение в энергонезависимой памяти информации о нём; включается до нажатии кнопки питания, работает от дежурного питания; полный доступ к памяти ПК через собственный DMA-контроллер с обходом IOMMU; мониторинг видеопотока; процессор: ARCtangent-A4 (ARC32), затем ARCtangent-A5/ARC600 (ARCompact — ARC16/32), затем SPARC, затем x86 (кеш!); регион ME в SPI флэш-памяти и ME BIOS Extenstion (MEBx); ME UMA – скрытая ото всех, кроме ME-контроллера, область (16 — 32 МБ) в ОП; Management Engine Interface (MEI, HECI) набор регистров в конфигурационном пространстве PCI и область в MMIO; ME ROM — начальный загрузчик, проверяет SHA256 открытого ключа Intel, приватным ключом Intel подписаны загружаемые модули; ME SRAM — для загрузки, потом ME UMA; RNG; таймер; watchdog; обработчик прерываний; ОСРВ ThreadX; поддержка NFC и Wi-Fi)
- Intel ME. Как избежать восстания машин? (без прошивки ME компьютер не работает; можно временно отключить (используется при обновлении прошивки); а кто будет управлять частотой? реализовано на практике в банковской сфере и игровых автоматах; кейлоггер, управляемый командами по сети)
- как отключить Intel ME (неубедительно)
- урезание прошивки ME до минимума
- Выявлена скрытая возможность отключения подсистемы Intel ME(оригинал, для версии ME 11 на Intel Quarck и MINIX)
- SGX (Software Guard Extensions) — анклавы памяти шифруются (AES-GCM, случайный ключ во внутренней памяти ЦП, цифровая подпись) и недоступны не только процессам с более высоким уровнем привилегий, но и ядру, ring0, SMM и VMM
- Intel Skylake-EP vs AMD EPYC 7000 (Intel Scalable Processor Platform, Purley FCLGA3647 P, решётка между ядрами и пр. (больше задержка, меньше частота), можно поделить на 2 NUMA домена (SNC — sub-NUMA Cluster), UPI между сокетами (3 в серии Platinum 81xx до 8 сокетов, 3 в серии Gold 61xx до 4 сокетов, 2 в серии Gold 51xx и ниже до 2 сокетов), Intel Omni-Path (100 Gbps) в моделях с литерой F, 6 каналов (2×3) DDR4 2666MHz (Platinum и Gold 61xx) или 2400 (Gold 51xx, Silver 41xx) или 2133 (Bronze 31xx) до 2 модулей на канал (всего 768GiB или 1.5TiB в моделях с литерой M), частота снижается при использовании AVX/AVX2/AVX-512, 48 PCIe 3.0, чипсет C62x (Lewisburg) — до 14 SATA3, до 10 USB 3.0, DMI 3.0 x4 и PCIe 3.0 x8/x16, до 20 PCIe 3.0 (коммутатор), до 4 Ethernet 10G (Intel X722 на базе XL710 — не воспринимает чужие трансиверы, iWARP RDMA), QuickAssist (драйвер встроен в Red Hat 7.1) — аппаратный deflate (zlib 4, буфер 64КБ) и шифрование (AES, 3DES, MD5, SHA3, HMAC и др.) до 100Gbps (C627 и C628; C625 и C626 — 20Gb и 40Gb), гарантия 10 лет в моделях с литерой T, IE (Intel Quark x86 и 1.4MB SRAM) — аналог ME для разработчика систем или интегратора (не только Intel сможет поставить backdoor в ваш сервер ;); и AMD Epyc 7000 — 2 сокета SP3, 4 кристалла на сокет (каждый кристалл по 2 CCX (CPU Complex) по 4 ядра на CCX, ядро — 2 потока), 4 Infinity Fabric между сокетами (38 GB/s каждый, по 1 на кристалл) и 6 Infinity Fabric между кристаллами внутри сокета (42 GB/s каждый, 4 NUMA домена на сокет), 16 каналов памяти (2 канала на кристалл, 2 модуля на канал, до 4 ТБ DDR4 2666, частота памяти определяет частоту Infinity Fabric), 128 PCIe на сокет (64 занято под Infinity Fabric между сокетами), до половины PCIe м.б. использованы как SATA, встроенные контроллеры USB 3.0, SMBus/I2C и др., встроенный Secure Processor (ARM Cortex-A5), шифрование (AES-128) ОП (отдельный ключ для ВМ))
|