@ Карта сайта News Автора!

Bog BOS: Процессоры в Linux: информация и управление

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)

Последнее изменение файла: 2023.12.18
Скопировано с www.bog.pp.ru: 2024.04.19

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):

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

Параметры кешей (cat /sys/devices/system/cpu/cpuX/cache/indexY/параметр):

Топология (cat /sys/devices/system/cpu/cpuX/topology/параметр):

Модуль 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" вызывает выдачу в виде таблицы

Таблицы состояния

Глобальное состояние сервера:

Состояния сна системы:

Состояния простоя ядра и чипа ЦП в целом:

Состояния производительности ЦП (определяет частоту и напряжение, например, EIST), только в состоянии C0:

Состояния экономии энергии подсистемы (сеть, USB, контроллер), только в состоянии S0:

Состояния экономии энергии памяти, только в состоянии S0:

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

Модуль 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:

Модули управления частотой для различных архитектур (вставить загрузку нужного в /etc/rc.d/rc.local; неподходящий модуль откажется загружаться):

Регуляторы (вставить загрузку нужных в /etc/rc.d/rc.local, если не встроены в ядро):

Модуль cpufreq-stats (вставить загрузку в /etc/rc.d/rc.local) собирает и выдаёт статистику изменения частоты и напряжения процессора в подкаталоге stats:

Устанавливать регуляторы и частоты можно записывая желаемые значения в /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):

cpuspeed - демон (скрипт запуска - /etc/rc.d/init.d/cpuspeed; файл настройки - /etc/cpuspeed.conf, /etc/sysconfig/cpuspeed), изменяющий частоту процессора в зависимости от нагрузки, температуры и источника питания. Под нагрузкой понимается доля времени, проводимое процессором в состоянии idle. Сигналы:

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

Модуль intel_pstate (Intel P-state для SandyBridge+ Intel, встроен в ядро в CentOS7) имеет ручки управления:

Утилита "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] (увеличивается потребление электричества).

Предохранение от перегрева (throttle - сбросить газ)

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%

Turbo Boost, SpeedStep, EIST, SST

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. Необходимо соблюдение следующих условий:

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

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

MCE

MCE - Machine Check Exception (реализация Intel - Machine Check Architecture (MCA)), аппаратные ошибки:

Типы ошибок:

Получить отчет (/etc/mcelog/mcelog.conf): mcelog --client.

Модуль cpuid

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

Привязка процесса к процессору

Для ограничения списка процессоров, которые могут использоваться для выполнения процесса (иногда полезно для увеличения производительности - не вымывает содержимое кеша) используется утилита taskset (маска - битовая маска допустимых процессоров: 1 - первый процессор, 2 - второй, 4 - третий и т.д.; 32-битные слова (big-endian) разделяются запятыми; без указания маски или списка процессоров утилита возвращает текущее значение маски):

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

Cache Coherent NUMA

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НОМЕР

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 в каталоге. Для переназначения другого процесса требуется также право на посылку сигнала этому процессу. Привязка к набору наследуется. Каждый набор представляется в виде каталога, содержащего следующие файлы:

После переноса задачи 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), ключи:

Размещение процессов по своим сокетам и узлам памяти уменьшает латентность памяти от 13% до 38%.

Библиотека libnuma (-lnuma, numaif.h, numa.h, numa(3)).

Планировщик

Ключи ядра:

Ссылки

@ Карта сайта News Автора!

Bog BOS: Процессоры в Linux: информация и управление

Последние изменения:
2024.03.28: sysadmin: Файловая система zfs под Linux для архива (обновление от 0.6 до 2.2)



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru