Bog BOS: Процесори в Linux: інформація і управління
Bog BOS: Процесори в Linux: інформація і управління
Остання зміна файлу: 2018.12.13
Скопійовано з www.bog.pp.ru: 2019.07.11
У статті описуються використовувані в 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 a ddress 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" викликає видачу в вигляді таблиці
Модуль 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)).
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%Особливістю процесорів 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. Чи має сенс його оновлювати при кожному завантаженні?
microcode: CPU0 updated from revision 0x45 to 0x47, date = 11092004При завантаженні модуля 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) ACPI: SRAT (v002 INTEL S5520UR 0x00000001 MSFT 0x0100000d) @ 0x000000008f7f0000 SRAT: PXM 0 -> APIC 0 -> Node 0 SRAT: PXM 0 -> APIC 4 -> Node 0 SRAT: PXM 0 -> APIC 2 -> Node 0 SRAT: PXM 0 -> APIC 6 -> Node 0 SRAT: PXM 1 -> APIC 16 -> Node 1 SRAT: PXM 1 -> APIC 20 -> Node 1 SRAT: PXM 1 -> APIC 18 -> Node 1 SRAT: PXM 1 -> APIC 22 -> Node 1 SRAT: Node 0 PXM 0 0-90000000 SRAT: Node 0 PXM 0 0-670000000 SRAT: Node 1 PXM 1 670 млн-c70000000
- numa = fake = параметри (імітувати необхідну конфігурацію NUMA, см. fake-numa-for-cpusets)
- numa = hotadd = відсоток (що таке hotadd пам'ять?)
Повідомлення про розподіл пам'яті по вузлах при завантаженні
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). Кореневої 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 memo ry 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 один тисячу двісті тридцять чотири min тисяча двісті двадцять дев'ять 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 тисяча сто тридцять три min 1012 max 2208 cycles / KB memory on node 3 memcpy avg 1 032 min 899 max 2203 cycles / KB memory with no policy STREAM Copy 2416.22 Sca le 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 M B / 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
- рознос переривань по ядрах при обслуговуванні великої трафіку
- 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 каналів (2x3) 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 (In tel 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) ОП (окремий ключ для ВМ))
Bog BOS: Процесори в Linux: інформація і управління
Copyright © 1996-2018 Sergey E. Bogomolov; www.bog.pp.ru (КДБ знає все, навіть те що у Вас на диску;) Завжди 0?Number_of_sets -?
Physical_line_partition -?
AMD?
Sys / devices / system / cpu / intel_pstate / no_turbo?
Чи має сенс його оновлювати при кожному завантаженні?
Навіщо це?
О таке hotadd пам'ять?
Використовувати системні установки, 0: чи не шукати, 1: всередині HT, 2: ядра всередині пакету, 3: всередині вузла, 4 -?
Переплутані Min і Max?