|
Bog BOS: Процессоры в Linux: информация и управление
|
Последнее изменение файла: 2024.11.06
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Процессоры в Linux: информация и управление
В статье описываются используемые в Linux методы получения информации
об используемом процессоре и его состоянии (температура, частота, задушенность),
управление частотой процессора, загрузка микрокода, модули msr и cpuid,
привязка процесса и обработчика прерывания к конкретному процессору (ядру),
особенности работы NUMA.
Начальную информацию о процессоре можно получить с помощью команды dmesg:
Initializing CPU#0
Detected 1395.600 MHz processor.
Checking if this processor honours the WP bit even in supervisor mode... Ok.
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L2 cache: 512K
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU: Intel(R) Celeron(R) M processor 1400MHz stepping 05
Checking 'hlt' instruction... OK.
ACPI: CPU0 (power states: C1[C1] C2[C2] C3[C3])
ACPI: Processor [CPU0] (supports 8 throttling states)
ACPI: Thermal Zone [THRC] (47 C)
ACPI: Thermal Zone [THRS] (43 C)
Далее необходимо заглянуть в /proc/cpuinfo:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 9
model name : Intel(R) Celeron(R) M processor 1400MHz
stepping : 5
cpu MHz : 1400.000
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr mce cx8 mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe
bogomips : 2795.13
или для двухядерного процессора (cpu cores) с HT (siblings)
processor : 1
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) D CPU 3.00GHz
stepping : 4
cpu MHz : 2992.672
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl est cid cx16 xtpr
bogomips : 5984.22
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:
Более подробную (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:
$ cat /proc/acpi/processor/CPU0/info
processor id: 0
acpi id: 0
bus mastering control: yes
power management: yes
throttling control: yes
limit interface: yes
И "lshal -t -l" (устарело).
Предельно допустимая температура процессора (материнской платы, системы):
$ cat /proc/acpi/thermal_zone/THRC/trip_points
critical (S5): 96 C
passive: 90 C
$ cat /proc/acpi/thermal_zone/THRM/trip_points
critical (S5): 85 C
passive: 85 C
active[0]: 85 C
$ cat /proc/acpi/thermal_zone/THRS/trip_points
critical (S5): 80 C
passive: 75 C
Утилита lscpu выдаёт информацию об архитектуре, битности, порядке байт, количестве ядер,
количестве потоков на ядро, сокетов, узлов NUMA, модель и ревизия (официальная частота),
текущая частота, виртуализация, размеры кешей, распределение ЦП по узлам NUMA; ключ "-e" вызывает выдачу в виде таблицы
Глобальное состояние сервера:
- G0 - всё работает
- G1 - ожидание или гибернация
- G2 - требуется загрузка, дежурное питание подаётся
- G3 - нет даже дежурного питания, есть батарейки для RTC и RAID
Состояния сна системы:
- S0 - всё работает
- S1 - выключен монитор, ЦП остановлен
- S2 - выключен кеш ЦП
- S3 - Standby, Suspend-to-RAM
- S4 - Hibernate, Suspend-to-disk
- S5 - G2
Состояния простоя ядра и чипа ЦП в целом:
- C0 (ACPI C0) - всё работает
- C1 (ACPI C1) - ядро остановлено
- C1E - все ядра в C1 или ниже, минимальная частота и напряжение
- C3 (ACPI C2 для Xeon E5-2600) - ядро остановлено, L1 сброшен, частота 0; все ядра в C3 или ниже, L3 недоступен, память в самообновлении
- C6 (ACPI C3 для Xeon E5-2600 или ACPI C2 для Xeon Scalable) - питание ядра выключено; все ядра в C6
Состояния производительности ЦП (определяет частоту и напряжение, например, EIST), только в состоянии C0:
- P0 - самая большая частота (может быть выше номинальной), Turbo Limit
- P1 - базовая частота
- ...
- Pn - самая маленькая частота
- LFM - Low Frequency Mode (борьба с перегревом)
- 0 Гц (HLT, Idle)
Состояния экономии энергии подсистемы (сеть, USB, контроллер), только в состоянии S0:
- D0 - всё работает на максимальной скорости
- D1 - устройство экономит энергию
- D2 - ещё экономней
- D3 hot (ACPI D2) - питание подаётся, но устройство не работает
- D3 cold (ACPI D3)- питание не подаётся
Состояния экономии энергии памяти, только в состоянии S0:
- M0 - всё работает на максимальной скорости
- M1 - пониженное потребление, rank выключен (?)
- M2 - самообновление
Модуль acpi-cpufreq конфликтует со встроенной в ядро обработкой Intel P-state и не загружается,
Получение информации о текущей температуре процессора (материнской платы):
$ cat /proc/acpi/thermal_zone/THRC/temperature
temperature: 81 C
$ cat /proc/acpi/thermal_zone/THRS/temperature
temperature: 60 C
Состояние вентилятора:
$ cat /proc/acpi/fan/FAN/state
status: on
Получение информации о питании процессора (текущее состояние,
список возможных состояний, граф переходов и число переходов по каждой ветви;
C1 - состояние после команды HLT; C1E - улучшенный вариант, сбрасывает множитель частоты процессора
до минимально возможного значения (2.8GHz для P4 660)):
$ cat /proc/acpi/processor/CPU0/power
active state: C2
max_cstate: C8
bus master activity: 00000001
states:
C1: type[C1] promotion[C2] demotion[--] latency[000] usage[00000010]
*C2: type[C2] promotion[C3] demotion[C1] latency[001] usage[48839536]
C3: type[C3] promotion[--] demotion[C2] latency[085] usage[43278269]
Управление частотой процессора позволяет регулировать энергопотребление
компьютера. Подсистема управления частотой процессора в ядре 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 - понижение напряжения и частоты.
Получение информации о текущем состоянии
$cat /proc/acpi/processor/CPU0/throttling
state count: 8
active state: T0
states:
*T0: 00%
T1: 12%
T2: 25%
T3: 37%
T4: 50%
T5: 62%
T6: 75%
T7: 87%
Enhanced Intel SpeedStep Technology (EIST, Pentium M, 2005) позволяет ОС напрямую управлять P-состояниями ЦП.
Особенностью процессоров Intel семейства Nehalem (2008),
является возможность автоматического увеличения реальной частоты работы ядра сверх
номинального при соблюдения температурного режима работы (на 1 или 2 или 3 ступени частоты
в зависимости от модели и текущей загрузки; по слухам для Xeon 5560 - 3-3-2-2;
на тесте "openssl speed" у меня получилось одинаковое ускорение около 10% при любом количестве потоков).
Наличие возможности определяется ключом ida в /proc/cpuinfo.
Необходимо соблюдение следующих условий:
- ЦП с поддержкой 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),
(/sys/devices/system/cpu/cpuX/cpufreq).
Универсальная ручка управления включением режимов Turbo Boost и Turbo-Core - /sys/devices/system/cpu/cpufreq/boost
(/sys/devices/system/cpu/intel_pstate/no_turbo?). Не поддерживается модулем intel_pstate.
Утилита turbostat позволяет собрать статистику при выполнении указанной программы
(возможности процессора по частоте при различном количестве активных ядер, частота, температура, мощность ЦП и ОП, режим).
Hardware-Controlled Performance States (HWP, Skylake - 2015, Cascade Lake - 2019,
Intel Speed Select, ISS) - указания ОС воспринимаются лишь как рекомендации (hints), напряжением и частотой
управляет Power Control Unit (PCU). SST-PP (performance profile, configuration level) v1 определяет
базовую частоту в зависимости от TDP, количества активных ядер (или заданных в BIOS Setup), SSE и Tjmax (?).
SST-PP v2 позволяет менять профиль динамически (число ядер может меняться!).
SST-CP позволяет назначать приоритеты ядрам (Class of Service) от CLOS0 до CLOS3,
типы приоритетов - Ordered (CLOS0 - наивысший, ядру с данным приоритетом частота увеличивается в первую очередь)
и Proportional (частота увеличивается в соответствии с весом CLOSx).
SST-BF позволяет менять базовую частоту (P1 расслаивается между ядрами на P1 Hi и P1 Lo).
SST-TF позволяет задавать турбо частоту выделенным ядрам (High Priority, HP).
Для настройки режимов предоставляется утилита intel-speed-select.
Утилита microcode_ctl загружает микрокод (исправленная прошивка) для
процессоров Intel (требуется поддержка модуля ядра microcode, при загрузке
создаётся символьное устройство /dev/cpu/microcode, 10:184).
Собственно микрокод лежит в файле /etc/firmware/microcode.dat.
Имеет ли смысл его обновлять при каждой загрузке?
microcode: CPU0 updated from revision 0x45 to 0x47, date = 11092004
При загрузке модуля msr создаётся символьное устройство (/dev/cpu/0/msr, 202:0).
Используется centrino-decode (декодирует информацию о напряжении питания процессора и
соотношении частот процессора и системной шины).
MCE - Machine Check Exception (реализация Intel - Machine Check Architecture (MCA)), аппаратные ошибки:
- ошибки памяти (ECC)
- перегрев
- ошибки системной шины
- ошибки кеша ЦП
Типы ошибок:
- CE (Corrected Error) - оборудование исправило ошибку, записать в журнал mcelog
- UC (Uncorrected Error) - исправить ошибку не удалось, система остановлена, в системный журнал и на консоль
- UCR (Uncorrected Recoverable Error)
- SRAR (Software Recoverable Action Required) - требуется восстановление от ОС;
детектируется Data Cache Unit (DCU) или Instruction Fetch Unit (IFU);
MCA Recovery позволяет ОС перезагрузить страницу или пометить как плохую и убить связанный с ней процесс (SIGBUS)
или остановить систему, если эта страница из памяти ядра
- SRAO (Software Recoverable Action Optional) - возможно требуется вмешательство ОС;
детектируется патрульным чтением памяти (scrub) или кешем последнего уровня (LLC);
изолировать страницу
- UCNA (Uncorrected No Action Required) - память попорчена, данные не утеряны, можно продолжать, записать в журнал mcelog
Получить отчет (/etc/mcelog/mcelog.conf): mcelog --client.
При загрузке модуля 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: Using 28 for the hash shift.
Bootmem setup node 0 0000000000000000-0000000670000000
Bootmem setup node 1 0000000670000000-0000000c70000000
On node 0 totalpages: 6181942
DMA zone: 2628 pages, LIFO batch:0
DMA32 zone: 555634 pages, LIFO batch:31
Normal zone: 5623680 pages, LIFO batch:31
On node 1 totalpages: 6205440
Normal zone: 6205440 pages, LIFO batch:31
Built 2 zonelists. Total pages: 12387382
Описание узлов в /sys/devices/system/node/nodeНОМЕР
- cpumap - битовая карта ЦП узла
- distance - список (по числу узлов) относительной "стоимости" обращения ЦП данного узла к памяти каждого узла
- meminfo - разнообразная статистика наличия и использования памяти
- numastat - количество попаданий и промахов запросов к памяти в свой узел
- cpuX/ - ссылка на описание каждого процессора узла
cpusets - механизм, позволяющий управлять распределением
процессов по ЦП и узлам памяти (cpuset(7), Documentation/cpusets.txt).
Позднее адаптирован к механизму cgroup.
Корневой 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-памяти.
/proc/zoneinfo
Пакеты numactl и numactrl-devel содержат утилиты и библиотеки более высокого
уровня, чем системные вызовы.
Утилита numastat выдаёт для каждого узла памяти статистику о использовании её для "своих" и "чужих" ЦП.
Утилита memhog предназначена для тестирования производительности различных режимов использования памяти.
Утилита migratepages плозволяет переместить содержимое страниц памяти с одного узла на другой.
Утилита numademo позволяет протестировать производительность сочетаний свой/чужой для различных узлов памяти;
демонстрирует расхождение в пропускной способности памяти в 1.5 раза для систем с использованием QPI/HT
при правильном и неправильном распределении процессов по ЦП и узлам памяти (перепутаны Min и Max?):
2 x AMD Opteron 2356 (2g из 8g на узел)
memory with no policy memset Avg 5878.05 MB/s Min 5972.23 MB/s Max 5682.69 MB/s
local memory memset Avg 5967.38 MB/s Min 6023.86 MB/s Max 5812.07 MB/s
memory interleaved on all nodes memset Avg 4920.05 MB/s Min 5033.72 MB/s Max 4733.77 MB/s
memory on node 0 memset Avg 4090.25 MB/s Min 4189.11 MB/s Max 3691.94 MB/s
memory on node 1 memset Avg 5895.27 MB/s Min 5994.77 MB/s Max 5777.46 MB/s
memory interleaved on 0 1 memset Avg 4888.79 MB/s Min 5019.08 MB/s Max 4472.58 MB/s
memory with no policy memcpy Avg 5193.84 MB/s Min 7083.10 MB/s Max 1536.08 MB/s
local memory memcpy Avg 3939.95 MB/s Min 5225.26 MB/s Max 1237.51 MB/s
memory interleaved on all nodes memcpy Avg 3241.97 MB/s Min 4496.22 MB/s Max 1014.81 MB/s
memory on node 0 memcpy Avg 3054.11 MB/s Min 4348.76 MB/s Max 864.11 MB/s
memory on node 1 memcpy Avg 4680.80 MB/s Min 6961.09 MB/s Max 1236.73 MB/s
memory interleaved on 0 1 memcpy Avg 3728.07 MB/s Min 5849.08 MB/s Max 999.82 MB/s
memory with no policy STREAM Copy 3811.09 MB/s Scale 3800.05 MB/s Add 4024.42 MB/s Triad 3942.64 MB/s
local memory STREAM Copy 3833.94 MB/s Scale 3822.83 MB/s Add 4049.70 MB/s Triad 3973.89 MB/s
memory interleaved on all nodes STREAM Copy 3432.73 MB/s Scale 3452.43 MB/s Add 3669.90 MB/s Triad 3582.52 MB/s
memory on node 0 STREAM Copy 2702.44 MB/s Scale 2697.45 MB/s Add 2770.88 MB/s Triad 2711.56 MB/s
memory on node 1 STREAM Copy 3756.97 MB/s Scale 3739.14 MB/s Add 3955.32 MB/s Triad 3874.63 MB/s
memory interleaved on 0 1 STREAM Copy 3454.24 MB/s Scale 3460.09 MB/s Add 3679.89 MB/s Triad 3599.59 MB/s
memory with no policy random Avg 72.48 MB/s Min 73.49 MB/s Max 68.13 MB/s
local memory random Avg 72.42 MB/s Min 73.38 MB/s Max 69.74 MB/s
memory interleaved on all nodes random Avg 57.47 MB/s Min 60.16 MB/s Max 55.88 MB/s
memory on node 0 random Avg 75.32 MB/s Min 77.17 MB/s Max 71.60 MB/s
memory on node 1 random Avg 72.90 MB/s Min 73.72 MB/s Max 70.80 MB/s
memory interleaved on 0 1 random Avg 72.79 MB/s Min 75.30 MB/s Max 63.49 MB/s
2 x Intel X5560 (2g из 24g на узел)
memory with no policy memset Avg 8959.25 MB/s Min 9135.93 MB/s Max 8699.41 MB/s
local memory memset Avg 9058.87 MB/s Min 9110.66 MB/s Max 8701.52 MB/s
memory interleaved on all nodes memset Avg 6974.46 MB/s Min 6979.33 MB/s Max 6966.63 MB/s
memory on node 0 memset Avg 9112.75 MB/s Min 9117.63 MB/s Max 9103.06 MB/s
memory on node 1 memset Avg 5653.80 MB/s Min 5662.27 MB/s Max 5643.70 MB/s
memory interleaved on 0 1 memset Avg 6966.91 MB/s Min 6975.47 MB/s Max 6959.04 MB/s
memory with no policy memcpy Avg 11106.54 MB/s Min 12947.26 MB/s Max 4885.19 MB/s
local memory memcpy Avg 10498.88 MB/s Min 12952.10 MB/s Max 3891.58 MB/s
memory interleaved on all nodes memcpy Avg 7916.93 MB/s Min 9537.84 MB/s Max 3138.41 MB/s
memory on node 0 memcpy Avg 6386.60 MB/s Min 7538.84 MB/s Max 2700.38 MB/s
memory on node 1 memcpy Avg 10493.70 MB/s Min 12946.01 MB/s Max 3886.45 MB/s
memory interleaved on 0 1 memcpy Avg 7902.99 MB/s Min 9534.20 MB/s Max 3123.26 MB/s
memory with no policy STREAM Copy 9160.78 MB/s Scale 8890.00 MB/s Add 9628.33 MB/s Triad 9426.76 MB/s
local memory STREAM Copy 9165.30 MB/s Scale 8910.09 MB/s Add 9636.54 MB/s Triad 9427.67 MB/s
memory interleaved on all nodes STREAM Copy 7659.02 MB/s Scale 7393.12 MB/s Add 8033.59 MB/s Triad 7818.73 MB/s
memory on node 0 STREAM Copy 9176.52 MB/s Scale 8895.86 MB/s Add 9661.99 MB/s Triad 9459.41 MB/s
memory on node 1 STREAM Copy 5953.97 MB/s Scale 5746.41 MB/s Add 6348.86 MB/s Triad 6127.63 MB/s
memory interleaved on 0 1 STREAM Copy 7674.63 MB/s Scale 7399.69 MB/s Add 8031.82 MB/s Triad 7816.02 MB/s
memory with no policy random Avg 179.72 MB/s Min 181.30 MB/s Max 170.39 MB/s
local memory random Avg 179.08 MB/s Min 180.58 MB/s Max 170.75 MB/s
memory interleaved on all nodes random Avg 180.67 MB/s Min 182.04 MB/s Max 170.53 MB/s
memory on node 0 random Avg 182.42 MB/s Min 183.86 MB/s Max 170.66 MB/s
memory on node 1 random Avg 179.38 MB/s Min 180.83 MB/s Max 170.76 MB/s
memory interleaved on 0 1 random Avg 181.38 MB/s Min 182.96 MB/s Max 171.17 MB/s
4 x AMD Opteron 875 (2g из 4g на узел)
memory with no policy memset avg 916 min 914 max 920 cycles/KB
local memory memset avg 916 min 914 max 921 cycles/KB
memory interleaved on all nodes memset avg 1084 min 1084 max 1087 cycles/KB
memory on node 0 memset avg 1388 min 1388 max 1390 cycles/KB
memory on node 1 memset avg 1234 min 1229 max 1238 cycles/KB
memory on node 2 memset avg 1176 min 1175 max 1182 cycles/KB
memory on node 3 memset avg 914 min 914 max 916 cycles/KB
local memory memcpy avg 839 min 713 max 1959 cycles/KB
memory interleaved on all nodes memcpy avg 946 min 809 max 2156 cycles/KB
memory on node 0 memcpy avg 987 min 864 max 2062 cycles/KB
memory on node 1 memcpy avg 840 min 713 max 1975 cycles/KB
memory on node 2 memcpy avg 1133 min 1012 max 2208 cycles/KB
memory on node 3 memcpy avg 1032 min 899 max 2203 cycles/KB
memory with no policy STREAM Copy 2416.22 Scale 2395.60 Add 2598.38 Triad 2572.74 MB/s
local memory STREAM Copy 2488.67 Scale 2465.38 Add 2672.42 Triad 2646.52 MB/s
memory interleaved on all nodes STREAM Copy 2144.14 Scale 2138.73 Add 2308.06 Triad 2300.73 MB/s
memory on node 0 STREAM Copy 1925.34 Scale 1932.68 Add 2085.73 Triad 2088.77 MB/s
memory on node 1 STREAM Copy 2490.83 Scale 2466.94 Add 2673.57 Triad 2648.25 MB/s
memory on node 2 STREAM Copy 1631.19 Scale 1635.52 Add 1774.65 Triad 1768.57 MB/s
memory on node 3 STREAM Copy 1837.44 Scale 1844.79 Add 1993.23 Triad 1998.57 MB/s
2 x Intel X5560 (50g при наличии 48GB памяти, swap на SSD Intel X-25
memory with no policy memset Avg 75.83 MB/s Min 349.68 MB/s Max 52.51 MB/s)
2 x Intel X5570 (34g при наличии 32GB памяти, swap на RAID-1 из SAS 10000 rpm
memory with no policy memset Avg 4.09 MB/s Min 33.18 MB/s Max 2.96 MB/s
2 x Intel X5570 (34g при наличии 32GB памяти, swap на comcache
memory with no policy memset Avg 365.72 MB/s Min 585.80 MB/s Max 240.80 MB/s
Утилита numactl(8) позволяет запускать программы с указанной политикой и привязкой к указанным ЦП и
узлам памяти (также позволяет установить политику для разделяемой памяти и файлов в tmpfs и hugetlbfs), ключи:
- --interleave=узлы-памяти (память будет выделяться по очереди из указанных узлов при наличии)
- --membind=узлы-памяти (выделять память только из указанных узлов)
- --cpunodebind=узлы (использовать ЦП только из указанных узлов)
- --physcpubind=список-ЦП (использовать только указанные ЦП)
- --localalloc (выделять память на локальном узле)
- --preferred=узел (предпочтительно выделять память из указанного узла)
- --hardware (информация о размерах узлов и матрица "расстояний")
- --show (информация о политике, привязке к ЦП и узлам памяти)
Размещение процессов по своим сокетам и узлам памяти уменьшает латентность памяти от 13% до 38%.
Библиотека 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) версия 1 (Xeon Skylake-SP)
- Xeon x1xx, FCLGA3647 (Socket P)
- решётка (mesh) между ядрами, контроллерами памяти, UPI и PCIe x16 (больше задержка, меньше частота)
- L2 - 1 MB, L3 - 1.375 MB на ядро (не всегда), неинклюзивный
- можно поделить на 2 NUMA домена (SNC - sub-NUMA Cluster)
- UPI между сокетами (3 в серии Platinum 81xx до 8 сокетов, 3 в серии Gold 61xx до 4 сокетов, 2 в серии Gold 51xx и ниже до 2 сокетов)
- кристалы XCC (28 ядер), HCC (18 ядер) и LCC (10 ядер)
- Intel Omni-Path (100 Gbps) в моделях с литерой F (дополнительные PCIe 3.0 x16) - в дальнейшем Intel отказалась от развития этой технологии
- 6 каналов (2 контроллера памяти на 3 канала каждый) DDR4 2666MHz и 2 FMA (Platinum и Gold 61xx)
или 2400 и 1 FMA (Gold 51xx, Silver 41xx)
или 2133 (Bronze 31xx) до 2 модулей на канал (частота снижается при установке 2 модулей на канал)
(всего 768GiB или 1.5TiB в моделях с литерой M)
- частота снижается при использовании AVX/AVX2/AVX-512
- 48 PCIe 3.0 (3 контроллера по 16, которые можно представить как 1x16 или 2x8 или 4x4)
- Virtual RAID (VROC), нет RAID6
- VMD - прокси между ЦП и 72 SSD на каждый корень PCIe; мало мы наелись с soft RAID!
- чипсет C62x (Lewisburg) - до 14 SATA3, до 10 USB 3.0,
DMI 3.0 x4 и опционально PCIe 3.0 x8/x16 из 48, до 20 PCIe 3.0 (коммутатор),
Node Manager 4.0,
до 4 Ethernet 10G (Intel X722 на базе XL710 - не воспринимает чужие трансиверы, iWARP RDMA)
- QuickAssist (драйвер встроен в Red Hat 7.1, DPDK) - аппаратный deflate (zlib 4, буфер 64КБ) и шифрование (AES, 3DES, MD5, SHA3, HMAC и др.)
до 100Gbps (C627 и C628; C625 и C626 - 20Gb и 40Gb); хитроумная топология для доступа к блокам 4x10G и QAT
- гарантия 10 лет в моделях с литерой T
- IE (Intel Quark x86 и 1.4MB SRAM) - аналог ME для разработчика систем или интегратора (не только Intel сможет поставить backdoor в ваш сервер ;)
- AMD Epyc 7xx1 (Naples, ядро Zen) - до 2 сокетов P3,
4 кристалла Zeppelin на сокет (каждый кристалл по 2 CCX (CPU Complex) по 4 ядра на CCX, ядро - 2 потока),
всего до 32 ядер на сокет,
4 Infinity Fabric между сокетами (38 GB/s каждый, по 1 на кристалл),
и 6 Infinity Fabric между кристаллами внутри сокета (42 GB/s каждый, 4 NUMA домена на сокет),
L2 - 512 KB на ядро, L3 - до 64 MB на сокет (8 MB на 4 ядра);
варианты с 2 кристаллами сокет SP4 MCM) и 1 кристаллом (SP4r2 SCM)
- 8 каналов памяти (2 канала на кристалл, 2 модуля на канал, до 2 ТБ DDR4 2667 на сокет, частота памяти определяет частоту Infinity Fabric)
- 128 PCIe 3.0 на сокет (64 занято под Infinity Fabric между сокетами), м.б. использованы как 32 SATA, 16 10Gb Ethernet, 32 NVMe;
встроенные контроллеры USB 3.0, SMBus/I2C и др.
- 10 Gb Ethernet
- встроенный Secure Processor (ARM Cortex-A5), шифрование (AES-128) ОП (отдельный ключ для ВМ))
- примеры: Epyc 7351 - 16 ядер по 2.4/2.9 GHz за 170W, Epyc 7351P для 1 сокетных систем; Epyc 7371 - 16 ядер по 3.1/3.6/3.8 GHz
Xeon E3-1200 v5 (Skylake-S, GT2, LGA 1151), Xeon E3-1500 v5 (Skylake-H, GT4e, BGA) - 1 сокет, 4 ядра, Greenlow, чипсет C230
Xeon E3-1200 v6 (Kaby Lake), DDR4-2400 ECC, чипсет C232 или C236
Xeon W-3175, FCLGA3647 (Socket P), до 512 ГБ DDR4-2666 ECC
Xeon Cascade Lake SP (2 поколение Scalable Processor, Purley Refresh)
- совместимость по разъёму, чипсету и системной плате
- Xeon x2xx, FCLGA3647 (Socket P)
- пугающее разнообразие: 41 вариант ЦП без учёта литер M и L
- литера M - 2 TB памяти на ЦП, литера L - 4.5 TB памяти на ЦП, литеры T, Y, N, V и S
- 6 каналов (2 контроллера памяти на 3 канала каждый) DDR4 2933MHz и 2 FMA (Platinum и Gold 62xx)
или 2400 и 1 FMA (Gold 52xx, Silver 42xx)
или 2133 (Bronze 32xx) до 2 модулей на канал (частота снижается при установке 2 модулей на канал)
- Intel Optane DC (DCPMM) - в дальнейшем Intel отказалась от развития этой технологии
- Intel Speed Select (SST) - приоритет мощности определённому ядру (литера Y)
- Intel Resource Director Technology (RDT) - приоритетный доступ к кешу и памяти
- набор инструкций DL (Deep Learning) Boost (ранеее Vector Neural Network Instructions - VNNI)
- прежний чипсет C62x (Lewisburg) - до 14 SATA3, до 10 USB 3.0,
DMI 3.0 x4 и опционально PCIe 3.0 x8/x16 из 48, до 20 PCIe 3.0 (коммутатор),
Node Manager 4.0,
до 4 Ethernet 10G (Intel X722 на базе XL710 - не воспринимает чужие трансиверы, iWARP RDMA)
- примеры: Xeon Gold 6226 - 12 ядер на 2.7/3.7 GHz, 19.25 MB L3 и 125 Вт TDP
Xeon Cascade Lake AP (Walker Pass) - сдвоенный Cascade Lake SP под одной крышкой, до 56 ядер, сокет BGA5903
AMD Epyc 7xx2 (Rome, ядро Zen2) - до 2 сокетов P3
-
8 кристаллов CCD (ЦП) и кристалл памяти и ввода/вывода на сокет (каждый кристалл по 2 CCX (CPU Complex) по 4 ядра на CCX, ядро - 2 потока),
всего до 64 ядер на сокет,
8 Infinity Fabric 2 на кристалле ввода/вывода (по 1 на CCD);
L2 - 512 KB на ядро, L3 - до 256 MB на сокет (16 MB на 4 ядра);
варианты с 2, 4 и 6 кристаллами на сокет
- 8 каналов памяти (2 модуля на канал, до 4 ТБ DDR4 3200 на сокет (2933 при 2 модулях на канал, 2666 при использовании 3DS))
- возвращение к 2 узлам NUMA
- 128 PCIe 4.0 на сокет (64 занято под Infinity Fabric между сокетами);
8 групп по 16 линий (бифуркация до x1, но не больше 8 слотов на группу);
м.б. использованы как 32 SATA, 16 10Gb Ethernet, 32 NVMe;
встроенные контроллеры USB 3.0, SMBus/I2C и др.
- встроенный Secure Processor (ARM Cortex-A5), шифрование (AES-128) ОП (отдельный ключ для ВМ))
примеры: Epyc 7302 - 16 ядер на 3.0/3.3 GHz, 128 MB L3 и 155 Вт (7302P для 1 сокетных); Epyc 7F52 - 16 ядер на 3.5/3.9 GHz, 256 MB L3 и 225 Вт
совместимость начиная с Linux 4.19 (RHEL 8.0)
Xeon W-32xx (Cascade Lake W) - FCLGA3647 (Socket P), 1 сокет, до 28 ядер,
6 каналов (2 контроллера памяти на 3 канала каждый) ECC DDR4 2933MHz до 1ТБ (с литерой M - 2ТБ)
Xeon E3-2200 - 8 ядер, до 128 ГБ DDR4-2666 ECC (2 канала), PCIe 3.0 x16, Intel HD Graphics P630
Xeon Cascade Lake Refresh (Purley Refresh Refresh) - новые модели Intel Xeon x2xxR с увеличенной частотой и/или количеством ядер и большим TDP
- примеры: Xeon Gold 6226R - 16 ядер на 2.9/3.9 GHz, 22 MB L3 и 150 Вт TDP
Xeon Cooper Lake SP (как бы 3 поколение Scalable Processor)
- старшие (4 и 8 сокетов LGA4189, Socket P5) Xeon x3xx
- все имеют литеру H (до 1.2ТБ на ЦП) или HL (до 4.5ТБ на ЦП)
- турбо частота настолько оторвалась от базовой, что базовая теряет смысл - охлаждать надо лучше
- 6 каналов (2 контроллера памяти на 3 канала каждый) DDR4 3200MHz (Platinum)
или 2933 (63xx) или 2666 (Gold 53xx),
до 2 модулей на канал (частота снижается при установке 2 модулей на канал)
- 6 UPI между сокетами, т.е. все ЦП моожно устанавливать в 48 сокетные системы
- 48 PCIe 3.0 (3 контроллера по 16, которые можно представить как 1x16 или 2x8 или 4x4)
- Intel Optane DC 2(DCPMM 2) - в дальнейшем Intel отказалась от развития этой технологии
- чипсет 620A (Lewisburg Refresh) - до 14 SATA3, до 10 USB 3.0,
DMI 3.0 x4 и опционально PCIe 3.0 x8/x16 из 48, до 20 PCIe 3.0 (коммутатор),
Node Manager 4.0; только модели C621A, C627A и C628A (без сети 10Гб и слабых QAT)
Xeon Ice Lake SP (Whitley) - настоящее 3 поколение Scalable Processor
(также)
- младшие (1 и 2 сокета LGA4189-4/5, Socket P4) Xeon x3xx, до 40 ядер Sunny Cove (всего больше, глубже и шире,
новые инструкции - AES, SHA-NI, VBMI, GFNI, дополнения к AVX-512),
L2 - 1.25MB, L3 - 1.5 MB на ядро
- турбо частота настолько оторвалась от базовой, что базовая теряет смысл - охлаждать надо лучше (TDP 270 Вт - Intel намекает на водяное охлаждение)
- литеры: H/HL - 4 и 8 сокетов, T - долгоиграющиее, Q - горячие (водяное охлаждение), U - 1 сокет, S - большой SGX,
Y - улучшенный Speed Select, N - для сетей, M - оптимизация AVX, V - виртуализация, P - IaaS
- полное шифрование памяти
- выделенная шина управления питанием (ускорение смены частоты)
- выделенная шина для RAS
- 8 каналов (4 контроллера памяти на 2 канала каждый) DDR4 3200MHz (Platinum и Gold 63xx)
или 2933 (Gold 53xx) или 2667 (Silver);
до 2 модулей на канал (частота снижается при установке 2 модулей на канал кроме Platinum);
до 4 ТБ памяти
- 3 UPI 11.2 GT/s между сокетами (2 UPI по 10.4 для Silver)
- 64 PCIe 4.0 (4 контроллера по 16, которые можно представить как 1x16 или 2x8 или 4x4)
- прежний чипсет C620A (Lewisburg Refresh) - до 14 SATA3, до 10 USB 3.0,
DMI 3.0 x4 и опционально PCIe 3.0 x8/x16 из 48, до 20 PCIe 3.0 (коммутатор),
Node Manager 4.0; только модели C621A, C627A и C629A (без сети 10Гб и слабых QAT)
- примеры: Xeon Gold 6334 - 8 ядер на 3.6/3.6 GHz, 18 MB L3 и 165 Вт TDP; Xeon Gold 6354 - 18 ядер на 3.0/3.6 GHz, 39 MB L3 и 205 Вт TDP
AMD Epyc 7xx3 (Milan, ядро Zen 3) - до 2 сокетов P3 (несовместим с Naples), платформа DAYTONA
-
8 кристаллов CCD (ЦП) и кристалл памяти и ввода/вывода на сокет (каждый кристалл по 1 CCX (CPU Complex) по 8 ядер на CCX, ядро - 2 потока),
всего до 64 ядер на сокет,
кольцевая шина внутри CCX;
8 Infinity Fabric 3 на кристалле ввода/вывода (по 1 на CCD), синхронизован с DDR4 3200;
L2 - 512 KB на ядро, L3 - до 256 MB на сокет (32 MB на 8 ядер);
варианты с 2, 4 и 6? кристаллами на сокет
- 8 каналов памяти (2 модуля на канал, до 4 ТБ DDR4 3200 на сокет (2933 при 2 модулях на канал, 2666 при использовании 3DS));
возможно 4 или 6 каналов памяти
- возвращение к 2 узлам NUMA
- 128 PCIe 4.0 на сокет (64 занято под Infinity Fabric 3 между сокетами);
8 групп по 16 линий (бифуркация до x1, но не больше 8 слотов на группу);
м.б. использованы как 32 SATA, 16 10Gb Ethernet, 32 NVMe;
встроенные контроллеры USB 3.0, SMBus/I2C и др.
- встроенный Secure Processor (ARM Cortex-A5), шифрование (AES-128) ОП (отдельный ключ для ВМ))
примеры: Epyc 7343 - 16 ядер на 3.2/3.9 GHz, 128 MB L3 и 190 Вт; Epyc 7313P для 1 сокетных - 16 ядер на 3.2/3.7 GHz, 128 MB L3 и 155 Вт;
Epyc 73F3 - 16 ядер на 3.5/4.0 GHz, 256 MB L3 и 240 Вт
совместимость начиная с RHEL 8.3, GCC 11, LLVM 12, Linux 5.11
AMD Milan-X - 64 Мбайт 3D V-Cache на каждый CCD/CCX (заявлено ускорение RTL (Synopsys VCS) верификации в 1.66 раза для 16 ядерных ЦП);
Epyc 7373X - 16 ядер на 3.0/3.8 GHz, 768 MB L3 и 240 Вт;
1 ядро может иметь доступ к 96 МБ
Xeon Sapphire Rapids SP - 4 поколение Scalable Processor
- вариант XCC (до 60 ядер, Platinum 84xx) - 4 тайла (чиплета), объединённые EMIB;
вариант MCC (до 32 ядер) - монолитный;
LGA 4677 (Socket E); Xeon x4xx, от 8 до 60 ядер Golden Cove (опять шире и глубже);
L2 - 2MB; набор инструкций AMX (Advanced Matrix Extension, 8 регистров по 1КБ);
набор инструкций Accelerator Interfacing Architecture (AiA);
ускорители DSA (Data Streaming Accelerator) и QAT (сжатие 160 Гб/сек, OpenSSL, QATzip)
и DLB (Dynamic Load Balancer) и IAA (In-Memory Analytics Accelerator);
- турбо частота настолько оторвалась от базовой, что базовая теряет смысл - охлаждать надо лучше (TDP 350 Вт - Intel намекает на водяное охлаждение)
- литеры: Y - улучшенный Speed Select, Q - горячие (водяное охлаждение), U - 1 сокет, T - долгоиграющиее, H - виртуализация, in-memory СУБД,
S - для СХД, N - для сетей, M - медиа, V - виртуализация, P - IaaS
- модели с литерой "+" имеют активированные ускорители
- 52 модели на старте, например,
- 6454S - 32 ядра по 2.2/2.8/3.4; память 4800, 4 UPI, 4 QAT, 270 Вт
- 5416S - 16 ядер по 2/2.8/4; память 4400, 3 UPI, 2 QAT, 150 Вт, дёшев
- 5415+ - 8 ядер по 2.9/3.6/4.1; память 4400, 3 UPI, 1 QAT, 150 Вт, дёшев
- 6444Y - 16 ядер по 3.6/4.0/4.1; память 4800, 3 UPI, 270 Вт
- 6434 - 8 ядер по 3.7/4.1/4.1; память 4800, 3 UPI, 195 Вт
- Intel On Demand - можно дополнительно активировать ускорители за отдельную цену
- режим работы с меньшим потреблением (20% меньше за счёт 5% производительности)
- 8 каналов (4 контроллера памяти на 2 канала каждый) DDR5 4800MHz (Platinum 84xx и Gold 64xx)
или 4400 (Silver 54xx) или 4000 (Bronze 44xx);
до 2 модулей на канал (частота снижается до 4400 при установке 2 модулей на канал);
до 4 ТБ памяти
- 4 UPI 2.0 для XCC (до 8 сокетов) и 3 UPI 2.0 для MCC (до 4 сокетов) - по 24 линии 16 GT/s между сокетами
- 80 PCIe 5.0, CXL 1.1 Type 1/2 (5? контроллеров по 16, которые можно представить как 1x16 или 2x8 или 4x4 или 8x2 (падает до PCIe 4.0))
- чипсет C741 (Emmitsburg) - DMI 4.0 x8, 20 линий PCIe 3.0, 14 портов USB (10 USB 3.2 Gen 1), до 20 портов SATA-3, лишился QAT (перемещён в ЦП)
Xeon Sapphire Rapids WS - вариант для рабочих станций, 1 сокет, чипсет W790 (DMI 4.0 x8, 16 PCIe 4.0, 12 PCIe 3.0,
14 портов USB (10 USB 3.2 Gen 2x1), до 8 портов SATA-3)
Intel Xeon Max - Xeon Sapphire Rapids с 64GB HBM2e (1.2 TB/s), 1 или 2 сокета, Xeon 9xxx;
3 режима: только HBM, HBM как кеш к обычной памяти, HBM рядом с обычной памятью
AMD Epyc 7xx4 (Genoa, ядро Zen 4) - до 2 сокетов SP5 (LGA6096)
- TDP от 200 до 360 Вт
-
12 кристаллов CCD (ЦП) ? и кристалл памяти и ввода/вывода на сокет (?каждый кристалл по 1 CCX (CPU Complex) по 8 ядер на CCX, ядро - 2 потока),
всего до 96 ядер на сокет,
?кольцевая шина внутри CCX;
?8 Infinity Fabric 2 на кристалле ввода/вывода (по 1 на CCD), синхронизован с DDR4 3200;
L2 - 1024 KB на ядро, L3 - до 384 MB на сокет (32 MB на CCD - 8 ядер);
варианты с 4 и 8 кристаллами на сокет
- 12 каналов памяти (2 модуля на канал в будущем?, до 3 ТБ DDR5 4800 (в будущем 5200) на сокет, при использовании 2 3DS - 12 TB на систему);
ECC x72 или x80 - 2 * (x32 + 8), 2 канала на модуль;
RDIMM или 3DS RDIMM;
возможно чередование 12, 10, 8, 6, 4 или 2 канала памяти
- узлов NUMA на сокет - 1, 2 или 4
- 128 PCIe 5.0 (64 CXL 1.1+) на сокет (64 или 48 занято под Infinity Fabric между сокетами);
8 групп по 16 линий (бифуркация до x1, но не больше 9 устройств на группу из 16 линий);
м.б. использованы как 32 SATA;
встроенные контроллеры USB 3.0, SMBus/I2C и др.;
дополнительно 2 PCIe 3.0 x4 на 1 сокет, x12 на 2 сокета
- встроенный Secure Processor, шифрование (AES-256-XTS) ОП (1006 ключей для ВМ)
частичная поддержка CXL 2.0 Type 3, что позволяет подключать расширители памяти (NUMA узел без ЦП)
примеры:
Epyc 9254 - 24 ядра на 2.9/4.15 GHz, 128 MB L3 и 200 Вт;
Epyc 9354P для 1-сокетных - 32 ядра на 3.25/3.8 GHz, 256 MB L3 и 280 Вт
совместимость начиная с RHEL ?, GCC ?, LLVM ?, Linux ?
AMD Epyc 8xx4 (Siena, ядро Zen 4c), сокет SP6 - урезанный Bergamo - только односокетные модели, 96 PCIe 5.0 и 6 каналов памяти RDIMM DDR5-4800;
например, 8224P - 24 ядра при частоте 2.55/?/3.0, TDP 160 Вт
AMD Epyc Embedded 8004 (Siena): до 64 ядер Zen 4c, 6 каналов DDR5-4800 и 96 линий PCIe 5.0
AMD Epyc 9x84X (Genoa-X) - ядро Zen4 и 3D L3 (до 1152 MB L3 при 96 ядрах), сокет SP5; 128 PCIe 5.0 (CXL); 12 каналов памяти DDR5-4800;
например, 9184X - 16 ядер на 3.55/4.20 GHz, 768 MB L3 и TDP 320 Вт
AMD Epyc 97x4 (Bergamo) - до 128 ядер Zen4c, 8 CCD по 16 ядер, сокет SP5; 128 PCIe 5.0 (CXL); 12 каналов памяти DDR5-4800;
например, 9734 - 112 ядер при частоте 2.2/?/3.0 и L3 256MB, TDP 320 Вт
Xeon Emerald Rapids SP - 5 поколение Scalable Processor
- вариант XCC (до 64 ядер, Platinum 85xx) - 2 тайла (чиплета), объединённые EMIB?;
вариант MCC (до 32 ядер) - монолитный; вариант EE LCC (до 20 ядер) - монолитный;
LGA 4677 (Socket E); Xeon x5xx, от 8 до 64 ядер Golden Cove?;
L2 - 2MB?; L3 до 320MB
- турбо частота настолько оторвалась от базовой, что базовая теряет смысл - охлаждать надо лучше (TDP 350 Вт - Intel намекает на водяное охлаждение)
- литеры: Y - улучшенный Speed Select, Q - горячие (водяное охлаждение), U - 1 сокет, T - долгоиграющиее,
S - для СХД, N - для сетей, V - виртуализация, P - IaaS
- модели с литерой "+" имеют активированные ускорители
- 32 модели на старте, например,
- 6554S - 36 ядер по 2.2/3.0/4.0; память 5200, 4 UPI, 4 QAT, L3 180MB, 270 Вт
- 5515+ - 8 ядер по 3.2/3.6/4.1; память 4800, 3 UPI, 1 QAT, L3 22.5MB, 165 Вт, дёшев
- 6544Y - 16 ядер по 3.6/4.1/4.1; память 5200, 3 UPI, L3 45MB, 270 Вт
- 6534 - 8 ядер по 3.9/4.2/4.2; память 4800, 3 UPI, L3 22.5MB, 195 Вт
- Intel On Demand - можно дополнительно активировать ускорители за отдельную цену
- 8 каналов (4 контроллера памяти на 2 канала каждый?) DDR5 от 4400MHz до 5600MHz (полный хаос по моделям)
до 2 модулей на канал (частота снижается до 4400 при установке 2 модулей на канал)?;
до 4 ТБ памяти?
- 4 UPI 2.0 для 85xx (не для всех, до 2 сокетов?!) и 3 UPI 2.0 для 65xx/55xx (до 2 сокетов) - по 24 линии до 20 GT/s между сокетами
- 80 PCIe 5.0, CXL 1.1 Type 1/2/3? (?5 контроллеров по 16, которые можно представить как 1x16 или 2x8 или 4x4 или 8x2 (падает до PCIe 4.0))
- ?чипсет C741 (Emmitsburg) - DMI 4.0 x8, 20 линий PCIe 3.0, 14 портов USB (10 USB 3.2 Gen 1), до 20 портов SATA-3, лишился QAT (перемещён в ЦП)
AMD Epyc 9005: Turin и Turin Dense, Zen 5 и Zen 5c, до 128 и 192 ядер; 1 или 2 сокета SP5 (совместим с Genoa);
192 PCIe 5.0 (CXL 2.0); 12 каналов памяти до DDR5-6400;
например, 9135 - 16 ядер на 3.65/4.3 GHz, 64 MB L3 и TDP 200 Вт (очень дёшево);
9175F - 16 ядер на 4.2/5.0 GHz, 512 MB L3 и TDP 320 Вт;
9275G - 24 ядра на 4.1/4.8 GHz, 256 MB L3 и TDP 320 Вт;
9565 - 72 ядра на 3.15/4.3 GHz, 384 MB L3 и TDP 400 Вт
Xeon 6 Sierra Forest (экономичные E-core) и Granite Rapids (быстрые P-Core) (прощай Scalable Processor!)
- 6700 E (до 144 ядер), LGA 4710, до 8 каналов DDR5, до 88 линий PCIe 5.0 (до 136 линий PCIe 5.0 для 1 сокетных), 4MB L2 на каждые 4 ядра,
например 6740E (96 ядер 2.4/3.2/3.2 GHz, TDP 250W, L3 96MB, 4 UPI 2.0 (24 GT/s), 4 QAT)
- 6900 E (до 288 ядер), LGA 7529, до 12 каналов DDR5 (6400), до 96 линий PCIe 5.0, до 6 UPI 2.0 (24 GT/s)
- 6700 P (до 86 ядер), LGA 4710, до 8 каналов DDR5 (6400), до 4 UPI 2.0 (24 GT/s)
- 6900 P (до 128 ядер Redwood Cove), LGA 7529, до 12 каналов DDR5 (6400) и MCR (MRDIMM 8800), до 96 линий PCIe 5.0 (до 136 линий PCIe 5.0 для 1 сокетных),
до 6 UPI 2.0 (24 GT/s), до 4 сокетов; например, Xeon 6960P: 72 ядра @ 2.7 GHz, кеш 432 MB, TDP 500W
|
Bog BOS: Процессоры в Linux: информация и управление
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru